前言
声明:技术讨论仅限合法用途,不要用于从事相关违法行为,否则行为后果与本人无关
实际上这里需要两枚漏洞才能达成rce效果,一枚是带有鉴权的rce,另一枚则是绕过鉴权
而且这还是mirai变种比较青睐的一个漏洞
漏洞详情
带鉴权RCE
poc
注意仅仅在英语的页面有这个syscmd.htm
http://114.51.41.91/syscmd.htm/setup.cgi?todo=syscmd&cmd=”+$(“#cmdbox”).val()+”&curpath=”+$(“#curpath”).val()
逆向分析
网上那些分析突然上来就定位到漏洞函数,搞不懂噢,很想搞懂所以就,逆它
cgi程序如何进行请求参数的解析?
可以对着符号看看,关键的函数我没有更改名称
从main函数开始看,发现有个cgi_input_parse(),这里的v0起到很重要的作用(漏洞poc有todo字样,而后面就是判断了v0是否包含todo,肯定重要的),跟进看看
这里符号挺全的,而且逻辑很清晰,跟进 413248看看
InsertEntry逆不动。。。唉,但是根据字面意思猜测,这是用来插入某些值的,斗胆猜测a2就是目标地址
跟进 4130C8
就是这样了,现在搞清楚cgi程序是怎么处理web请求的参数了
todo=syscmd是怎么个处理逻辑
就是这样,我们知道了setup_main()的v0是什么了,这就是解析参数得到的结果,具体形式的话,还是得细看InsertEntry怎么实现才能完全理清,但目前来说理清数据流走向就差不多了,
显然要跟进CallActionByName,字面意思是 根据名称调用行为,显然syscmd也是行为的一种
显然要跟进ActionTab,因为没有别的可以为传入的参数进行执行什么的处理了
跟进以后发现是一个函数调用的地址表,还蛮大的
好好好,这就是syscmd,所以理清了todo=syscmd是怎么回事了
漏洞是怎么触发的
跟进syscmd看看,点击aSyscmd_0然后点击ascii “syscmd”的syscmd就到了
其实没啥
其实这里完全没有对cmd参数进行后端层面的过滤,所以可以认为这是存在漏洞的。
让我们看看有哪些前端文件使用了?
跟进syscmd.htm看一下
这里定义了用来做正则匹配的函数
这里作者对用户输入做了验证,规定一定要是ping、vi、vim之类的指令,实际上这里有两个问题
1.这里可以绕过,前面按规定好的格式,但后面加入&、|等符号来执行下一条指令就行
2.笑点解析:前端验证
进行了ajax请求,这里就是漏洞触发点,因为cmd参数对用户来说是可控的,而前面的请求又是可以伪造的
测试poc
启动attifyos3,
iot@attifyos ~/t/firmware-analysis-toolkit> python3 fat.py ./firmwares/DGN1000WW_V1.1.00.45.img
然后,仿真是失败的,详情如下
使用自带的zenmap扫80端口发现没启动。。。
访问也是失败,不知道有人和我一样的吗
(后来问了别的iot安全师傅发现,原来fat是一种很低成功率的仿真方式,唉)
使用fofa找了一下,由于http头包含设备型号,所以还是很准确的,而且带漏洞运行的设备还是挺多的
发现要鉴权,当然随手就是一个默认密码的,admin:password
1.直接构造请求包,绕过前端验证
2.经过前端js的话,使用|等符号绕过命令注入就ok
等下分析完鉴权绕过漏洞看看。不要进行任何出格的行为
鉴权绕过
实际上鉴定权限的是这个字段
base64解码后
寻找相关字段的出现点
定位到setup.cgi唯一的err401文件
所以超时是kill掉所有mini_httpd的,那么说明mini_httpd就是承载web服务的关键程序
搜索得到该文件的路径,分析一下看看
在这个文件里面找到了鉴权字段相关的函数,实际上出现位置集中在两个方法
分别是
void sub_404A44() //漏洞出现处
void sub_402AB0() //即源码中的send_authenticate,也处理一部分鉴权逻辑,
实在是巨长,而且缺乏调试什么的时间投入,逆向失败,直接找网上相关开源的代码,对照着看就舒服了
https://github.com/peter-leonov/mini_httpd/blob/master/mini_httpd.c
这样对照着看就舒服了,可以发现作者还是有diy的
当务之急是找到怎么鉴权的
很有意思的一点是,作者把这个循环套娃解析数据包的改成了鉴权的,
事实上dword_10001228就是权限的标志数,
这些魔改,造成了后面一系列的惨案。。。
测试
为了更好的体会漏洞的危害程度,随便找了两个fofa的目标,结果发现它们都还没有修复这个2021年的漏洞
顺带一提,msf已经集成该洞的exp
msf > use exploit/linux/http/netgear_dgn1000_setup_unauth_exec
tql师傅带带我
我是跟着微信公众号”只关于二进制”学的呜呜