文章总结: 本文基于授权红队实战演练,详细展示了从SSRF绕过(利用十进制IP进制欺骗)到内网信息泄露,再到利用WebSocket无认证漏洞获取低权限Shell,最终通过PackageKit的TOCTOU竞争条件漏洞(CVE-2026-41651)实现本地提权至Root的完整攻击链。核心启示是逻辑漏洞的降维打击,强调不能仅依赖字符串黑名单,需正确解析IP并防范权限检查的时间差。 综合评分: 90 文章分类: 渗透测试,红队,漏洞分析,应急响应,WEB安全
hackthebox-Queue
网安之家-CyberHomestead
2026年8月4日 19:18 上海
在小说阅读器读本章
去阅读
温馨提示: 本文基于授权环境下的红队实战演练。为遵守网络安全社区规范,文中所有 IP、Hash、Flag、密码均已进行脱敏处理。本文重在思路剖析与防御启示,谢绝任何形式的”抄作业”行为。
🔥 序章:最坚固的堡垒,往往从内部崩塌
各位安全圈的看官,今天吃个硬瓜。
假设有这么一台服务器:SSH 密码是随机生成的,字典爆破完全无效;系统加固得像铁桶,没有任何多余的 SUID 二进制,定时任务干干净净。
看起来无懈可击对吧?
但最终,它被拿下了。没靠运气,没靠蛮力。靠的是**”欺骗时间”和“进制戏法”**。
今天,我把这场降维打击的思维链路扒开给你看。内行看门道,外行看热闹。
第一幕:禁区里的”外卖员”(SSRF 绕过)
红队第一步,永远是侦察。
扫描端口,发现目标跑着一个 Web 服务,里面藏着一个有意思的功能:URL 合法性校验接口(/api/v1/validate)。
这个接口的逻辑很简单:用户提交一个网址,服务器替你去访问一下,看看能不能通。 为了防止内网滥用,开发者写了段代码:
if hostname in ["localhost", "127.0.0.1", "::1"]: return "禁止访问内网"
很多年前,这招管用。但在今天,这叫”纸糊的门”。
🔴 红队知识点:进制欺骗 程序员用字符串比对来拦
127.0.0.1。但网络底层解析 IP 时,支持多种格式。 把127.0.0.1转换成十进制整数2130706433(或者八进制0177.0.0.1),底层网络库会自动还原。 但你的黑名单代码看到的只是数字2130706433!
实战复现命令(已脱敏):
# 利用十进制 IP 绕过字符串黑名单,让服务器替我们访问它的内网
curl -sk -X POST "https://target.htb/api/v1/validate" \
-H "Content-Type: application/json" \
-d '{"url":"http://2130706433:5000/"}'
结果: 绕过成功。服务器乖乖把内网 5000 端口的响应返回给了我们。
第二幕:瞒天过海,扒出隐藏的”自首信”
既然能骗服务器替我们访问内网,那能不能用它来当跳板,把整个内网摸一遍?
能。这就是经典的 SSRF(服务器端请求伪造)。
我们用这个接口把内网扫了一圈,结果在目标的 /status 端点,挖到了一份**”自首信”**——系统的架构配置图。
{
"service": "cohort-edge",
"upstreams": [
{"name": "marketing", "host": "target.htb", "root": "/var/www/target"},
{"name": "insights-api", "path": "/api/", "target": "127.0.0.1:5000"},
{"name": "notebooks", "host": "nb-1be3782a8afd3ad5.target.htb", "target": "127.0.0.1:8888",
"note": "internal analyst workspace, not for external use"}
]
}
注意最后一条:“internal analyst workspace, not for external use”(内部分析师工作区,严禁外用)。
这句话,直接把隐藏的子域名 nb-1be3782a8afd3ad5.target.htb 给暴露了。
🛡️ 防御启示录: 永远不要相信用户的输入。校验 IP,必须先用
socket.getaddrinfo()解析成真实的 IP 格式,再比对私网网段(10.x, 172.16.x, 192.168.x),绝不能只做字符串匹配。
第三幕:无认证的终端(WebSocket RCE)
顺着那个泄露的子域名,我们直接访问到了那个”严禁外用”的内部服务。 原来它是一个叫 marimo 的 Python 反应式笔记本,跑在 8888 端口。
这个笔记本带有一个终端功能。正常情况下,你得输入密码才能用。
但是,开发者在写 WebSocket 端点(/terminal/ws)的时候,漏写了鉴权校验函数。
也就是说,只要你连上这个 WebSocket,连密码都不用输,系统直接给你分配一个真实的 Linux 交互终端。
# 伪造 WebSocket 握手,骗过服务器
curl -ski -o /dev/null -w '%{http_code}\n' \
-H 'Connection: Upgrade' \
-H 'Upgrade: websocket' \
-H 'Sec-WebSocket-Version: 13' \
-H 'Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==' \
https://nb-xxx.target.htb/terminal/ws
# 返回 101 = 握手成功,没有任何认证拦截!
利用这个漏洞,我们通过一段 Python 脚本,让服务器主动把一个反弹 Shell 送到我们的监听器上。
拿到 Shell 后,第一件事当然是拿下第一个证明:cat /home/marimo/user.txt(内容已脱敏)。
第四幕:欺骗时间的人(TOCTOU 竞争条件提权)
拿到普通用户权限后,才是真正的考验开始。
这台机器的系统加固做得极好:
- •
sudo -l需要密码。 - • 没有异常的 SUID 二进制。
- •
/etc/passwd不可写。 - • 所有关键配置文件全都是
root:root 755。 - • 连 Python 的各种劫持路径(sitecustomize、.pth)全部锁死。
难道要靠内核漏洞?不,有个更优雅的”逻辑降维打击”。
这就要提到 Linux 系统里一个默默无闻的守护进程:PackageKit(packagekitd)。几乎所有主流 Linux 都自带它,负责跨发行版的包管理,以 root 权限运行。
它最近爆出了一个惊天大洞:CVE-2026-41651(TOCTOU 竞争条件本地提权)。
💡 吃瓜群众秒懂版: TOCTOU(Time of Check to Time of Use)。 就像你去银行取钱。你先递一张单子说”我查查余额”,柜员把保险柜打开了。下一秒你立马说”取一千万”。因为柜员的大脑还在刚才”已打开保险柜”的状态里没反应过来,直接把钱给你了!
在代码里也是一样:检查权限的时候是一个状态,使用的时候因为时间差,变成了另一个状态。
漏洞原理剖析:
PackageKit 在处理 D-Bus 发来的 InstallFiles 请求时:
- 1. 攻击者瞬间发送两条异步请求。
- 2. 第一条带
SIMULATE(模拟)标志,系统一看是模拟,不需要认证,状态置为”准备就绪”。 - 3. 第二条不带标志(真实安装恶意包),覆盖了第一条的参数,但此时系统状态转换出 Bug,停在了”准备就绪”。
- 4. 结果: 系统直接跳过了密码认证,以 root 权限执行了恶意包的安装!
在不到 1.2 秒的时间里,我们让系统亲手交出了 Root 权限:
# 运行 PoC(利用竞争条件,让系统以 root 安装带 SUID bash 的恶意 deb 包)
./cve-2026-41651
# [+] SUCCESS — SUID bash at t+1200ms
# 拿取终极权限
/tmp/.suid_bash -p
cat /root/root.txt (内容已脱敏)
📊 渗透测试网络拓扑图(脱敏)
(以下为公众号适配的 ASCII 拓扑图,展示完整的攻击链路)
┌─────────────────────────────────────────────────────────────────┐
│ 🏹 攻击者 (Kali Linux) │
│ IP: 10.10.x.x (已脱敏) │
└──────────┬──────────────────────────────────┬───────────────────┘
│ 1. HTTPS 侦察 │ 5. WebSocket 直连
▼ ▼
┌─────────────────────────┐ ┌─────────────────────────┐
│ 🛡️ NGINX 反向代理 │ │ 🛡️ NGINX 反向代理 │
│ (443/80) │ │ (443/80) │
└──────────┬──────────────┘ └──────────┬──────────────┘
│ │
│ 2. 十进制 IP 绕过 SSRF │ 6. 代理 WS 流量
▼ ▼
┌─────────────────────────┐ ┌─────────────────────────┐
│ ⚙️ Insights API │ │ 📓 Marimo Notebook │
│ (127.0.0.1:5000) │ │ (127.0.0.1:8888) │
│ │ │ CVE-2026-39987 (无认证) │
│ 3. 泄露内网架构图 │ │ 7. 获取低权限 Shell │
└─────────────────────────┘ └──────────┬──────────────┘
└────────────────────────────────────┘
│ 8. 发送 TOCTOU 竞争包
▼
┌─────────────────────────┐
│ ☠️ PackageKit 守护进程 │
│ (Root 权限运行) │
│ CVE-2026-41651 (TOCTOU) │
│ │
│ 9. 赐予 Root Shell │
└─────────────────────────┘
结语:降维打击的艺术
这次红队实战,没有一次暴力爆破。从头到尾,全是”逻辑的降维打击”:
- 1. 绕过黑名单: 用进制转换欺骗前端校验。
- 2. 信息收集: 用 SSRF 挖出隐藏资产。
- 3. 权限提升: 用 TOCTOU 漏洞欺骗系统时间线,让 Root 权限”自动”掉落。
🔥 核心启示: 永远不要相信任何默认的”信任边界”。检查权限不仅要看”是什么”,还要防住”时间差”。
互动时间:
如果你是那个写黑名单的开发者,你会怎么修补那个 127.0.0.1 的漏洞?欢迎在评论区留下你的绝妙思路!
(点赞最高的留言,博主有神秘网安资料包相送哦~🎁)
⚠️ 免责声明与合规说明
本文所有内容均在授权的靶场环境下进行。为维护网络安全社区生态,文章涉及的所有 IP、Hash 值、Flag 内容及敏感配置均已脱敏处理。请勿尝试将文中技术用于未经授权的真实系统。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:网安之家-CyberHomestead 《hackthebox-Queue》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论