type
status
date
slug
summary
tags
category
icon
password

ioT

关于使用 FirmAE模拟固件
FirmAE的工作模式分为5种:-c检查是否能模拟、-a漏洞分析、-r固件模拟的运行、-d用户级的调试、-b内核级的调试。
其中,<firmware>是固件路径,<brand>是固件的牌子,这个可以随意写。
可以通过binwallk检测固件
解包
在bin文件夹中找到busybox文件检测固件类型
搜索字符串
进一步检某个文件。
寻找某个文件位置
在iot固件中,/etc/inittabinit 进程的配置文件init 是 Linux 系统启动后运行的第一个用户空间进程(PID 为 1),它根据 inittab 中的内容来决定系统初始化的流程。
在 IoT 固件中,常用的是简化版的 init,比如 BusyBox 提供的 init,它也依赖这个文件来运行关键服务。
这里在一定程序上可以通过看这个文件里的内容从而查看固件启动的最开始启动的文件和服务。
如果你看见 httpd_get_parm(a1, "xxx"),就说明你必须使用 GET 参数进行数据传输
  • 因为这个函数是专门从 URL 中的 查询字符串 里提取 key-value 参数的。
  • 所以你一定要写成:
    • 如果你不加 ?,那服务器就不知道你要传参数。完整请求格式是固定的:
    • 其中的&用于多个变量与参数的传递间隔
    qemu模拟,直接再文件夹里启动
    登录名和密码:root/root
    要启动固件
    进入固件内部之后
    1. tar 打包文件夹
    再misp-quem虚拟机里执行
    将文件系统打包并通过 scp 命令上传到 QEMU 虚拟机:
    报错换这个
    解压用这个
    远程调试
    qemu虚拟机
    宿主机
    在连接上之后要用c到断点出。
    宿主机开启一个监听
    gdb链接调试
    mips 程序启动
    本地 shell 启动一个命令(所以 shell=True)
    用 QEMU 的 user-mode 模拟(qemu-mipsel-static)运行目标的 CGI 可执行文件,并把 CGI 环境变量(像真实 web 服务器那样)传给它
    qemu-mipsel-staticQEMU 的 user-mode 模拟器
    L ./指定 QEMU 使用的“根”库目录(sysroot),即把当前目录 ./ 作为被模拟程序查找共享库和动态链接器的位置。通常你会把 MIPS 的 libc 等放在此目录,确保动态链接器能找到库。
    • 0 "hedwig.cgi"
      • 0(数字零)是 qemu-user 的一个选项,用来 设置被模拟进程的 argv0(即程序名)。
    • CGI 程序会根据 argv0 不同行为不同,或者日志/解析时依赖程序名)。
    • E NAME="value"
      • E 选项用来在 qemu 模拟的进程环境中设置环境变量。这里设置了一系列 CGI 常见的环境变量:
      • REQUEST_METHOD="POST":告诉 CGI 这是一个 POST 请求。
      • CONTENT_LENGTH=11:正文长度是 11(正好等于 b"winmt=pwner" 的长度)。
      • CONTENT_TYPE="application/x-www-form-urlencoded":POST 的内容类型。
      • HTTP_COOKIE="...":把我们构造的 payload 放进 HTTP_COOKIE 环境变量(CGI 程序通常通过环境变量 HTTP_COOKIE 得到客户端 Cookie)。
      • REQUEST_URI="2333":请求 URI(有时 CGI 逻辑会用到)。
        • 注意:脚本里对 HTTP_COOKIE 做了转义 \\",是为了把包含二进制 / 空字节的 payload 能正确传给 shell 命令行(否则会被分割/解释)。(实际使用中要小心 shell 转义)
    • g 1234
      • 让 qemu 启动一个 gdbstub(gdbserver-like),监听 1234 端口,便于连接 gdb 做动态调试。很常见在 exploit 调试时使用。
    • ./htdocs/cgibin
      • 这是要被 qemu 执行的目标二进制(通常是一个 CGI 运行时启动脚本或可执行 CGI 程序)。在 qemu-user 模式下,这个文件必须是 MIPS 架构的 ELF,可用 -L 找到相应的 libc 等。
    启动程序
    arm gdb远程调试
    在qume中执行
    在宿主机中执行
     
    因为我们通过 patch 让进程陷入了死循环,所以要用 set 命令给改回正常的指令,查看之前备份的 upload.cgi 文件,发现这里原本机器码为 AA FF FF EB ,因此执行
    命令(因为小端序,这里是反着输入的)
     
    CVE-2023-34644复现(下)CVE-2023-20073复现
    Loading...