簡體   English   中英

溢出無法打印的字符

[英]overflow with unprintable characters

我做這個溢出練習和我試圖通過溢出訪問的 memory 地址是 0x6010e0,問題是,我很難將這個輸入到程序中。

我試過了

python -c 'print("a"*32 + "\xe0\x10\x60")' > test.txt

然后在 gdb 中,

run < test.txt

但到目前為止還沒有運氣

您應該記住幾件事。

  1. Memory 地址是 32 位或 64 位,但\xe0\x10\x60只有 24 位。 如果要將完整地址插入堆棧,則應將其更改為\xe0\x10\x60\x00 (對於 32 位 little-endian 機器)或\xe0\x10\x60\x00\x00\x00\x00\x00 (用於 64 位小端機器)。

  2. Python 中的print語句將 output 在您的字符串之后換行( \x0a )。 您可以通過將end參數設置為空字符串(例如print("blah", end="") )來停止此操作,但由於另一個問題,這仍然無法解決問題......

  3. 如果你從命令行運行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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM