结合题目,容易知道需要采用ROP方法。
ROP的全称为Return-oriented programming(返回导向编程),可以用来绕过现代操作系统的各种通用防御(比如内存不可执行和代码签名等)。ROP的核心思想就是利用以ret结尾的指令序列把栈中的应该返回EIP的地址更改成我们需要的值,从而控制程序的执行流程。
NX(DEP)的基本原理是将数据所在内存页标识为不可执行,当程序溢出成功转入shellcode时,程序会尝试在数据页面上执行指令,此时CPU就会抛出异常,而不是去执行恶意指令。随着 NX 保护的开启,以往直接向栈或者堆上直接注入代码的方式难以继续发挥效果。所以就有了各种绕过办法,rop就是一种
以上摘自蚁景科技文章
希望有助于你理解在构造脚本中填充p32(0xdeedbeef)的作用
首先检查文件:32bit-ELF,未开启canary,开启了NX。
拖入IDA,找出主函数,F5。进入自定义函数“vulnerable_function”。
只有一个输入语句,BUF只有0x88,可输入长度为0x100,存在溢出,在这里构造ROP。
F12,看看有没有可用的漏洞函数。
定睛一看,老熟人了,构造system("/bin/sh")的伪栈帧。
写好脚本,K.O.
Attention: 这里提供了py3的脚本,py3的User参看注释修改脚本即可
这里的worning是指py3会遇见的问题。
原文:https://www.cnblogs.com/BlankSpace/p/14289387.html