有关GoAhead CVE-2017-17562的一些零碎点
发布于 2 年前 阅读权限 无需登录 作者 m0rk 876 次浏览 来自 知识碎片

TL;DR

  • 前两天看到这个漏洞的时候感觉还是挺有意思的,让我想起了之前分析的nginx提权漏洞(CVE-2016-1247)以及shellshock漏洞(CVE-2014-6271),前两天只是简单的看了一下,今天有时间就整理一下,留个备忘。
  • goAHead是一个使用c语言实现的一个简单web服务器,主要用在嵌入式设备上,官方给出的一句话描述也是simple,secure Embedded web server,官方说有亿万的设备在使用(夸张了吧?),其中有像是hp、oracle、西门子、摩托罗拉等。详细可以看向这里https://embedthis.com/goahead/

CVE-2016-1247简单介绍

  • 这个漏洞可以导致GoAhead web服务器在小于3.6.5版本远程代码执行。攻击者通过发送一个恶意的http请求,利用开启了CGI功能的goAhead的服务器,从而进行远程代码执行。其中exp是利用到了向新的进程中注入环境变量这种比较基本的攻击方式。
  • 具体需要的条件主要有如下:
    1.GoAhead开启CGI功能,即有cgi的处理页面(关于goAhead cgi的使用可以看向这里https://embedthis.com/goahead/doc/users/cgi.html)
    2.需要GoAhead版本低于3.6.5
    3.需要动态链接glibc库(默认是动态链接的)

具体

  • 在英文原版文章中作者已经分析了glibc是如何加载和处理环境变量、goAhead如何处理cgi以及linux的procfs的符号链接如何指向输入描述符等,我这里就不细分析了。下面只是放几张测试的图片。 origin.pngpoc.pngafterpoc.png (a.html extract from wireshark) 可以看到,打过payload之后,页面返回的环境变量多了一个LD_PRELOAD=/proc/self/fd/0的键值对。 proc.png 可以看到,cgi处理进程符号链接指向的tmp文件和我们的payload是相同的。

小结

  • 这个漏洞利用的难点在于怎么将动态链接库注入到远程服务器,作者这里提供了一个很好的思路就是利用到了/proc/self/fd/0(它对应了文件的stdin文件描述符)这个文件就链接到了我们上传的文件。
  • 就像英文原版文章的标题一样,这个漏洞的精髓就是利用ld_preload来进行exploit,这个思路很新颖,后面可能会有其它的漏洞用到这个思路和方法。

漏洞引申1-有关nginx提权

作者的poc shell脚本写的不错

Nginx权限提升漏洞(CVE-2016-1247) 分析

  • 之前简单研究过nginx的提权漏洞,和这次的漏洞有一些像,也用到了环境变量,nginx的这个漏洞用到了写入恶意动态链接库路径到/etc/ld.so.preload。

漏洞引申2-有关shellshock

漏洞引申3-其它

Reference

REMOTE LD_PRELOAD EXPLOITATION

1 回复

大神们的思路都值得学习;还有之前反序列化回显思路:

http://www.freebuf.com/sectool/88908.html

回到顶部