XCTF level2 pwn之ROP初体验(爬

XCTF level2 pwn之ROP初体验(爬

结合题目,容易知道需要采用ROP方法。

给和我一样小白的餐前点心

ROP&NX?

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,看看有没有可用的漏洞函数。

ssJ2cj.png

定睛一看,老熟人了,构造system("/bin/sh")的伪栈帧。

写好脚本,K.O.

脚本

Attention: 这里提供了py3的脚本,py3的User参看注释修改脚本即可

这里的worning是指py3会遇见的问题。

ssJRjs.png

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章