先捋一下整体思路:构造泄漏libc的payload,通过这个payload的libc来获取程序中system函数和”/bin/sh”字符串的偏移,然后计算出函数的真实加载地址。
plt表和got表:
plt表:跳板,跳转到一个地址来加载libc库。文件中会对每个用到的函数分配一个plt函数
got表:经过plt表的跳转会跳转会在got表上写入地址,这个地址是函数调用的真实地址
泄漏原理:
system_addr-libc_system=puts_addr-libc_puts=libc的偏移量
system_addr=puts_addr+(libc_system-libc_puts)
接下来着手做题,拿到题先检查
用ida分析如图为题中洞,框内作为一个断点
然后用gdb调试,发现需要填充数量
因为是用main函数来进行得到libc地址(关于这点我有点懵)
如果上边都理解了那么也就懂这exp了
1 | from pwn import * |