Mipsel固件Fuzzing小记

news2025/5/18 22:30:03

Mipsel固件Fuzzing小记

0x01 准备

1.1 安装必要工具链

首先需要安装 MIPS 交叉编译工具链和相关依赖:

sudo apt-get install -y gcc-mipsel-linux-gnu g++-mipsel-linux-gnu binwalk qemu-user-static afl++

这些工具分别用于:交叉编译、固件解包、二进制程序模拟执行以及模糊测试。

1.2 编译afl-qemu-trace

然后需要在AFLPlusPlus/qemu-mode目录下,

CPU_TARGET=mipsel ./build_qemu_support.sh

进行编译afl-qemu-trace,并复制到/usr/local/bin/目录下

1.3 使用 ramdisk

由于 fuzz 比较消耗硬盘读写,所以通过下面的命令,使用内存盘减少硬盘消耗。

mkdir /mnt/ramdisk
mount -t tmpfs -o size=2048M tmpfs /mnt/ramdisk

1.4 固件提取

使用 binwalk 解包固件并确认目标 CGI 程序的架构:

binwalk -Me firmware.bin  # 解包固件
cd _firmware.bin.extracted

file squashfs-root/usr/sbin/cgibin

0x02 模拟执行

2.1 依赖检查

使用 QEMU 模拟执行 CGI 程序,检查是否能正常启动:

# 使用qemu模拟执行,查看缺失的依赖
qemu-mipsel-static -L squashfs-root squashfs-root/usr/sbin/cgibin -h

2.2 处理文件依赖与环境变量配置

如果启动失败,要想办法满足程序启动条件,如劫持函数、生成模拟文件等等。这里我需要copy一份cgibin,重命名为hedwig.cgi,因为程序以文件名为参数

[  4:02上午 ]  
$ export REQUEST_METHOD=POST
[  4:07上午 ]  
$ qemu-mipsel-static -L squashfs-root squashfs-root/htdocs/hedwig.cgi 
Error while loading htdocs/hedwig.cgi: No such file or directory
[  4:07上午 ]  
$ ln -s htdocs/cgibin htdocs/hedwig.cgi  
[  4:10上午 ]  
$ cp squashfs-root/htdocs/cgibin squashfs-root/htdocs/hedwig.cgi
[  4:11上午 ]  
$ qemu-mipsel-static -L squashfs-root squashfs-root//hedwig.cgi
HTTP/1.1 200 OK
Content-Type: text/xml

<hedwig><result>FAILED</result><message>unsupported HTTP request</message></hedwig>%   

2.3 程序入口分析

查看 CGI 程序的 main 函数源码,可以发现程序根据不同的文件名调用不同的处理函数:

int __fastcall main(int argc, const char **argv, const char **envp)
{
  const char *v3; // $s0
  // ... 代码省略 ...
  if ( !strcmp(v3, "hedwig.cgi") )
  {
    v8 = (void (__noreturn *)())&hedwigcgi_main;
    v9 = argc;
    return ((int (__fastcall *)(_DWORD, _DWORD, _DWORD))v8)(v9, argv, envp);
  }
  // ... 代码省略 ...
  printf("CGI.BIN, unknown command %s\n", v3);
  return 1;
}

这就是为什么我们需要复制或链接到 hedwig.cgi 文件名的原因。

0x03 AFL++异架构fuzzing

3.1 准备初始语料库

创建包含有效输入的初始语料库:

mkdir -p corpus

echo "<?xml version="1.0"?><postxml><module><service>DEVICE.TIME</service><device><time><ntp><server>test</server></ntp></time></device></module></postxml>" > corpus/test.txt

3.2 设置环境变量

CGI 程序依赖特定的环境变量来处理 HTTP 请求,我们设置环境变量

export REQUEST_METHOD=POST
export SCRIPT_NAME=/hedwig.cgi
export CONTENT_TYPE=text/xml
export CONTENT_LENGTH=1024

3.3 基础AFL++命令

启动 AFL++ 进行模糊测试:

export QEMU_LD_PREFIX=$(pwd)/squashfs-root
export LD_PRELOAD=$(pwd)/main_hook.so  # 如果用了hook库
export AFL_INST_LIBS=1
export AFL_NO_FORKSRV=1

afl-fuzz -Q -m none -i corpus/ -o output/ ./htdocs/hedwig.cgi @@

3.4 高级配置选项

使用字典和并行模糊测试提高效率:

