登录后台

页面导航

本文编写于 121 天前,最后修改于 89 天前,其中某些信息可能已经过时。

D-Link DIR-R815路由器多次溢出漏洞分析

下载地址:DIR-815_FIRMWARE_1.01_2.zip

先去exp-db看一下漏洞

cookie存在溢出,在/hedwig.cgi里

binwalk提取出来,找到文件

查看发现它指向/htdocs/cgibin,

用ida打开,文本查找http_cookie,只在sess_get_uid函数里和.rodata段找到

通过点击回溯函数,一步步可以倒退到main函数,这样就可以理清函数的逻辑图

1.从主函数最后走到hedwigcgi_main函数里

2.hedwigcgi_main函数里会调用sess_get_uid

建议使用ghidra配合ida看程序逻辑
这里出了个小问题,第一次回溯到phpcgi里面去了,找错了,由此产生一个问题,为什么偏偏是hedwigcgi_main调用sess_get_uid发生了漏洞,而不是其他函数??

启动脚本在随书附赠的工具与资源里面有脚本

#!/bin/bash

#sudo ./pentest_cgi.sh 'uid=1234' `python -c "print 'uid=123'+'A'*0x600"`

INPUT="$1"
TEST="$2"
LEN=$(echo -n "$INPUT" | wc -c)
PORT="1234"

if [ "$LEN" == "0" ] || [ "$INPUT" == "-h" ] || [ "$UID" != "0" ]
then
    echo -e "\nUsage: sudo $0 \n"
    exit 1
fi

cp $(which qemu-mipsel) ./qemu

echo "$INPUT" | chroot . ./qemu -E CONTENT_LENGTH=$LEN -E CONTENT_TYPE="application/x-www-form-urlencoded" -E REQUEST_METHOD="POST" -E HTTP_COOKIE=$TEST -E REQUEST_URI="/hedwig.cgi" -E REMOTE_ADDR="192.168.1.1" -g $PORT /htdocs/web/hedwig.cgi 2>/dev/null
echo 'run ok'
rm -f ./qemu

按照书上的命令执行脚本

 sudo ./pentest_cgi.sh 'uid=1234' `python -c "print 'uid=1234&password='+'A'*0x
600"`

用ida进行调试,在sprintf(0x00409680)处下断点,结果发现没报错,溢出没有覆盖ra,于是继续单步执行,在后面出错了

报错:提示打开文件失败了

我试着建立/var/tmp/temp.xml文件,发现异常和上次不一样了

经过多次调试,找到了跳转错误的地方,按照这个一步步逆推

最终确定造成漏洞的原因是0x0040997C处的sprintf函数将cookie写到栈上的时候出现了栈溢出漏洞

  1. 确定偏移:按照书上的方法确定偏移为973
  2. 构造rop链,直接按照书上的用就行

查找gadget报错,暂时无解决方法

Traceback (most recent call last):
  File "D:/IDA_Pro_v7.0_Portable/plugins/mipsrop.py", line 721, in activate
    mipsrop = MIPSROPFinder()
  File "D:/IDA_Pro_v7.0_Portable/plugins/mipsrop.py", line 208, in __init__
    self._initial_find()
  File "D:/IDA_Pro_v7.0_Portable/plugins/mipsrop.py", line 226, in _initial_find
    self.system_calls += self._find_system_calls(start, end)
  File "D:/IDA_Pro_v7.0_Portable/plugins/mipsrop.py", line 393, in _find_system_calls
    if ea >= start_ea and ea <= end_ea and idc.GetMnem(ea)[0] in ['j', 'b']:
IndexError: string index out of range
  1. 漏洞测试

由于路由没有开启aslr,所以用的基址+偏移的形式调用system

我用的AttifyOS搭建的环境,经过测试成功

D-Link DIR-645路由器溢出漏洞分析

在exploit-db上找到漏洞描述:https://www.exploit-db.com/exploits/33862

find命令找到了文件:squashfs-root/htdocs/web/authentication.cgi

查看:authentication.cgi: broken symbolic link to /htdocs/cgibin

大概看了一下,这道题和上一道题类似,这道题尝试自己解决;

遇到了这个错误,解决不了。。。暂时放弃这个漏洞的复现

看雪上有位师傅写的很详细:https://bbs.pediy.com/thread-259274.htm