先決條件
記憶體必須載入洩漏的資料,必須能夠修改stack canary,常見於緩衝區溢位漏洞。
利用
找出argv[0]
的地址並指向洩漏的資料指標位置。
方法一
透過除錯工具將堆疊打印出來,應該可以發現一個堆疊上的指標透過另外一個指標指向檔名。 試圖蓋過另外一個指標內容值,使它指向洩漏資料,讓最終指向目的地為洩漏資料。
方法二
可以透過除錯工具傳入辨識用參數, 並且找到相關檔名下面應該是辨識用參數。
./a.out 辨識用
之後透過除錯工具將堆疊打印出來,找出該數值。
常見問題
Unknown
似乎找到正確位置卻輸出
*** stack smashing detected ***: <unknown> terminated
原因? 系統或libc?
經過測試之後(掛其他版本的libc)之後就正常顯示。掛libc
argc
基本上不用理會argc
,因為報錯訊息依然是輸出argv[0]
。
參考
CTF PWN Vulnerability