关于根据大佬的 (D-Link DSL-3782 的 CVE-2022-34527 漏洞分析)
关于根据大佬的 (D-Link DSL-3782 的 CVE-2022-34527 漏洞分析)
第一步、提取固件并分析
使用binwalk提取DSL-3782路由器的固件文件,
binwalk -Me DSL-3782_A1_EU_1.01_07282016.bin


然后就可以在系统文件里面随意分析了

随后查看 /usr/etc/init.d/rcS 配置文件

CVE-2022-34527存在于cfg_manager

用ida打开cfg_manager

搜索函数sub_474c78

使用F5反编译,但是不知道为什么这个版本问题,反编译失败,下面就用别的师傅的图。
进入sub_474c78,v0 = system(byte_4C0160); 中使用system进行命令执行。

但是无法判断byte_4C0160是否为用户可控,寻找byte_4C0160的赋值点,查看byte_4C0160的调用。

根据这段汇编,可以看到byte_4c0160传值给了$s2,然后给了$a0,然后调用了sprintf,然后通过pthread_create调用了我们发现调用system函数的sub_474c78。

然后查看伪代码,在.text:00474AC8代码处按P修复。

按F5反汇编。

红框标出的地方就是给byte_4c0160赋值的地方,创建的start_routine函数则是最开始定位到的sub_474c78函数。

继续分析给byte_4c0160赋值的代码
该值由v9控制,往上看代码
v9由传递的参数a1,a2控制。那么,如果sub_474AC8的a1,a2可控,就可以进行命令执行了。根据代码的经验,sub_474AC8是一个处理传入start_routine即sub_474c78函数的参数的前置函数,这一段的代码的主要目的是为了执行sub_474c78函数的功能。

代码中显然是在使用某一个api接口,全局搜索Diagnostics_Entry。



浙公网安备 33010602011771号