# 使用字典引导Fuzz(基于HTTP协议)
afl-fuzz -Q -i corpus -o output -x /path/to/http.dict \
    -- qemu-mipsel-static squashfs-root/usr/sbin/cgibin @@

# 并行Fuzz(1个master + 多个slave)
# 终端1(master)
afl-fuzz -Q -M master -i corpus -o output -- qemu-mipsel-static squashfs-root/usr/sbin/cgibin @@
# 终端2及以后(slave)
afl-fuzz -Q -S slave1 -i- -o output -- qemu-mipsel-static squashfs-root/usr/sbin/cgibin @@

0x04 分析样本

4.1 分析崩溃样本

当发现崩溃时,首先查看崩溃样本:

ls output/crashes/

# 联合gdb调试
qemu-mipsel-static -g 1234 squashfs-root/usr/sbin/cgibin output/crashes/id:000000,sig:11,src:000000,op:flip1,pos:0

# 另开终端连接GDB
mipsel-linux-gnu-gdb squashfs-root/usr/sbin/cgibin
(gdb) target remote :1234

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2378823.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

本土DevOps革命:Gitee如何撬动中国企业的数字化转型新动能

在数字化浪潮席卷全球的背景下&#xff0c;中国企业正面临前所未有的转型压力与机遇。随着《数据安全法》和《个人信息保护法》的全面实施&#xff0c;以及信创产业政策的深入推进&#xff0c;研发工具链的自主可控已成为关乎企业核心竞争力的战略命题。在这一关键赛道上&#…

强化学习入门:马尔科夫奖励过程二

文章目录 前言1、动作2、策略总结 前言 最近想开一个关于强化学习专栏&#xff0c;因为DeepSeek-R1很火&#xff0c;但本人对于LLM连门都没入。因此&#xff0c;只是记录一些类似的读书笔记&#xff0c;内容不深&#xff0c;大多数只是一些概念的东西&#xff0c;数学公式也不会…

JVM 双亲委派机制

一、从 JDK 到 JVM&#xff1a;Java 运行环境的基石 在 Java 开发领域&#xff0c;JDK&#xff08;Java Development Kit&#xff09;是开发者的核心工具包。它不仅包含了编译 Java 代码的工具&#xff08;如 javac&#xff09;&#xff0c;还内置了 JRE&#xff08;Java Run…

uniapp -- uCharts 仪表盘刻度显示 0.9999999 这样的值问题处理。

