mirror of
https://github.com/Mr-xn/Penetration_Testing_POC.git
synced 2026-10-24 17:04:31 +00:00
227 lines
9.4 KiB
Markdown
227 lines
9.4 KiB
Markdown
# TP-Link IP43AN仿真及漏洞测试
|
|||
|
|
> 天问实验室
|
||
|
|
> 来源:https://www.iotsec-zone.com/article/39
|
||
|
|
|
||
|
|
## 前言
|
||
|
|
|
||
|
|
偶然看到了这篇文章,想复现这个漏洞,作者用的是真实设备进行研究,想试试用qemu进行仿真来复现这个漏洞,本篇文章主要是通过qemu-system仿真TP-Link IP43N实现动态调试uhttpd并测试栈溢出漏洞,由于参考文章已经详细介绍了漏洞原理,本篇只讲固件仿真和漏洞测试分析,想了解漏洞细节的话可以看看漏洞参考文章。
|
||
|
|
|
||
|
|
## 固件仿真
|
||
|
|
|
||
|
|
用binwalk解开固件,查看文件是32bit ARM架构的,查看文件保护发现开了NX
|
||
|
|
|
||
|
|

|
||
|
|
|
||
|
|
将squashfs-root和gdbserver上传到虚拟机中
|
||
|
|
|
||
|
|
```
|
||
|
|
$ chroot squashfs-root sh
|
||
|
|
```
|
||
|
|
|
||
|
|

|
||
|
|

|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
查看httpd文件用的是uhttpd,存在openwrt_release等文件知道用的是openwrt系统,根据漏洞描述知道dsd是存在漏洞的,直接用dsd启动即可,然后在用命令启动uhttpd
|
||
|
|
|
||
|
|
```
|
||
|
|
# dsd
|
||
|
|
# uhttpd -p 80 -h /www/ -f
|
||
|
|
```
|
||
|
|
|
||
|
|

|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
发现程序卡住了,无任何字符串显示,也没有错误信息,端口也没有opend将uhttpd拖入IDA当中进行分析,发现少了jffs2_ready文件
|
||
|
|
|
||
|
|

|
||
|
|
|
||
|
|
只要没有这个文件就一直陷入循环当中,创建一个jffs2_ready文件
|
||
|
|
|
||
|
|
```
|
||
|
|
# touch /tmp/jffs2_ready
|
||
|
|
```
|
||
|
|
|
||
|
|
再次尝试启动,发现端口已经开启,可直接访问
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|

|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
但测试用户名和密码发现只能用admin进行登陆
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|

|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
但用admin用户进行登录时提示没有admin这个用户
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|

|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
查看登陆逻辑,验证username是否是admin,如果是则验证是否用户名在uci配置文件当中
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|

|
||
|
|
|
||
|
|

|
||
|
|
|
||
|
|
这时候要对配置文件进行构造,根据网上查到的消息uci配置文件的用法,然后在/etc/config下创建一个user_management文件,然后写上username和password,就可以实现登录了,
|
||
|
|
|
||
|
|

|
||
|
|
|
||
|
|
登陆的目的只是获取一个token,但登陆之后发现系统sessions(/tmp/luci-sessions)没有token
|
||
|
|
需要手动添加token(token值随意),就可以进入dsd了
|
||
|
|
|
||
|
|

|
||
|
|
|
||
|
|
##漏洞测试分析
|
||
|
|
我们知道这是个栈溢出函数,那需要查看的是这个漏洞能带给我们怎样的效果,如何劫持
|
||
|
|
我们可以看到最后溢出变量是在v17这里,刚好是最底部的变量位置,我们能够控v17+0x10的地址
|
||
|
|

|
||
|
|
|
||
|
|

|
||
|
|
|
||
|
|
在返回地址处点下断点,运行exp
|
||
|
|
|
||
|
|

|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|

