💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
## 3.2、二进制的漏洞利用(2) 在该部分内容中,我们继续可利用漏洞的本地应用检查之路,并关注使用返回导向编程(ROP)来达到此目的。ROP是在代码结尾的返回指令中整合现有可执行片段的过程。通过创建这些“玩意儿”地址链可以在不引入任何新代码的情况下写新程序。 记住,在可利用程序的漏洞识别方法上你需要灵活应变。有时候有必要在漏洞利用开发过程中对一个漏洞多次利用。有时,你可能仅想用ROP来让你的shellcode执行,其他情况下,你可能想在ROP中完整写一个攻击载荷。偶尔,内存布局能使非常规的漏洞利用方法可行,例如,你可曾考虑过用ROP来构造一个不受控的格式化字符串漏洞? **课程** 本部分的课程将讨论返回导向编程(ROP)和绕过数据不可执行保护的代码重用。这些在漏洞利用细节上会更具体,且基于上部分所讨论的内容。 * [Return Oriented Exploitation](http://vimeo.com/54941772) * [Payload already inside data re-use for ROP exploits](http://www.youtube.com/watch?v=GIZziAOniBE)(特指Linux) **挑战工坊** 和前一个部分的挑战一样,在你clone repository后文件夹中有两个可执行文件。每个程序的漏洞利用都需要使用返回导向编程以读取flag。此次的挑战题没有提供源代码的访问。你需要对二进制程序进行逆向工程来发掘漏洞,并需要将漏洞利用的技术。同样,请使用相同的Ubuntu 14.04(32-bit)虚拟机。 **挑战题:brute_cookie** 运行bc程序,它会监听12345端口。 **挑战题:space** 运行作为space程序的host.sh,它会监听12348端口。 **挑战题:rop_mixer** 运行作为rop_mixer程序的host.sh,它会监听12349端口。 **工具** 参考前面所提到的工具。如果你还没有准备,你需要熟悉一下*NIX的binutils套件。像readelf、strings、objdump、objcopy和nm都是常用的有用工具。请使用软件包管理器和帮助页面安装和阅读它们的使用。 有几个现有的工具专门用来创建可重用代码的漏洞,它们比一般的反汇编器更加专业,因为它们会寻找合适的可执行代码段作为ROP目标(在指令、.rodata等中)。 * [RP](https://github.com/0vercl0k/rp) * [ROPGadget](https://github.com/JonathanSalwan/ROPgadget) * [BISC](https://github.com/trailofbits/bisc/)——适用于课程的简单工具 **资源** * [x86-64 buffer overflow exploits and the borrowed code chunks exploitation technique](https://trailofbits.github.io/ctf/exploits/references/no-nx.pdf) * [Surgically returning to randomized lib(c)](https://trailofbits.github.io/ctf/exploits/references/acsac09.pdf) * [Extensive security reference](https://code.google.com/p/it-sec-catalog/wiki/Exploitation) * [Dartmouth College: Useful Security and Privacy links](http://althing.cs.dartmouth.edu/secref/resources/buffer_overflows.shtml) * [Corelan Team Blog](https://www.corelan.be/index.php/articles/)