[攻防世界]新手区level2
先看文件属性,知道是32位程序
开启了NX,没法用shellcode,但是没有栈保护,可以直接栈溢出
用32位IDA打开,先看字符串窗口,看看有没有可以直接利用的字符串
发现有system和/bin/sh可以利用,猜测需要溢出覆盖system函数参数,使其变成system(“/bin/sh”)来获取shell
再看main函数,没有什么疑点,点进vulnerable_function函数看看
发现buf长度为0x88,但read了0x100,且并没有输入限制,存在溢出漏洞
思路:
1 | from pwn import * |
payload解释:
- ‘a’*140:由于buf长0x88(十进制为136),且32位程序ebp长0x4(十进制为4),所以总共要填充140个字符
- p32(sys_addr):覆盖read的返回地址,使其变成system函数地址
- p32(0x1111):用于覆盖system的函数返回地址,由于system(“bin/sh”)执行完后会直接拿到shell,所以随便填一个地址即可
- p32(binsh_addr):字符串地址,system的参数
拿到shell以后,只需要ls看看有没有flag文件,如果有,直接cat flag就能拿到flag