|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
可以看到我们能控制r4-r10以及pc寄存器,但由于有nx保护,导致无法返回到栈上执行shellcode,只能达到拒绝服务的效果
|
||
|
|
##总结
|
||
|
|
文章主要涉及的点还是如何仿真httpd和dsd进行调试和测试,其实这个仿真花了我挺长时间的,遇到一些坑如何通过逆向解决,还有一些特有的函数(uci)如何去构造配置文件都是一些可以学习的点。就目前来说路由器漏洞主要还是在web中,只要web启动起来再仔细地逆向一下说不定就会有很多漏洞,同时通过仿真模拟的话就可以自己构造一些Fuzz来进行测试和优化。
|
||
|
|
由于目前主要研究车联网漏洞,在物联网研究的时间比较少, 最近想尝试模拟仿真TBox,所以找了几个项目练练手,才做了这个分享,希望能给大家带来一点收获,如果有问题或建议欢迎留言。
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
漏洞参考:[漏洞参考]( [https://wzt.ac.cn/2020/05/23/IPC43AN/](https://wzt.ac.cn/2020/05/23/IPC43AN/)
|
||
|
|
)
|
||
|
|
固件下载地址:[固件下载地址](https://service.tp-link.com.cn/detail_download_7631.html)## 前言
|
||
|
|
|
||
|
|
偶然看到了这篇文章,想复现这个漏洞,作者用的是真实设备进行研究,想试试用qemu进行仿真来复现这个漏洞,本篇文章主要是通过qemu-system仿真TP-Link IP43N实现动态调试uhttpd并测试栈溢出漏洞,由于参考文章已经详细介绍了漏洞原理,本篇只讲固件仿真和漏洞测试分析,想了解漏洞细节的话可以看看漏洞参考文章。
|
||
|
|
|
||
|
|
## 固件仿真
|
||
|
|
|
||
|
|
用binwalk解开固件,查看文件是32bit ARM架构的,查看文件保护发现开了NX
|
||
|
|
|
||
|
|

|
||
|
|
|
||
|
|
将squashfs-root和gdbserver上传到虚拟机中
|
||
|
|
|
||
|
|
```
|
||
|
|
$ chroot squashfs-root sh
|
||
|
|
```
|
||
|
|
|
||
|
|

|
||
|
|

|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
查看httpd文件用的是uhttpd,存在openwrt_release等文件知道用的是openwrt系统,根据漏洞描述知道dsd是存在漏洞的,直接用dsd启动即可,然后在用命令启动uhttpd
|
||
|
|
|
||
|
|
```
|
||
|
|
# dsd
|
||
|
|
# uhttpd -p 80 -h /www/ -f
|
||
|
|
```
|
||
|
|
|
||
|
|

|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
发现程序卡住了,无任何字符串显示,也没有错误信息,端口也没有opend将uhttpd拖入IDA当中进行分析,发现少了jffs2_ready文件
|
||
|
|
|
||
|
|

|
||
|
|
|
||
|
|
只要没有这个文件就一直陷入循环当中,创建一个jffs2_ready文件
|
||
|
|
|
||
|
|
```
|
||
|
|
# touch /tmp/jffs2_ready
|
||
|
|
```
|
||
|
|
|
||
|
|
再次尝试启动,发现端口已经开启,可直接访问
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|

|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
但测试用户名和密码发现只能用admin进行登陆
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|

|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
但用admin用户进行登录时提示没有admin这个用户
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|

|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
查看登陆逻辑,验证username是否是admin,如果是则验证是否用户名在uci配置文件当中
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|

|
||
|
|
|
||
|
|

|
||
|
|
|
||
|
|
这时候要对配置文件进行构造,根据网上查到的消息uci配置文件的用法,然后在/etc/config下创建一个user_management文件,然后写上username和password,就可以实现登录了,
|
||
|
|
|
||
|
|

|
||
|
|
|
||
|
|
登陆的目的只是获取一个token,但登陆之后发现系统sessions(/tmp/luci-sessions)没有token
|
||
|
|
需要手动添加token(token值随意),就可以进入dsd了
|
||
|
|
|
||
|
|

|
||
|
|
|
||
|
|
##漏洞测试分析
|
||
|
|
我们知道这是个栈溢出函数,那需要查看的是这个漏洞能带给我们怎样的效果,如何劫持
|
||
|
|
我们可以看到最后溢出变量是在v17这里,刚好是最底部的变量位置,我们能够控v17+0x10的地址
|
||
|
|

|
||
|
|
|
||
|
|

|
||
|
|
|
||
|
|
在返回地址处点下断点,运行exp
|
||
|
|
|
||
|
|

|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|

|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
可以看到我们能控制r4-r10以及pc寄存器,但由于有nx保护,导致无法返回到栈上执行shellcode,只能达到拒绝服务的效果
|
||
|
|
##总结
|
||
|
|
文章主要涉及的点还是如何仿真httpd和dsd进行调试和测试,其实这个仿真花了我挺长时间的,遇到一些坑如何通过逆向解决,还有一些特有的函数(uci)如何去构造配置文件都是一些可以学习的点。就目前来说路由器漏洞主要还是在web中,只要web启动起来再仔细地逆向一下说不定就会有很多漏洞,同时通过仿真模拟的话就可以自己构造一些Fuzz来进行测试和优化。
|
||
|
|
由于目前主要研究车联网漏洞,在物联网研究的时间比较少, 最近想尝试模拟仿真TBox,所以找了几个项目练练手,才做了这个分享,希望能给大家带来一点收获,如果有问题或建议欢迎留言。
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
漏洞参考:[漏洞参考]( [https://wzt.ac.cn/2020/05/23/IPC43AN/](https://wzt.ac.cn/2020/05/23/IPC43AN/)
|
||
|
|
)
|
||
|
|
固件下载地址:[固件下载地址](https://service.tp-link.com.cn/detail_download_7631.html)
|