很容易看到是栈溢出漏洞,而且给出了一个sample()的函数来读取flag,直接覆盖返回地址,在本地调试很快就弄完了。但是没想到,跟服务器连接后,死活出不来。没办法,想到上一篇文章一样的坑,看来只能拿Shell才行了。
查找了很多资料,一开始想着用write()函数泄漏,结果没这个函数。还动过使用fprintf函数的想法,但是远程太坑了。留几个学习到的点:
1、 gbd中可以使用 print __libc_start_main验证地址,一般跟字符串漏洞相结合。字符串爆出栈内某个地址,可以动态的计算地址。当然也可以去libc database里面找具体哪一个glibc
2、安装https://github.com/inaz2/roputils,这个直接编译,编译完了以后链接到程序目录下面。
3、ELF在执行时,许多函数的地址是lazy binding的,即在第一次调用时才会解析其地址并填充至.got.plt
import sys
import roputils
import pwn
from pwn import *
#pwn.conte