PWN中的ROPgadget

文章目录


前言

ROPgadget是一种基于代码复用的一种攻击技术。

一、ROP的使用(其中一种)

我们做pwn的时候,一般我们的目标是找到system函数和“/bin/sh”字符串,但是基本上pwn题是不会让你这么简单就解决了,他会隐藏system函数,和/bin/sh字符串,此时我们就要用到ROP方法。

ROPgadget --binary rop  --only 'pop|ret'
//单引号中间的是你要找的ropgadget的种类。
//rop是你要找的存有你需要的ropgadget的文件。

 

桌面$ ROPgadget --binary ret2libc3  --only 'pop|ret'
Gadgets information
============================================================
0x080486cf : pop ebp ; ret
0x080486cc : pop ebx ; pop esi ; pop edi ; pop ebp ; ret
0x08048399 : pop ebx ; ret
0x080486ce : pop edi ; pop ebp ; ret
0x080486cd : pop esi ; pop edi ; pop ebp ; ret
0x080481a1 : ret
0x080484ae : ret 0xeac1

Unique gadgets found: 7

 这就是我们使用ROP命令找到的gadget,当我们没有system并且我们没有对方网站的libc,我们可以使用execeve("/bin/sh",0,0)函数,用此函数时必须要让eax寄存器的值为0xb(该函数的编号)

payload(垃圾数据+p32(pop_eax_ret地址)+p32(0xb),p32(pop_ebx_ret地址)+p32("/bin/sh"地址)+p32(pop_ecx_edx_ret地址)+p32(0)+p32(0))

二、平衡栈帧

有时我们使用ROP时候需要考虑到平衡栈帧,因为栈是有限的,有的时候我们不仅仅是使用一两次ROP当使用两次以上ROP是我们必须要平衡栈帧。我们从最简单的例子入手(这是我自己假设的例子)。

buf1和buf2分别是gets和system的参数,如果我们直接这么构造payload那么这两个参数无法被清理那么我们就要使用pop函数来清理,我们可以这么改写。

 gets会被之前的执行溢出的函数retn掉,gets自己的retn返回到pop,pop_ebx将buf1放入寄存器ebx中,然后retn到system,后面的过程以此类推,使buf1,buf2,以及两个函数的数据都移出出栈,不占用栈的空间。(这里暂时讲一点,具体的以后再说。)

 


总结

pwn并不像我们想象的那么简单,并不是所有题都给你system函数以及/bin/sh字符串,我们必须要灵活运用他给我们的文件中做包含的函数,数据来构造。

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值