1. 程式人生 > 實用技巧 >[WP]XCTF-easyre-153

[WP]XCTF-easyre-153

1、檢視基本資訊,32 位 ELF 程式,注意到是靜態連結

運用 strings 工具發現了 UPX 字樣

2、脫殼

3、載入 IDA

一個程序在由 pipe()建立管道後,一般再fork一個子程序,然後通過管道實現父子程序間的通訊,管道兩端可分別用描述字fd[0]以及fd[1]來描述,需要注意的是,管道的兩端是固定了任務的。即一端只能用於讀,由描述字fd[0]表示,稱其為管道讀端;另 一端則只能用於寫,由描述字fd[1]來表示,稱其為管道寫端。如果試圖從管道寫端讀取資料,或者向管道讀端寫入資料都將導致錯誤發生。

關於 fork 函式

1)在父程序中,fork返回新建立子程序的程序ID;
2)在子程序中,fork返回0;
3)如果出現錯誤,fork返回一個負值;

在子程序中寫入了一個字串,在父程序中讀取,

注意到正確輸出後有一個 lol 函式,傳入的引數即讀取到的 69800876143568214356928753

4、寫出 EXP,執行得到 flag

 1 a = '69800876143568214356928753'
 2 a = list(map(ord, a))
 3 v2 = 2 * a[1]
 4 v3 = a[4] + a[5]
 5 v4 = a[8] + a[9]
 6 v5 = 2 * a[12]
 7 v6 = a[18] + a[17]
 8 v7 = a[10] + a[21]
 9 v8 = a[9] + a[25]
10
v = [v2, v3, v4, v5, v6,v7, v8] 11 flag = '' 12 for i in v: 13 flag += chr(i) 14 print(flag)