攻防世界easy Maze

2021-10-14 10:04:57 字數 1665 閱讀 2998

ida進入main函式

int __cdecl main(

int argc, const char **ar**, const char **envp)

可以看到這裡有三個函式,step_0,step_1,step_2,應該就是對已有資料的操作了。變數中v9已知;v7,maze未知,所以猜測step_0函式負責將v9的值經過變換傳遞給v7,step_1負責將v7的值變化傳遞給maze,最終由在step_2處傳入maze陣列。

進入step_2函式

__int64 __fastcall step_2(

int(

*a1)[7

])else

if( v7 >

'd')

else

}else

if( v7 ==

'a')

else}if

( v10 ==6&

& v9 ==6)

else

return result;

}

從陣列(a1)[7i+j]的表示中可以看出,陣列的行數為7。(7*7 的二維陣列)

由while迴圈看出,輸入最長不能超過30,且必須是」w」,」a」,」d」,」s」。

輸入」w」,i–;輸入」s」,i++;

輸入」a」,j–;輸入」d」,j++;

可以看出迷宮從左上角出發。

從最後的判斷條件i6,j6可以看出,最終移動目標是右下角。、

這樣就分析清楚了我們的輸入與行走方向的對應關係。之後我們知道迷宮究竟是怎麼樣的。這由step_0和step_1函式決定。

我們可以繼續對他們兩個函式進行靜態分析,寫出他們的功能,求出迷宮表示式。但是因為我們是從step_2函式的位置才開始輸入的,step_1的輸出結果與我們的輸入無關,是乙個固定不變的值,所以我們可以用gdb進行動態分析,讓他直接執行到step_2函式處,然後直接檢視maze的**。具體操作如下:

輸入命令:info functions step,返回所有名稱帶有step的函式:

我們給step_2函式下乙個斷點:b step_2

輸入命令:r執行至step函式開始位置。函式剛開始執行時,會為我們的輸入分配記憶體空間。因為是x64系統,所以函式傳遞引數時會先通過暫存器傳參。下圖框起來的部分就是將函式引數儲存到棧中的過程:

輸入命令:print $暫存器。將輸入的引數列印出來,rdi所存的引數就是maze陣列的起始位址。

輸入命令:x/80dw $1,將該片記憶體空間的資料列印出來,取前49個資料,這便是maze陣列的元素:

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