Stack Smash

先決條件

記憶體必須載入洩漏的資料,必須能夠修改stack canary,常見於緩衝區溢位漏洞。

利用

找出argv[0]的地址並指向洩漏的資料指標位置。

方法一

透過除錯工具將堆疊打印出來,應該可以發現一個堆疊上的指標透過另外一個指標指向檔名。 試圖蓋過另外一個指標內容值,使它指向洩漏資料,讓最終指向目的地為洩漏資料。

方法二

可以透過除錯工具傳入辨識用參數, 並且找到相關檔名下面應該是辨識用參數

./a.out 辨識用

之後透過除錯工具將堆疊打印出來,找出該數值。

常見問題

Unknown

似乎找到正確位置卻輸出

*** stack smashing detected ***: <unknown> terminated

原因? 系統或libc?

經過測試之後(掛其他版本的libc)之後就正常顯示。掛libc

argc

基本上不用理會argc,因為報錯訊息依然是輸出argv[0]

參考


CTF PWN Vulnerability