博客
关于我
攻防世界-pwn1-Writeup
阅读量:566 次
发布时间:2019-03-09

本文共 1386 字,大约阅读时间需要 4 分钟。

如何利用栈溢出绕过canary保护机制

在安全研究中,asbrute force攻击和各种防护机制打臂 REQUIRED firm的实战经验无疑是宝贵的。在本例中,我们将探讨如何利用栈溢出漏洞绕过保护机制canary,进而控制程序执行。

背景与问题分析

程序的设计目标是实现对栈数据的读写操作,但其存在栈溢出漏洞。为了应对这一安全威胁,开发者采用了canary保护机制。这一机制通过在栈中预留一个小区域(canary),检测任何试图覆盖该区域的行为,从而防止栈溢出攻击。然而,正如每一项安全措施都可能被攻破一样,这一机制也有其漏洞。

栈溢出与canary绕过

程序中栈溢出的溢出空间相当大,而canary保护仅为特定的大小,通常是最后的字节。这意味着攻击者可以精确地覆盖一个canary的最后一字节,从而绕过保护机制。在这个过程中,攻击者通常会先确定canary的值,以便为后续步骤做准备。

通过分析程序,我们发现了一个在菜单中选择的操作,该操作允许攻击者读取大量栈数据。具体来说,在case1中,程序通过read函数读取了大量的数据,导致栈溢出。这一操作被用来作为绕过机制的突破口。

利用ROP链获取控制

一旦绕过了canary保护,下一步是控制程序执行。为了实现这一点,攻击者需要利用返回操作指令(ROP,Return-Oriented Programming),将程序控制回到已知安全区域,例如 main 函数。通过构造ROP链,可以实现这个控制过程。

接下来,攻击者需要读取libc中的函数地址,通常是通过Already Known是一些gadgets,比如 onegadget。这些gadgets通常可以通过利用栈上的函数调用来触发,从而获得更高的权限。

###Exploiting the栈溢出漏洞

在Python脚本中,利用PwN库,可以构造一个rop链来执行相关操作。我将构造一个包含canary地址的链,使得程序跳转到已知的 Address,我们可以用这 链来达到我们的目的,然后发送这个链作为回复。

攻击策略

为了实现攻击,我们首先构造一个可以读取栈溢出区域的payload,读取canary值。然后,构造rop链,通过jump到ROP gadgets,触发onegadget,从而获得control。

在实验中,我们通过:

payload = b'a'*0x88 + p64(canary) + p64(0xdeadbeef) + p64(pop_rdi) + p64(puts_got) + p64(puts_plt) + p64(start_addr) + p64(onegadget)

构造一个链,将程序控制到ROP环节,进而触发漏洞。

总结

利用栈溢出漏洞绕过canary保护,以及构造ROP链控制程序执行,是当今的常见漏洞利用方式。相对于直接的buffer overflow,这种方法更为灵活,允许攻击者做出更精确的控制。尽管开发者设有各种保护机制,攻击者回应的挑战始终在于如何突破这些防护,不被检测,并获得最终的finged control.

在实际应用中,值得注意的是,漏洞的类型和防护措施随购买发行型会发生变化。因此,持续学习和实践对应对这些问题至关重要。

通过以上步骤,可以成功绕过canary保护机制,控制程序执行,实现漏洞利用。

转载地址:http://smppz.baihongyu.com/

你可能感兴趣的文章
Palo Alto Networks Expedition 未授权SQL注入漏洞复现(CVE-2024-9465)
查看>>
Palo Alto Networks Expedition 远程命令执行漏洞(CVE-2024-9463)
查看>>
Palo Alto Networks PAN-OS身份认证绕过导致RCE漏洞复现(CVE-2024-0012)
查看>>
Panalog 日志审计系统 libres_syn_delete.php 前台RCE漏洞复现
查看>>
Springboot中@SuppressWarnings注解详细解析
查看>>
Panalog 日志审计系统 sprog_deletevent.php SQL 注入漏洞复现
查看>>
Panalog 日志审计系统 sprog_upstatus.php SQL 注入漏洞复现(XVE-2024-5232)
查看>>
Panalog 日志审计系统 前台RCE漏洞复现
查看>>
PANDA VALUE_COUNTS包含GROUP BY之前的所有值
查看>>
Pandas - 有条件的删除重复项
查看>>
pandas -按连续日期时间段分组
查看>>
pandas -更改重新采样的时间序列的开始和结束日期
查看>>
SpringBoot+Vue+Redis前后端分离家具商城平台系统(源码+论文初稿直接运行《精品毕设》)15主要设计:用户登录、注册、商城分类、商品浏览、查看、购物车、订单、支付、以及后台的管理
查看>>
pandas :to_excel() float_format
查看>>
pandas :加入有条件的数据框
查看>>
pandas :将多列汇总为一列,没有最后一列
查看>>
pandas :将时间戳转换为 datetime.date
查看>>
pandas :将行取消堆叠到新列中
查看>>
pandas DataFrame 中的自定义浮点格式
查看>>
Pandas DataFrame 的 describe()方法详解-ChatGPT4o作答
查看>>