Ret2Libc 攻击技术

1. DEP 技术对stack overflow 的保护:


Data Execution Prevention:  去掉 stack 上的执行权限,可以阻止一部分基于 stack 的攻击。


 2. Ret2Libc 攻击原理


 Return-to-library technique
      简称“Ret2Lib”,这种技术可以绕过DEP的保护,其核心思想是把返回地址直接指向系统某个已存在的函数(一般是system,因为其使用简单,参数只有一个),这样同样可以达到攻击的目的。再来看刚才的例子,如果在badfile构造一些数据,使其被bof函数读取后,达到如下堆栈分布:


        这样当程序执行完bof后,马上就跳转到system函数了,然后去获取其第一个函数,即&"/bin/sh",这样就让程序直接跑起了一个sh进程了。 试想一下,如果这个程序是一个具备suid的程序,那就意味着我们轻易就获得了root权限了。


3. Ret2Libc 的预防


  Borrowed Code Chunks
     "Ret2Lib"一直工作得很好,直接x64体系的出现。x64相比于x86,最后的区别是函数参数的传递不再完全依赖堆栈,其规定函数的第一个参数必须保存到第一个寄存器即EAX,这导致单纯的把参数地址放在堆栈并不能很好的工作,除非函数本身不需要参数。因此,在这种情况下,Borrowed Code Chunks技术就诞生了。这种技术是Ret2Lib技术的一个思维突破,它不再单纯把返回地址指向整个函数入口,而且还包括函数中任意的指令片断。还是回到刚才的DEMO,如果要实现先把&"/bin/sh"的地址赋值给EAX,那么我们可以尝试寻找下列指令:

POP %EAX
ret
或者
POP %EAX
POP %EBX
JMP %EBX
等等
      假如我们找到前者的指令,这样我们在badfile写入如下数据:[POP_address][&/bin/sh][system_address][fake_ebp][fake_retaddress],同样可以达到攻击目标。


4. 补充:


     Ret2libc 攻击除了使用 system() 函数以外,还会使用 exec(), mprotect() 函数。

    mprotect() 函数可以改变 页表的属性,从而使 DEP 攻击失效。



  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值