博客
关于我
攻防世界-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/

你可能感兴趣的文章
quiver绘制python语言
查看>>
pip下载缓慢
查看>>
PIP使用SSH从BitBucket安装自定义软件包,无需输入SSH密码
查看>>
pip命令提示unknow or unsupported command install解决方法
查看>>
pip在安装模块时提示Read timed out
查看>>
pip更换源
查看>>
SpringBoot之Banner源码深度分解
查看>>
Pix2Pix如何工作?
查看>>
QuickBI助你成为分析师——搞定数据源
查看>>
pkl来存储python字典
查看>>
quick sort | 快速排序 C++ 实现
查看>>
pkpmbs 建设工程质量监督系统 Ajax_operaFile.aspx 文件读取漏洞复现
查看>>
pkpmbs 建设工程质量监督系统 文件上传漏洞复现
查看>>
pku 2400 Supervisor, Supervisee KM求最小权匹配+DFS回溯解集
查看>>
queue队列、deque双端队列和priority_queue优先队列
查看>>
PKUSC2018游记
查看>>
PK项目测试,做产品测试有这4大优势!
查看>>
pl sql 的目录 所在的目录 不能有 小括号,如 Program Files (x86)
查看>>
PL SQLDEVELOPMENT导出数据库脚本
查看>>
Queue
查看>>