西湖论剑IOT-inkon
字数 1282 2025-08-29 08:29:58
IoT漏洞分析与利用:西湖论剑IOT-inkon题目解析
1. 题目环境概述
- 题目类型:IoT安全挑战
- 提供内容:完整的镜像内核及启动脚本
- 网络配置:
- 虚拟机与宿主机共用IP
- 端口映射:80端口和2222端口
- 文件传输方式:可通过scp命令传输文件
2. 漏洞定位与分析
2.1 关键文件位置
漏洞位于:cpio-root/etc_ro/lighttpd/www/cgi-bin/login.cgi
2.2 漏洞分析流程
-
跨站请求检查:
- 检查
HTTP_REFERER字段不为空 - 函数返回值为0时通过检查
- 检查
-
POST请求长度限制:
- 长度不能超过0x1f3(499字节)
-
页面属性获取:
- 从POST报文中获取
page属性值 - 进行匹配检查
- 从POST报文中获取
-
漏洞点:
- 位于
Goto_chidx函数中 - 再次匹配获取
wlanUrl的值 - 使用
sprintf函数将值放入栈中 - 栈空间仅0x80字节,而
v6值用户可控 - 导致未授权访问和栈溢出漏洞
- 位于
3. 漏洞利用技术
3.1 利用难点
- 跨站请求检查难以绕过(环境变量设置无效)
- 直接启动环境发送报文是可行方案
3.2 ROP链构造问题
- 尝试使用libc中的gadget遇到问题:
- 使用system函数时,
gp寄存器变为不可写地址 - 修改为可写地址后,
gp又变为0
- 使用system函数时,
3.3 替代方案
- 使用
libwebutil中的system函数获取shell - 需要伪造
gp寄存器值 - 构造合理偏移跳转到
do_system
4. 调试方法
4.1 调试技巧
- 无限跳转法:用于卡住一闪而过的调用进程
- 远程连接命令:
gdb-multiarch -q login.cgi target remote :1234
5. 关键知识点总结
-
漏洞类型:
- 栈溢出漏洞
- 未授权访问漏洞
-
绕过技术:
- 跨站请求检查绕过
- 长度限制规避
-
ROP利用技巧:
- 当libc gadget不可用时,考虑其他so文件中的关键函数
- 寄存器控制(特别是
gp寄存器)的重要性
-
调试技巧:
- 处理短暂进程的方法
- 远程调试技术
6. 漏洞利用流程总结
-
构造满足条件的POST请求:
- 包含有效的
HTTP_REFERER - 长度不超过499字节
- 包含可控的
wlanUrl参数
- 包含有效的
-
利用栈溢出覆盖返回地址:
- 精心构造payload
- 考虑栈对齐和寄存器状态
-
跳转到
libwebutil中的do_system:- 伪造必要的寄存器值
- 确保执行流正确转移
-
获取shell:
- 通过system函数执行命令
- 建立反向连接或直接获取交互式shell
7. 学习要点
-
IoT安全特点:
- 常使用轻量级web服务器(如lighttpd)
- CGI程序是常见攻击面
- 资源受限环境下的漏洞利用
-
MIPS架构利用:
- gp寄存器的特殊作用
- 调用约定与x86的区别
- 分支延迟槽的影响
-
防御绕过技术:
- 各种安全检查的绕过方法
- 环境限制下的利用技巧
-
调试与分析工具:
- GDB多架构调试
- 静态分析工具的使用
- 动态调试技巧
通过深入理解这个题目的分析和利用过程,可以掌握IoT设备中常见的web接口漏洞挖掘和利用技术,特别是MIPS架构下的ROP构造和寄存器控制技巧。