天天看點

ROPgadget 安裝 錯誤處理 與使用

0x0 開始

做題需要用到ROPgadget,去安裝下載下傳,然後麻煩越來越多,将成功過程記錄下來。

它就是用來查找你的二進制檔案中你想要的一些指令,友善你加以利用。

有了ROPgadget 你會發現one_gadget也是必須的。

one_gadget的安裝與使用

0x0.1介 紹

使用此工具,您可以在二進制檔案中搜尋Gadgets,以友善您對ROP的利用。

随着 NX 保護的開啟,以往直接向棧或者堆上直接注入代碼的方式難以繼續發揮效果。攻擊者們也提出來相應的方法來繞過保護,目前主要的是 ROP(Return Oriented Programming),其主要思想是在棧緩沖區溢出的基礎上,利用程式中已有的小片段 (gadgets) 來改變某些寄存器或者變量的值,進而控制程式的執行流程。所謂 gadgets 就是以 ret 結尾的指令序列,通過這些指令序列,我們可以修改某些位址的内容,友善控制程式的執行流程。

我們知道x86都是靠棧來傳遞參數的而x64換了它順序是rdi, rsi, rdx, rcx, r8, r9,(這裡6個寄存器可以被了解為Gadgets)如果多于6個參數才會用棧我們要先知道這個特性.

有的題,裡面既沒有現成的system也沒有/bin/sh字元串,也沒有提供libc.so給我們,那麼我們要做的就是想辦法洩露libc位址,拿到system函數和/bin/sh字元串;

我們就需要擷取rdi, rsi, rdx, rcx, r8, r9它們的位址,首先要擷取的是rdi的位址;

這就是 ROPgadget 的作用;

0x1 安裝

安裝指令

sudo apt-get install python-capstone

git clone https://github.com/JonathanSalwan/ROPgadget.git

cd ROPgadget

sudo python setup.py install
           

0x2 出錯處理

ROPgadget 安裝 錯誤處理 與使用

出錯。。。

解決方案

先進目錄

然後注意剛剛最後報錯那一段,at後面引号裡面那一段,他說缺那個目錄。

然後輸入

sudo cp -r scripts /home/wuangwuang/.local/lib/python2.7/site-packages/ROPGadget-6.3.dist-info
           

不要直接複制,使用者、python版本啥的都不一樣,那個 sudo cp -r scripts 然後再把剛說的引号裡面的複制下去,搞定。

0x3 使用

64位彙編傳參,當參數少于7個時, 參數從左到右放入寄存器: rdi, rsi, rdx, rcx, r8, r9。 > 當參數為7個以上時,

前 6 個與前面一樣, 但後面的依次從 “右向左” 放入棧中,即和32位彙編一樣。

一.

指令: ROPgadget --binary 檔案名 --only "pop|ret" | grep rdi
指令: ROPgadget --binary 檔案名 --only "pop|ret" | grep rsi
指令: ROPgadget --binary 檔案名 --only "pop|ret"
指令: ROPgadget --binary 檔案名  --only 'int'   查找有int 0x80的位址
           

二.

該工具除了可以用來查找 ret/rdi的位址,還可以用來查找一些字元串的位址

指令: ROPgadget --binary 檔案名 --sting '/bin/sh'

指令: ROPgadget --binary 檔案名 --sting '/sh'

指令: ROPgadget --binary 檔案名 --sting 'sh'

指令: ROPgadget --binary 檔案名 --sting 'cat flag'

指令: ROPgadget --binary 檔案名 --sting 'cat flag.txt'
           

繼續閱讀