攻防世界 polyre

2022-09-10 10:27:20 字數 2215 閱讀 8803

writeup

ida開啟檢視,可以看到使用了ollvm中的一種**保護方式——控制流平坦化。在ida反彙編上顯示出來就是使用while+switch的形式,經過平坦化之後的**塊大部分整齊地堆積在程式流圖的下方,而這部分**就是真正有意義的**塊,稱之為相關塊。

具體指令碼編寫思路可參考:

或者直接網上找指令碼(需要安裝angr):

指令碼解完後,main函式裡已經能看出大概邏輯了,不過仍有大量的while ture和不透明謂詞,需要再寫指令碼處理這些虛假控制流,

具體符號執行指令碼編寫思路可參考:

我這裡就針對題目簡單寫個ida指令碼,由除錯這些可以知道,紅框部分的判斷恒為false,所以有大量**塊永遠不會執行到,把這些不會執行到的**塊nop掉,條件判斷的jnz改jmp。

我這裡ida是7.5版本,和之前版本有些api函式變化,可參考官網:

幾個注意點:

這裡jnz操作碼是0f 85,修改成jmp的e9後,需要再修改偏移量,jnz這條指令長度為6,jmp長度為5,需要把addr+5處nop掉。

jmp偏移量=目標位址-(當前位址+當前指令長度)

只是要ida能f5反編譯結果的話,修改好jnz成jmp就好了,那些不可達**塊不nop掉無所謂

ida指令碼如下

def

nextaddr(addr):

return addr+get_item_size(addr)

st=0x400620ed=0x4020c7addr=st

while addr

if"ds:dword_603054"in

generate_disasm_line(addr,0):

while

true:

addr=nextaddr(addr)

if"jnz"

ingenerate_disasm_line(addr,0):

dest=get_operand_value(addr,0)

offset=dest-(addr+5)

patch_byte(addr,0xe9)

patch_byte(addr+5,0x90)

patch_dword(addr+1,offset)

break

if addr>=ed:

break

addr=nextaddr(addr)

view code

再f5就能看到較清晰的**邏輯了,對輸入的字串,分成6組,每組8個字元,

解密指令碼如下:

s=[0xbc8ff26d43536296, 0x520100780530ee16, 0x4dc0b5ea935f08ec,0x342b90afd853f450, 0x8b250ebcaa2c3681, 0x55759f81a2c68ae4]

res=""

key=0xb0004b7679fa26b3

for item in

s:

for j in range(64):

f=item&1

if f==1:

item=(item^key)//2item = item | 0x8000000000000000

else

: item=item//2n=hex(item)[2:]

print

(hex(item))

for j in range(len(n)-1,-1,-2):

res += chr(int("

0x" + n[j-1:j + 1], 16))

print(res)

在原來的數左移一位之後,結果最後一位必然是0,如果原來的數大於0,那一次處理的結果最後一位必然是0。如果原來的數小於0,則在進行一步和0xb0004b7679fa26b3異或,異或後最後一位必然是1。所以可以根據結果的最後一位是1還是0,判斷原來數是否小於0。如果小於0,負數右移一位會溢位成正數,在加上0x8000000000000000才能得到原來的數。

得到flag

攻防世界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...