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

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