CVE-2023-25395复现
CVE-2023-25395复现
固件下载地址:http://totolink.net/home/menu/detail/menu_listtpl/download/id/185/ids/36.html
影响版本
漏洞是位于/usr/lib/lighttpd/web/cgi-bin的cstecgi.cgi程序
漏洞分析
通过字符串setOpenVpnCertGenerationCfg,再通过ou传参最终可以实现命令注入(揭露者的poc是有问题的,他是批量提交都使用的是第一个的图片和方法,这个cve的poc最后是无法打通的),所以最后maur师傅最后另外找了一个方法,来实现命令注入
,但最后效果是一样的
首先是通过strstr函数将var指向输入的setOpenVpnCertGenerationCfg字符串,接着是v22指向off_44F048如果为空就指向最下面程序结束,接着将v42指向var即指向输入的字符串,接着将v42与v41不断进行比较,不同则将v41+0x44寻找下一个比较的字符串,相同则将v22指向v41+0x40(注意这里ida分析的伪代码是有问题的,实际实现起来也是有问题的),即指向0x4327fc。
接着进入这个函数,程序通过获取ou参数下的内容传递给v14,之后将v14带入到Uci_Set_Str函数中,在Uci_Set_Str函数中,通过snprintf函数,将a4匹配到的内容格式化进v11,之后将v11带入cstesystem函数中,函数直接将用户输入内容带入到execv函数中,实现命令注入
固件模拟
一开始尝试了两个自动化工具,我尝试了FirmAE,maur师傅尝试了Firmadyne,最后发现都不行(因为是要给qemu制定cpu参数)
所以最后决定使用qemu系统级模拟,一开始尝试的是使用buildroot编译内核和文件系统,但是由于我这里出现了一堆玄学问题和buildroot编译的mipsel32缺少很多东西(例如ssh),所以最后我使用了debian官网的debian_wheezy_mipsel_standard.qcow2和debian_wheezy_mipsel_standard.qcow2
1.启动qemu
这里得配置网络,以及指定这个固件的cpu参数
启动脚本:
1 |
|
2.将固件的文件系统传进qemu虚拟机
用debian官网的确实要方便一点,可以直接使用ssh传进来
1 |
|
3.启动固件的web服务
1 |
|
这样使用浏览器访问192.168.182.12就可以查看到浏览器的页面了,貌似是因为使用qemu模拟的原因和路由器真机还是有一定的偏差,导致js出了些问题无法完整的显示页面,但是并不影响复现这个cve
漏洞利用
可以直接使用bp传参,也可以使用curl传递post参数,这里我使用的是curl
1 |
|
上图可以看到是有回显的,并且通过ssh连入qemu虚拟机也可以发现成功写入了/tmp/256.txt文件
CVE-2022-41518 这个模拟的方式和前面也没差太多,漏洞也是一个命令注入,主要还是从exp学了点东西
1 |
|
命令注入主要是在hostname的处理,同样是sprintf的问题,然后通过nc -l -p 9999 -e bash就可以拿到shell了