CVE-2023-20073漏洞复现

CVE-2023-20073漏洞复现

本文主要是记录漏洞的分析利用,模拟启动等细节参考zikh师傅的文章,他写的真的很细

[[原创\]从零开始复现 CVE-2023-20073-智能设备-看雪-安全社区|安全招聘|kanxue.com](https://bbs.kanxue.com/thread-278240.htm#msg_header_h1_4)

启动服务

首先使用binwalk解压一下固件,建议使用ubuntu20.04,因为如果使用18.04会出现一些软连接报错的问题,当然也是有办法解决的就是修改binwalk/build/lib/binwalk/modules/extractor.py文件的一些东西如下:

image-20230525165623998

当然还会出现一些依赖没有安装的问题

sudo apt install liblzo2-dev  #安装解压ubi文件的工具
sudo pip3 install python-lzo
sudo pip3 install ubi_reader

sudo apt-get update  #出现下面报错
sudo apt-get install lzop

image-20230731161755491

下载arm架构的qemu,密码和用户都是root 下载固件

qemu环境
wget https://people.debian.org/~aurel32/qemu/armhf/debian_wheezy_armhf_standard.qcow2

wget https://people.debian.org/~aurel32/qemu/armhf/vmlinuz-3.2.0-4-vexpress

wget https://people.debian.org/~aurel32/qemu/armhf/initrd.img-3.2.0-4-vexpress


固件下载
https://software.cisco.com/download/home/286287791/type/282465789/release/1.0.03.29

qemu启动脚本

sudo qemu-system-arm -M vexpress-a9 -kernel vmlinuz-3.2.0-4-vexpress -initrd initrd.img-3.2.0-4-vexpress -drive if=sd,file=debian_wheezy_armhf_standard.qcow2 -append "root=/dev/mmcblk0p2" -net nic -net tap,ifname=tap0,script=no,downscript=no -nographic -smp 4

qemu和宿主机的通信,三个脚本直接跑就行了但要注意网卡名字是否一致

#!/bin/sh
#sudo ifconfig eth0 down                 # 首先关闭宿主机网卡接口
sudo brctl addbr br0                     # 添加一座名为 br0 的网桥
sudo brctl addif br0 ens33                # 在 br0 中添加一个接口
sudo brctl stp br0 off                   # 如果只有一个网桥,则关闭生成树协议
sudo brctl setfd br0 1                   # 设置 br0 的转发延迟
sudo brctl sethello br0 1                # 设置 br0 的 hello 时间
sudo ifconfig br0 0.0.0.0 promisc up     # 启用 br0 接口
sudo ifconfig ens33 0.0.0.0 promisc up    # 启用网卡接口
sudo dhclient br0                        # 从 dhcp 服务器获得 br0 的 IP 地址
sudo brctl show br0                      # 查看虚拟网桥列表
sudo brctl showstp br0                   # 查看 br0 的各接口信息

#!/bin/sh
sudo tunctl -t tap0 -u root              # 创建一个 tap0 接口,只允许 root 用户访问
sudo brctl addif br0 tap0                # 在虚拟网桥中增加一个 tap0 接口
sudo ifconfig tap0 0.0.0.0 promisc up    # 启用 tap0 接口
sudo brctl showstp br0

#!/bin/sh
#sudo ifconfig eth0 down                 # 首先关闭宿主机网卡接口
sudo brctl addbr br0                     # 添加一座名为 br0 的网桥
sudo brctl addif br0 ens33                # 在 br0 中添加一个接口
sudo brctl stp br0 off                   # 如果只有一个网桥,则关闭生成树协议
sudo brctl setfd br0 1                   # 设置 br0 的转发延迟
sudo brctl sethello br0 1                # 设置 br0 的 hello 时间
sudo ifconfig br0 0.0.0.0 promisc up     # 启用 br0 接口
sudo ifconfig ens33 0.0.0.0 promisc up    # 启用网卡接口
sudo dhclient br0                        # 从 dhcp 服务器获得 br0 的 IP 地址
sudo brctl show br0                      # 查看虚拟网桥列表
sudo brctl showstp br0                   # 查看 br0 的各接口信息
sudo tunctl -t tap0 -u root              # 创建一个 tap0 接口,只允许 root 用户访问
sudo brctl addif br0 tap0                # 在虚拟网桥中增加一个 tap0 接口
sudo ifconfig tap0 0.0.0.0 promisc up    # 启用 tap0 接口
sudo brctl showstp br0

然后就是将rootfs文件夹压缩使用scp穿进入,注意必须是压缩后的,如果不压缩会出现软链接的错误

chmod -R 777 rootfs  
cd rootfs/
mount --bind /proc proc
mount --bind /dev dev
chroot . /bin/sh


/etc/init.d/boot boot
generate_default_cert
/etc/init.d/confd start
/etc/init.d/nginx start

漏洞成因分析

/etc/nginx/conf.d/rest.url.conf文件中存在一个未授权的文件上传,仅仅只是检查$http_authorization 字段是否为空,然后就会把文件上传道/tmp/upload中,这个漏洞也仅仅只是前提,具体怎么操作还要分析一下二进制文件

第一次复现RCE的漏洞(上一个还是DIR-815,两者区别有点大,这个web的知识更多)就记录一下一些字段的含义

$http_authorization: 就是https头中用于检查身份认证的例如:

GET /secure-page HTTP/1.1
Host: example.com
Authorization: Basic dXNlcjEyMzpwYXNzd29yZDQ1Ng==
// dXNlcjEyMzpwYXNzd29yZDQ1Ng== 是 "user123:password456" 的 Base64 编码结果。

upload_pass:这个指令用于指定文件上传请求的处理地址,起到了将文件上传请求传递给后端服务器的作,后面跟的是后端处理路径

upload_store:这个指令用于指定上传文件的临时存储目录

upload_store_access:用于设置上传的文件的访问权限,

upload_set_form_field $upload_field_name:用于设置上传文件的表单字段,比如文件名、文件类型、文件路径

upload_aggregate_form_field:用于聚合上传文件的表单字段,语法如下

upload_aggregate_form_field "$upload_field_name.attribute" "$value";

其中,$upload_field_name 是一个变量,表示上传文件的表单字段名。attribute 是要设置的字段属性,可以是自定义的属性名。$value 是要设置的属性值。

image-20230805104333122

接下来我们就看看/form-file-upload中干了什么.路径是/etc/nginx/conf.d/web.upload.conf

主要是看uwsgi_pass 127.0.0.1:9003;查看后端服务的进程

image-20230805111413075

  • include uwsgi_params;:包含 uwsgi_params 文件,这个文件包含了一些与 uWSGI 通信相关的参数和设置。

  • proxy_buffering off;:禁用代理缓冲,即不在 Nginx 中缓冲响应数据。

  • uwsgi_modifier1 9;:这个指令是 uWSGI 模块的一个设置,用于设置 uWSGI 与 Nginx 之间的通信方式。这里的 9 是一个标志,表示以 "uwsgi" 方式通信。

  • uwsgi_pass 127.0.0.1:9003;:将请求代理到后端的 uWSGI 服务器,该服务器位于本地主机(127.0.0.1)的端口 9003。

  • uwsgi_read_timeout 3600;:设置从 uWSGI 后端读取响应的超时时间为 3600 秒。如果超过这个时间没有接收到响应,Nginx 将会关闭连接。

  • uwsgi_send_timeout 3600;:设置向 uWSGI 后端发送请求的超时时间为 3600 秒。如果超过这个时间没有发送完请求,Nginx 将会关闭连接。·

    uWSGI就是充当了 Web 服务器和应用程序之间的桥梁

看一下uWSGI启动脚本(也就是uwsgi-launcher)看看调用了哪些进程,主要看/etc/uwsgi/upload.ini

image-20230901102810662

进入/etc/uwsgi/upload.ini

发现最终是调用/www/cgi-bin/upload.cgi这个程序,下面就开始分析二进制程序了

image-20230805120459129

分析二进制程序

主要注意我所圈住的

image-20230901160640297

从漏洞处开始分析,也就是sub_115EC函数

发现可以执行'mv -f a2 v8//a3'这个命令 其中a2 a3使我们可以控制的2,v8也是我们可以挑选的,发现v8可以是/tmp/www/那就是看看这个目录下有没有什么比较特殊的,发现www下的index.htmllogin.html都是软连接在tmp/www/下。

那我们就可以执行'mv -f /tmp/upload/0000000006 /tmp/www//login.html'来进行一个xss攻击

image-20230901161001144

image-20230901161956392

其实吧这个程序是有身份权限认证的,只不过是在漏洞后面sub_125A8

在这里对Authorization的值进行了匹配,只不过为时已晚

image-20230901163137948

然后简单说一下需要绕过的的检查

  • pathparam字段是Portal为了让v8是/tmp/www/

  • fileparam字段是 login.html为了让a3是login.html

  • Authorization不为空

攻击效果

image-20230901164051585

攻击脚本

image-20230901164201917

------hacked-by-trunk------
Content-Disposition: form-data; name="pathparam"

Portal
------hacked-by-trunk------
Content-Disposition: form-data; name="fileparam"

login.html
------hacked-by-trunk------
Content-Disposition: form-data; name="file"; filename="login.html"
Content-Type: application/octet-stream

<title>Hacked by trunk!</title>
<script>alert('Hacked by trunk!')</script>
------hacked-by-trunk------

参考

[原创]从零开始复现 CVE-2023-20073-智能设备-看雪-安全社区|安全招聘|kanxue.com

https://www.yuque.com/cyberangel/rg9gdm/zz75e4#scjc2

https://www.ctfiot.com/1159.html

https://www.iotsec-zone.com/article?id=383#CVE-2023-20073

posted @ 2023-09-01 16:51  何思泊河  阅读(403)  评论(0编辑  收藏  举报