文章目录 🍉问题🍉解决方案🍉问题 在仪表盘上,23.8变成了 23.799999999999997 🍉解决方案 formatter格式化问题 1:在 config-ucharts.js 或 config-echarts.js 配置对应的 formatter 方法 formatter: {yAxisDemo1: function (

BGP团体属性

团体属性&#xff1a; 1、用于限制BGP路由的传递范围 2、类似于IGP协议中的tag值&#xff0c;用于对BGP路由实现标记。 团体属性的分类&#xff1a; 1、公共团体属性&#xff1a; Internet&#xff1a;默认所有路由都有该属性&#xff0c;具有该属性BGP路由发送给所有的BGP邻居…

Redis——三大策略

过期删除策略 Redis可以对key设置过期时间&#xff0c;因此需要有相应的机制将已过期的键值对删除 设置了过期时间的key会存放在过期字典中&#xff0c;可以用presist命令取消key过期时间 过期字典存储在redisDb结构中&#xff1a; typedef struct redisDb {dict *dict; …

Windows 操作系统使用 Tcping 命令检查目标主机端口是否开放

检查目标主机端口是否开放的方法已经很多了&#xff0c;网络上也有第三方网页版的检查工具&#xff0c;这篇文章给大家介绍一个实用小工具 Tcping 。 一、下载安装 Tcping 命令 Tcping 非 Windows 自带命令&#xff0c;我们需要下载 Tcping 可执行文件&#xff0c;然后将该文…

开源RTOS(实时操作系统):nuttx 编译

开源RTOS&#xff08;实时操作系统&#xff09;&#xff1a;nuttx 编译 手册&#xff1a;Installing — NuttX latest documentation 源码&#xff1a;GitHub - apache/nuttx: Apache NuttX is a mature, real-time embedded operating system (RTOS) Installing The fir…

python打包exe报错:处理文件时错误:Excel xlsx file; not supported

背景&#xff1a;最近用python写一个excel解析工具&#xff0c;然后打包成exe可执行文件的时候&#xff0c;遇到这样的问题 1.在我自己编译器运行是可以正常将上传后的excel进行解析&#xff0c;但是在打包成exe后&#xff0c;就无法正常解析excel 问题排查&#xff1a; 1.切换…

VUE3 -综合实践(Mock+Axios+ElementPlus)

目录 前言 目标 1.工程创建 2.Mock 2.1 配置Mock 扩 展 2.2 定义模拟数据 2.3 创建Mock服务器 3.导入ElementPlus 4.表格页面搭建 5.动态路由跳转 6.详情页面的制作 前言 基于前文 VUE3详细入门&#xff0c;我们对VUE3的基本使用有了初步的了解&#xff0c;下…

NDS3211HV单路H.264/HEVC/HD视频编码器

1产品概述 NDS3211HV单路高清编码器是一款功能强大的音/视频编码设备&#xff0c;支持2组立体声&#xff0c;同时还支持CC(CVBS)字幕。支持多种音频编码方式。该设备配备了多种音/视频输入接口&#xff1a;HD-SDI数字视频输入、HDMI高清输入&#xff08;支持CC&#xff09;、A…

LeetCode热题100--206.反转链表--简单

1. 题目 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1] 示例 2&#xff1a; 输入&#xff1a;head [1,2] 输出&#xff1a;[2,1] 示例 3&…

来一个复古的技术FTP

背景 10年前的老代码&#xff0c;需要升级springboot框架&#xff0c;在升级过程中&#xff0c;测试业务流程里&#xff0c;有FTP的下载业务&#xff0c;不管测试环境如何测试&#xff0c;都没有成功&#xff0c;最后只能自己搭建一个FTP服务器&#xff0c;写一个ftp-demo来测试…

OpenWebUI新突破,MCPO框架解锁MCP工具新玩法

大家好&#xff0c;Open WebUI 迎来重要更新&#xff0c;现已正式支持 MCP 工具服务器&#xff0c;但 MCP 工具服务器需由兼容 OpenAPI 的代理作为前端。mcpo 是一款实用代理&#xff0c;经测试&#xff0c;它能让开发者使用 MCP 服务器命令和标准 OpenAPI 服务器工具&#xff…

TRTC实时对话式AI解决方案,助力人机语音交互极致体验

近年来&#xff0c;AI热度持续攀升&#xff0c;无论是融资规模还是用户热度都大幅增长。2023 年&#xff0c;中国 AI 行业融资规模达2631亿人民币&#xff0c;较2022年上升51%&#xff1b;2024年第二季度&#xff0c;全球 AI 初创企业融资规模为 240 亿美金&#xff0c;较第一季…

Linux安全篇 --firewalld

一、Firewalld 防火墙概述 1、Firewalld 简介 firewalld 的作用是为包过滤机制提供匹配规则(或称为策略)&#xff0c;通过各种不同的规则告诉netfilter 对来自指定源、前往指定目的或具有某些协议特征的数据包采取何种处理方式为了更加方便地组织和管理防火墙,firewalld 提供…

系分论文《论系统需求分析方法及应用》

系统分析师论文范文系列 【摘要】 2022年6月&#xff0c;我作为系统分析师参与了某金融机构“智能信贷风控系统”的建设项目。该系统旨在通过对业务流程的数字化重构&#xff0c;优化信贷审批效率并降低风险。项目涉及信贷申请、资质审核、风险评估、额度审批等核心流程&#x…

LIIGO ❤️ RUST: 12 YEARS

LIIGO &#x1f496; RUST: 12 YEARS 今天是RUST语言1.0发布十周年纪念日。十年前的今天&#xff0c;2015年的今天&#xff0c;Rust 1.0 正式发行。这是值得全球Rust支持者隆重纪念的日子。我借此机会衷心感谢Rust语言创始人Graydon Hoare&#xff0c;Mozilla公司&#xff0c;…

Trivy:让你时刻掌控的开源安全扫描器

深入了解 Trivy:全面的安全扫描工具 在如今互联网快速发展的时代,软件的安全性显得尤为重要。随着应用程序的复杂性增加,其可能带来的安全漏洞也在不断增多。如何快速、准确地发现这些潜在威胁是每个开发者和运维人员心中的课题。今天,我们将为大家介绍一个开源的安全扫描…

LlamaIndex 第八篇 MilvusVectorStore

本指南演示了如何使用 LlamaIndex 和 Milvus 构建一个检索增强生成&#xff08;RAG&#xff09;系统。 RAG 系统将检索系统与生成模型相结合&#xff0c;根据给定的提示生成新的文本。该系统首先使用 Milvus 等向量相似性搜索引擎从语料库中检索相关文档&#xff0c;然后使用生…