西湖论剑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 漏洞分析流程

  1. 跨站请求检查

    • 检查HTTP_REFERER字段不为空
    • 函数返回值为0时通过检查
  2. POST请求长度限制

    • 长度不能超过0x1f3(499字节)
  3. 页面属性获取

    • 从POST报文中获取page属性值
    • 进行匹配检查
  4. 漏洞点

    • 位于Goto_chidx函数中
    • 再次匹配获取wlanUrl的值
    • 使用sprintf函数将值放入栈中
    • 栈空间仅0x80字节,而v6值用户可控
    • 导致未授权访问和栈溢出漏洞

3. 漏洞利用技术

3.1 利用难点

  • 跨站请求检查难以绕过(环境变量设置无效)
  • 直接启动环境发送报文是可行方案

3.2 ROP链构造问题

  • 尝试使用libc中的gadget遇到问题:
    • 使用system函数时,gp寄存器变为不可写地址
    • 修改为可写地址后,gp又变为0

3.3 替代方案

  • 使用libwebutil中的system函数获取shell
  • 需要伪造gp寄存器值
  • 构造合理偏移跳转到do_system

4. 调试方法

4.1 调试技巧

  • 无限跳转法:用于卡住一闪而过的调用进程
  • 远程连接命令
    gdb-multiarch -q login.cgi
    target remote :1234
    

5. 关键知识点总结

  1. 漏洞类型

    • 栈溢出漏洞
    • 未授权访问漏洞
  2. 绕过技术

    • 跨站请求检查绕过
    • 长度限制规避
  3. ROP利用技巧

    • 当libc gadget不可用时,考虑其他so文件中的关键函数
    • 寄存器控制(特别是gp寄存器)的重要性
  4. 调试技巧

    • 处理短暂进程的方法
    • 远程调试技术

6. 漏洞利用流程总结

  1. 构造满足条件的POST请求:

    • 包含有效的HTTP_REFERER
    • 长度不超过499字节
    • 包含可控的wlanUrl参数
  2. 利用栈溢出覆盖返回地址:

    • 精心构造payload
    • 考虑栈对齐和寄存器状态
  3. 跳转到libwebutil中的do_system

    • 伪造必要的寄存器值
    • 确保执行流正确转移
  4. 获取shell:

    • 通过system函数执行命令
    • 建立反向连接或直接获取交互式shell

7. 学习要点

  1. IoT安全特点

    • 常使用轻量级web服务器(如lighttpd)
    • CGI程序是常见攻击面
    • 资源受限环境下的漏洞利用
  2. MIPS架构利用

    • gp寄存器的特殊作用
    • 调用约定与x86的区别
    • 分支延迟槽的影响
  3. 防御绕过技术

    • 各种安全检查的绕过方法
    • 环境限制下的利用技巧
  4. 调试与分析工具

    • GDB多架构调试
    • 静态分析工具的使用
    • 动态调试技巧

通过深入理解这个题目的分析和利用过程,可以掌握IoT设备中常见的web接口漏洞挖掘和利用技术,特别是MIPS架构下的ROP构造和寄存器控制技巧。

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 属性值 进行匹配检查 漏洞点 : 位于 Goto_chidx 函数中 再次匹配获取 wlanUrl 的值 使用 sprintf 函数将值放入栈中 栈空间仅0x80字节,而 v6 值用户可控 导致未授权访问和栈溢出漏洞 3. 漏洞利用技术 3.1 利用难点 跨站请求检查难以绕过(环境变量设置无效) 直接启动环境发送报文是可行方案 3.2 ROP链构造问题 尝试使用libc中的gadget遇到问题: 使用system函数时, gp 寄存器变为不可写地址 修改为可写地址后, gp 又变为0 3.3 替代方案 使用 libwebutil 中的system函数获取shell 需要伪造 gp 寄存器值 构造合理偏移跳转到 do_system 4. 调试方法 4.1 调试技巧 无限跳转法 :用于卡住一闪而过的调用进程 远程连接命令 : 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构造和寄存器控制技巧。