D-Link DSL-3782 代码注入漏洞分析
2022-9-26 14:44:33 Author: 轩公子谈技术(查看原文) 阅读量:14 收藏

固件分析流程

固件分析流程通常包括固件提取、固件分析、文件系统提取、文件系统加载、文件系统分析五项。

固件提取

1.硬件设备提取,个人操作的话,这种需要资金支持

2.官网下载,这种比较直接,去官网下载固件包

固件分析

官网下载固件

https://eu.dlink.com/

先使用binwalk提取

Bin walk GitHub 直接下载

./binwalk -Me DSL-3782_A1_EU_1.01_07282016.bin

从中也可以看出一些信息,比如它的内核版本是linux 2.6.36

查看解压的文件

那么先不着急分析,既然得到了文件系统,可能有源码,也可能存在硬编码,账号信息等等

find . -name "*.conf"

那么就可以依次查看有没有敏感信息之类的。

漏洞分析

D-Link DSL-3782存在命令注入漏洞,该漏洞源于管理页面存在命令注入点。目前没有详细的漏洞细节提供。

搜管理相关的文件吧

find . -name "*manager*"

又因为是命令执行 所以涉及的函数可能是system exec 之类的。

搜索资料,它是在函数 byte_4C0160

推荐一个网站,可以将二进制文件全部转化为c语言,缺点就是不完整,他会把一些函数当作16进制数据,也不能跳转分析,

https://dogbolt.org/

直接搜byte_4C0160

那么还是使用IDA进行分析

搜索函数sub_474c78

f5查看伪代码

v0 = system(byte_4C0160); 存在system函数用来执行命令

输入x 获取交叉引用次数,就是谁调用他了

在x86汇编里,add是相加,在mips中 addiu也是加,这个汇编指令就是 v0+byte_xxxx 的值给v2

.text:00474BD8                 addiu   $s2, $v0, (byte_4C0160 - 0x4C0000).text:00474BDC                 move    $a0, $s2.text:00474BE0                 move    $a1, $zero.text:00474BE4                 jalr    $t9 ; memset.text:00474BE8                 li      $a2, 0x80.text:00474BEC                 li      $v0, 0x70  # 'p'.text:00474BF0                 beq     $s0, $v0, loc_474C58.text:00474BF4                 lw      $gp, 0x10($sp).text:00474BF8                 la      $t9, sprintf.text:00474BFC                 lui     $a1, 0x4A  # 'J'.text:00474C00                 move    $a0, $s2.text:00474C04                 li      $a1, aTracerouteNM10  # "traceroute -n -m 10 -w 2 %s > /tmp/var/"....text:00474C08                 jalr    $t9 ; sprintf.text:00474C0C                 move    $a2, $s1.text:00474C10                 lw      $gp, 0x10($sp).text:00474C14.text:00474C14 loc_474C14:                              # CODE XREF: .text:00474C70↓j.text:00474C14                 la      $t9, pthread_create.text:00474C18                 li      $a2, sub_474C78

上面的这些指令大致意思是 byte_4c0160的值给s2,s2给a0,然后t9 执行sprintf,然后t9 加载pthread_create指令,然后加载函数sub_474C78

查看c代码

f5没反应,在此处按p修复代码块

主要关注28,29行,byte参数由 v9传递,然后再去调用start_routine

如果a1和a2可控,v9就就会被执行,然后就会执行start_routine,start_routine函数又和sub_474C78一样

目的是为了执行sub_474c78函数的功能,这里设置了三个参数,api参数,有三个

tcapi_set("Diagnostics_Entry", "Result", "0");

故参数来自于前端api。

所以这个攻击链大致如下

sub_474c78 中存在system函数,函数的数据是byte_4c0160带入,执行命令sub_474AC8函数中的byte_4c0160数据由v9传递,v9 由a1,a2控制a1 a2 由start_routine函数中tcapi_set语句控制参数再由前端Diagnostics.asp页面中产生的

参考文章:https://www.iotsec-zone.com/article?id=240


文章来源: http://mp.weixin.qq.com/s?__biz=MzU3MDg2NDI4OA==&mid=2247487115&idx=1&sn=facfa5e91d0d99adeb8d419ed617762a&chksm=fce9a944cb9e2052e4d8e5d7935da129a8919d3ada75348b2b838f3aa6c6481a27cee74d8d7b#rd
如有侵权请联系:admin#unsafe.sh