Dir-645任意文件读取漏洞

Posted Neil-Yale

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Dir-645任意文件读取漏洞相关的知识,希望对你有一定的参考价值。

本次实验分析及复现的漏洞来自于2017年Hack2Win 黑客竞赛,举办方在公网上提供 D-Link 850L 路由器作为攻击目标,竞赛持续了两个月,最终确定了3个漏洞:
Remote Command Execution via WAN and LAN
Remote Unauthenticated Information Disclosure via WAN and LAN
Unauthorized Remote Code Execution as root via LAN
第三个漏洞受限于环境无法复现,本次实验分析并复现第二个漏洞。另外,经过分析,dir-645存在相同的漏洞,本次实验以dir-645进行分析。

从官网下载来是一个压缩文件
在这里插入图片描述

解压并用binwalk提取后如下图所示
在这里插入图片描述

漏洞文件出现在/htdocs/web/getcfg.php
在这里插入图片描述

先看is_power_user
在这里插入图片描述

其用于判断用户权限。 G L O B A L S [ “ A U T H O R I Z E D G R O U P ” ] 的 值 大 于 等 于 0 时 , i s p o w e r u s e r 函 数 才 会 返 回 1 。 而 只 有 返 回 1 之 后 才 会 走 26 处 开 始 的 逻 辑 这 里 的 _GLOBALS[“AUTHORIZED_GROUP”] 的值大于等于0时, is_power_user 函数才会返回1。而只有返回1之后才会走26处开始的逻辑 这里的 GLOBALS[AUTHORIZEDGROUP]0ispoweruser1126_Globals数组是在cgibin文件中定义的,所以待会儿需要逆向cgibin

在这里插入图片描述

可以发现读取的文件名是拼接了变量 G E T C F G S V C , 而 该 变 量 从 GETCFG_SVC,而该变量从 GETCFGSVC,_POST[“SERVICES”] 中获取后,没有任何过滤操作。意味着这是我们可控的点。读取后的文件名是:/htdocs/webinc/getcfg/".$GETCFG_SVC.".xml.php,而DEVICE.ACCOUNT.xml.php有账号密码等敏感信息,所以可以据此进行构造

我们使用ghidra加载cgibin文件。
定位到main函数
在这里插入图片描述

会对请求的不同的文件进行不同的处理,其中调用了phpcgi_main,跟入
在这里插入图片描述

53行:经过sess_validate验证的数据会被赋给uVar1
54行:然后通过sprintf赋给AUTHORIZED_GROUP
染回会作为全局数组$_GLOBALS传递给php程序使用
59行:这里的10,是ascii码,对应的是\\n,用于分隔。其url编码为%0a,后面构造payload时会用到
61行调用了xmldbc_ephp(),全局数组就是通过它传递给php程序的
在这里插入图片描述

所以我们可以通过注入带有\\n的恶意字符payload来伪造$_GLOBALS[“AUTHORIZED_GROUP”]的值
payload很简单,SERVICE=DEVICE_ACCOUNT,因为拼接后的文件能够读取用户名密码等;然后\\n进行分隔,设置AUTHORIZED_GROUP=1
接下来可以通过shodan等此类搜索引擎,搜索对应型号,寻找目标。
这里直接给出一个
在这里插入图片描述

然后打开终端输入下图所示的payload
在这里插入图片描述

可以看到从回显中读出了用户名和密码

然后就可以使用读出的用户名、密码进入后台
在这里插入图片描述

如果是攻击者使用此种方式进入了后台,接下来就可以开展攻击了,比如劫持dns服务器,通过升级固件的方式植入存在后门的固件等
在这里插入图片描述

作为实验,本次实验到此结束。

参考
1.https://paper.seebug.org/papers/Archive/D-Link%20%E8%B7%AF%E7%94%B1%E5%99%A8%E4%BF%A1%E6%81%AF%E6%B3%84%E9%9C%B2%E5%92%8C%E8%BF%9C%E7%A8%8B%E5%91%BD%E4%BB%A4%E6%89%A7%E8%A1%8C%E6%BC%8F%E6%B4%9E%E5%88%86%E6%9E%90%E5%8F%8A%E5%85%A8%E7%90%83%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90%E6%8A%A5%E5%91%8A.pdf
2.https://ssd-disclosure.com/archives/3236/hack2win-2017-the-online-version-wip
3.https://ssd-disclosure.com/archives/3364/ssd-advisory-d-link-850l-multiple-vulnerabilities-hack2win-contest

以上是关于Dir-645任意文件读取漏洞的主要内容,如果未能解决你的问题,请参考以下文章

任意文件读取漏洞的利用指南

FFmpeg本地任意文件读取漏洞 / FFmpeg Local arbitrary file read vulnerability

Jenkins 任意文件读取漏洞(CVE-2018-1999002)复现与分析

安全研究 | Jenkins 任意文件读取漏洞分析

帆软报表 V8 get_geo_json 任意文件读取漏洞

CNNVD关于IBM WebSphere任意文件读取漏洞情况的通报