7
閱讀「Hacking - The Art of Exploitation」一書;我正在跟隨作者,因爲他通過溢出堆棧和更改函數的返回地址來更改執行流程。 (具體而言,135-136頁),他管理着一個Perl腳本,要做到這一點,進入返回地址作爲命令行參數10倍:用Perl腳本寫入以0x00開頭的地址
$ ./auth_overflow2 $(perl -e 'print "\xbf\x84\x04\x08"x10')
其中0x080484bf
是返回地址。
我想要做同樣的事情,但我的返回地址以0x00開頭。用\ x00替換\ x08,空字符將被省略,因此我要輸入的地址在存儲器映射中被移位一個字節。我該如何解決這個問題?
我不認爲這是有道理的。 bash不能使用空值處理字符串,但即使這樣做,您也無法將這樣的字符串作爲參數傳遞給進程,因爲exec會期待null結束的字符串,因此它會忽略null後面的所有字符。 – redneb
@redneb我明白了......你能想出任何替代方法來填充內存地址爲dword的地址嗎? (包括以0x00開頭的地址) –
您必須修改'auth_overflow2'來接受例如地址的十六進制表示。 – redneb