最近读的论文是关于firmware emulation和firm fuzz的,正好这几天看了关于FirmAE的文章,就试着使用FirmAE来进行一次仿真模拟。
FirmAE的原理大概是以Firmadyne工具为基础,用程序对固件进行分析,然后模拟起来它的web服务。比较舒服的地方在于它自动化程度较高,一行指令就能从固件起到web服务。至于成功率用论文的原话来说就是:“successfully ran 892 (79.36%) of 1,124 fiemware images, including web servers, which is significantly(≈4.8x) more images than that run by Firmadyne”
,说是如此,但至于现实中具体的成功率嘛…不好评价。FirmAE的官方github仓库里有一张表格,记录了一些型号路由器的仿真结果:https://docs.google.com/spreadsheets/d/1dbKxr_WOZ7UmneOogug1Zykj1erpfk-GzRNni8DjroI/edit#gid=43726858,关于FirmAE的安装和使用可以参阅官方仓库:https://github.com/pr0v3rbs/FirmAE
固件模拟
网上找来D-Link820LA1型号的固件,下载地址:http://www.dlinktw.com.tw/techsupport/download.ashx?file=2663
FirmAE安装之后目录下会自带binwalk2.3.3的包,推荐使用FirmAE自带的binwalk(具体原因我暂时不清楚,有个别的型号的固件我用自己原本的binwalk后面起不来)。不过我们这次这个固件并没有加密,因此这一步其实可以跳过(。
然后可以把固件拖到FirmAE文件夹的firmwares目录下。先执行./init.sh
进行初始化
初始化完了通过sudo ./run.sh -r DIR820L ./firmwares/DIR820LA1_FW105B03.bin
跑模拟
第一次需要等很久(十来分钟可能)
等到出现如下回应就可以了:
然后可以在浏览器通过192.168.0.1访问到模拟器来的路由器后台
这里直接点取消,跳过引导。
CVE-2022-26258复现
首先登入界面用d-link的弱密码(空密码)直接点login登入。
然后可以先看这个CVE的description
看到洞在lan.asp
我们尝试去访问这个页面
如上图,肉眼可以猜出一些可能存在的漏洞点,ip、device name,这条CVE利用的是device name存在的注入
上burpsuite,在我们修改device name的时候抓个包
这里看到发了个POST请求,用了get_set.ccp这个程序
去固件里grep一下get_set
看到ncc2这个程序,这个应用主要进行网络等底层操作相关的操作
去ida逆一下这个二进制文件,(32位
字符串追踪DEVICE_NAME到这里
用system来执行,显然是利用这个洞来注入,但是前面有用hasInjectionString(*Obj) == 1
来判断是否有注入。
再grep一下这个函数名
然后去/lib/libleopard.so看这个函数
过滤了
1 | ` \\ ; ' | |
这几个符号。
过滤分隔符也是RCE里常见的操作,这是可以使用%0a代替,%0a其实在某种程度上是最标准的命令链接符号
192.168.0.2:80起个监听
构造exp如下
1 | POST /get_set.ccp HTTP/1.1 |
实现RCE:
如果您喜欢此博客或发现它对您有用,则欢迎对此发表评论。 也欢迎您共享此博客,以便更多人可以参与。 如果博客中使用的图像侵犯了您的版权,请与作者联系以将其删除。 谢谢 !