本題為 xctf 3rd-gctf-2017 的 re, 該題目有一些小坑,特此記錄
拿到題目後反編譯如下:
這是通過字串查詢找到的主方法main:
__int64 sub_400f8e()
v3 = v9 ^ v5;
if( v6 !=((
unsigned __int8)v9 ^ v5)
) v11 =0;
--v10;
}while
( v10 );if
( v11 )
v2 =
sub_407470((
unsigned __int64)
"congras\n");
else
v2 =
sub_407470((
unsigned __int64)
"oh no!\n");
return
0ll;
}
其中:sub_407470為類似於printf的函式
sub_406d90為隨機數生成函式,且seed為固定值
重點是要理解這個函式的邏輯是啥。。雖然這個判斷只取了有輸入字串的10個字元,但是實際上需要輸入的字串是22位(也就是實際上flag有22個char)。。
之後程式會從這裡面隨機選擇乙個數字i,然後從byte_6b4270和輸入的字串中分別取出第i個字元v6和v5,將v5的內容和乙個生成的大數進行異或運算與v6比較。
整體邏輯如上,而且我們發現,這個i具體是多少其實是不需要的,因為這個i是隨機生成的用於檢驗得到的flag的(理解這點後題目就變得十分簡單了),所以我們需要做的時按程式正向邏輯進行爆破或者逆向生成這flag即可。
需要注意的是,雖然很多時候這種類似 unsigned __int8 的資訊會被我們忽略, 但是在本題中它是非常重要的, 它標表示這個數被轉型為8個bit長(也就是只有乙個位元組,剛好是我們ascii表的範圍),故指令碼中我們需要與上乙個0xff
綜上,我們最終的指令碼如下:
cyphered =
[0x5f
,0xf2
,0x5e
,0x8b
,0x4e
,0x0e
,0xa3
,0xaa
,0xc7
,0x93
,0x81
,0x3d
,0x5f
,0x74
,0xa3
,0x09
,0x91
,0x2b
,0x49
,0x28
,0x93
,0x67
]flag =
''for i in
range(22
):v6 = i +
1 v10 =
0 v11 =
0while v10 < v6:
v10 = v10 +
1 v11 =
1828812941
* v11 +
12345
print
("%x"
%(cyphered[i]
^v11)
) flag +=
chr(
(cyphered[i]
^v11)
&0xff
)#注意這個0xff
print
(flag)
總結:
本題中需要注意的有兩點,其一就是對程式邏輯的理解,flag有22位。。 另乙個就是0xff,理解這幾點後做題會順利很多。
攻防世界mfw 攻防世界 Web mfw
題目資訊 image.png 工具 githack,dirsearch 知識點 git漏洞 審計 開啟題目場景,檢查 發現這樣乙個頁面 image.png 訪問.git目錄,疑似存在git原始碼洩露 image.png 再用dirsearch掃瞄,發現git原始碼洩露 使用 githack獲取原始碼...
攻防世界Web lottery
開心!雖然第一次遇到git原始碼洩露寫了好久,但是寫出來了就很開心 開啟介面我們知道,要拿到flag,就要贏到足夠的錢,其實一開始我以為可以找到乙個地方直接修改餘額什麼的,把網頁源 中的檔案看了幾個都沒發現突破口 然後又沒思路了 嘗試了一下robots.txt,想看看有沒有什麼檔案,然後發現了 瞬間...
攻防世界 xctf Guess writeup
本題的解析官網上有,這裡是乙個自動化的指令碼,完成的是自動上傳乙個ant.jpg的檔案 ant.jpg是乙個ant.zip壓縮包重新命名的檔案,裡面是乙個ant.php的一句話木馬 執行返回的是在web後台這個檔案重新命名後的檔案的url。可通過zip偽協議訪問這個木馬。指令碼如下 import r...