我爱辅助论坛

 找回密码
 【点我注册】

QQ登录

只需一步,快速开始

查看: 1069|回复: 2

[技术分享] 开源Web服务器GoAhead漏洞CVE-2017-17562分析

[复制链接]

签到天数: 441 天

[LV.9]以坛为家II

发表于 2018-5-12 08:56:07 | 显示全部楼层 |阅读模式
本帖最后由 ~Time丶· 于 2018-5-12 08:57 编辑
开源Web服务器GoAhead漏洞CVE-2017-17562分析

一.简介
GoAhead Web Server是为嵌入式实时操作系统定制的开源Web服务器。IBM、HP、Oracle、波音、D-link、摩托罗拉等厂商都曾在其产品中使用过GoAhead。根据反病毒实验室评估,全网有百万级别左右的设备运行该服务,鉴于嵌入式设备更新的滞后性,该漏洞影响的范围较广,后续mirai等恶意家族极有可能会利用该漏洞扩展僵尸主机,因此,反病毒实验室将对该漏洞进行持续关注,并将第一时间更新相关漏洞信息。
二.影响版本
GoAhead 3.6.5之前的版本(2.5.0 – 3.6.4)
三.漏洞成因
该漏洞的原因在于cgiHandler函数使用了不可信任的HTTP请求参数初始化已fork的CGI脚本的环境,当与glibc动态链接器结合使用时,可能会被使用特殊变量(如LD_PRELOAD)的导致远程代码执行。
从代码中可以看到,对于用户访问时所带的参数字段,只是对REMOTE_HOST和HTTP_AUTHORIZATION进行了过滤,所有其他参数都被认为是可信的而没有经过过滤。 正是由于对于参数的过滤不全,导致了用户可以修改CGI程序的LD_PRELOAD环境变量。

2345_image_file_copy_1.jpg


而补丁后的版本,对参数首先跳过待定的参数名称,并使用静态字符串做为其前缀。补丁后代码如下:


2345_image_file_copy_2.jpg

四.漏洞利用
漏洞利用首先使用上面的参数过滤不严的漏洞,向服务器发送LD_PRELOAD的环境变量,在系统的动态链接库的入口函数dl_main 中,会首先调用 process_envvars处理参数,链接器在解析envp数组时,如果找到特殊的变量名称(如LD_PRELOAD),则执行不同的代码路径。这里对LD_PRELOAD的处理,其中preloadlist被初始化。

2345_image_file_copy_3.jpg

随后,如果 preloadlist 不为空的话,会调用 handle_ld_preload函数
2345_image_file_copy_4.jpg


通过上面这些内容,可以实现通过设置LD_PRELOAD变量,来达到加载代码的目的。那么,如果能够通过gohead服务程序,将恶意程序发送到服务器并保存在固定目录下,就可以完美实现漏洞利用。
launchCgi函数调用系统函数dup2()将stdin文件描述符指向了POST请求数据对应的临时文件。 这意味着对于可以用类似LD_PRELOAD = / tmp / cgi-XXXXXX的请求,总会在磁盘有一个包含对应内容的文件,在这种情况下,如果能够猜出临时文件名,就能达到漏洞利用。
下图显示了launchCgi函数最终会调用execve函数加载执行。

2345_image_file_copy_5.jpg

实际上,我们很难猜出这个临时文件的文件名,但Linux procfs文件系统的一个很有用的符号链接:/proc/self/fd/0,,它对应着文件的stdin描述符,在这里,它也就指向了临时文件路径。通过使用/proc/self/fd/0符号链接,就可以访问到post到服务端的代码数据,通过这一系列的组合,最终就达到远程代码执行目的。
将上面的过程串联起来后, 在本地搭建测试环境,测试效果如下:


2345_image_file_copy_6.jpg

五.参考
https://www.exploit-db.com/exploits/43360/
https://github.com/elttam/advisories/tree/master/CVE-2017-17562


温馨提示:为了保护系统安全,使用辅助前,请务必使用影子系统。

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【好评】【金币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

签到天数: 7 天

[LV.3]偶尔看看II

发表于 2018-5-12 18:14:22 | 显示全部楼层
金币是个好东西

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【好评】【金币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

签到天数: 1 天

[LV.1]初来乍到

发表于 2018-7-27 13:52:23 | 显示全部楼层
小手一抖 金币到手

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【好评】【金币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 【点我注册】

本版积分规则

QQ|小黑屋|我爱辅助 ( 辽ICP备19006053号-1 )

GMT+8, 2025-6-16 04:18 , Processed in 0.043225 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表