电子说
作者:景琇
提取固件并分析
binwalk -Me DSL-3782_A1_EU_1.01_07282016.bin
查看/usr/etc/init.d/rcS
#Web serverif [ ! -d "/var/boaroot/html/" ] || [ ! -d "/var/boaroot/cgi-bin/" ]; then/userfs/bin/boa -c /boaroot -d &/bin/rm -rf /var/boarootelse/userfs/bin/boa -c /var/boaroot -d &fi
说明boa为web server。
定位漏洞点
查询资料,官网说漏洞点出在cfg_manager的byte_4C0160中,使用IDA寻找一下。
进入sub_474c78,v0 = system(byte_4C0160);中使用system进行命令执行。
但是无法判断byte_4C0160是否为用户可控,寻找byte_4C0160的赋值点,查看byte_4C0160的调用。
addiu $s2,$v0,(byte_4c0160-0x4c0000)是MIPS的相加指令,即$s2=$v0+(byte_4c0160-0x4c0000),跟进查看。
.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,然后给了$a0,然后调用了sprintf,然后通过pthread_create调用了我们发现调用system函数的sub_474c78。
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !