从Apache OFBiz 17.12.01的反序列化漏洞到Docker逃逸的渗透之红队思路
目录
📖 文章概述
🛠️ 技术栈概览
技术组件
红队视角扩展
🔍 初始侦察:发现内部Web服务
技术原理
渗透步骤
核心技术解析
红队思维
🕸️ Web枚举:定位Apache OFBiz
技术原理
渗透步骤
核心技术解析
红队思维
🕳️ CVE-2020-9496:反序列化漏洞剖析
漏洞原理
技术细节
渗透步骤
红队思维
🐳 Docker逃逸:突破容器限制
技术原理
渗透步骤
核心技术解析
红队思维
🔗 攻击链串联
技术关联
协议衔接
🛠️ 红队视角:实战总结与心得
攻击链总结
红队建议
📝 结语
📖 文章概述
- 本文基于对某目标站点的渗透测试案例,深入剖析了Apache OFBiz 17.12.01中的反序列化漏洞(CVE-2020-9496),并结合前期漏洞(如LFI和RCE)与SSH端口转发技术,展示了从初始访问到Docker环境逃逸的完整红队攻击链。
- 我将探讨漏洞利用的技术原理、渗透步骤的逻辑关联以及红队视角下的实战思维,目的是在为小伙伴提供一个结构清晰、技术深入的参考。
-
核心内容:
-
CVE-2020-9496的技术剖析与利用流程。
-
SSH端口转发的实现及其在内部服务访问中的关键作用。
-
Docker逃逸的原理与操作细节。
-
攻击链的完整串联与红队策略优化。
-
-
目标:通过隐藏敏感字段(如IP、凭据和具体命令),保留技术逻辑与思维,给一些些渗透思路 ,觉得还Ok得点个赞吧 !!!!
🛠️ 技术栈概览
技术组件
-
Web服务:Apache(虚拟主机,HTTP/HTTPS)、Apache OFBiz(Java ERP系统)
-
编程语言:Java(反序列化漏洞利用)、PHP(LFI触发)、Bash(脚本执行)
-
协议:
-
HTTP/HTTPS:漏洞触发与服务访问
-
SSH:端口转发与远程登录(TCP)
-
TCP:反弹Shell传输
-
ICMP:RCE验证
-
UNIX域套接字:Docker逃逸
-
-
工具:
-
ysoserial
:生成反序列化Payload -
Burp Suite
:拦截与修改请求 -
gobuster
:目录枚举 -
netcat
:文件传输与Shell监听 -
tcpdump
:流量分析 -
linpeas
:权限提升枚举
-
-
漏洞类型:
-
LFI(路径遍历)
-
RCE(SQL注入)
-
反序列化(CVE-2020-9496)
-
弱凭据
-
Docker逃逸
-
红队视角扩展
红队在技术栈选择上注重灵活性与隐蔽性:
-
协议选择:优先使用HTTPS加密流量,避免IDS检测。
-
工具组合:结合
Burp Suite
与ysoserial
实现手动与自动化利用的平衡。 -
环境适应:针对Docker环境,使用
linpeas
快速定位逃逸点。
🔍 初始侦察:发现内部Web服务
技术原理
在目标主机上,通过SSH会话运行网络枚举命令,发现本地监听的Web服务(127.0.0.1:8443
)。由于该服务仅对本地开放,红队利用SSH端口转发技术,将内部端口映射到攻击机本地,实现远程访问。
渗透步骤
-
网络枚举:
-
使用
netstat -ant
列出目标开放端口,发现tcp 127.0.0.1:8443
。
-
-
SSH端口转发:
-
执行SSH命令,将目标的
127.0.0.1:8443
映射到攻击机的本地端口。 -
访问映射后的
https://127.0.0.1:8443
,确认服务存在(返回404页面)。
-
核心技术解析
-
SSH本地端口转发(-L):
-
原理:通过SSH隧道,攻击机本地端口的流量被转发至目标主机的指定地址。
-
流程:
-
建立SSH连接至目标。
-
攻击机监听本地端口(如
8443
)。 -
请求通过隧道转发至目标的
127.0.0.1:8443
。
-
-
注意:隧道依赖SSH会话,必须保持连接。
-
红队思维
-
为何选择SSH转发:内部服务通常受防火墙限制,SSH转发是低调且高效的突破手段。
-
侦察价值:404页面暗示Web应用存在,为后续枚举奠定基础。
-
隐蔽性建议:使用SSH密钥登录而非密码,减少日志痕迹。
🕸️ Web枚举:定位Apache OFBiz
技术原理
目标的127.0.0.1:8443
运行Apache OFBiz(Java开源ERP系统)。通过目录枚举工具,发现管理路径/content/control/main
,并确认版本为17.12.01,存在CVE-2020-9496反序列化漏洞。
渗透步骤
-
目录枚举:
-
使用
gobuster
扫描https://127.0.0.1:8443
,发现/content/control/main
。
-
-
版本验证:
-
访问路径,确认OFBiz版本,并在漏洞数据库中匹配CVE-2020-9496。
-
核心技术解析
-
gobuster:高效枚举工具,结合常见目录词表(如
directory-list-2.3-medium.txt
)快速定位关键路径。 -
HTTPS访问:绕过SSL验证(
-k
选项),适应未受信任证书场景。
红队思维
-
枚举策略:从通用路径入手,逐步聚焦业务逻辑接口(如
/control
)。 -
版本情报:版本号是漏洞利用的起点,红队需熟练利用Exploit-DB等资源。
-
效率提升:可结合
Burp Suite
的Intruder模块,加速枚举并验证响应。
🕳️ CVE-2020-9496:反序列化漏洞剖析
漏洞原理
CVE-2020-9496是OFBiz中XML-RPC端点(/webtools/control/xmlrpc
)的反序列化漏洞。由于未严格验证serializable
字段,攻击者可注入恶意Java对象,通过ysoserial
的CommonsBeanutils1链触发命令执行。
技术细节
-
XML-RPC:基于HTTP的远程调用协议,OFBiz依赖其处理请求。
-
反序列化流程:
-
服务器解析XML-RPC请求,调用
ObjectInputStream.readObject()
。 -
利用
PriorityQueue
和BeanComparator
,触发Runtime.getRuntime().exec()
。 -
执行Payload中的任意命令。
-
渗透步骤
-
环境准备:
-
配置Java 8环境,下载
ysoserial
。
-
-
Payload生成:
-
使用
ysoserial
生成下载、权限设置和执行脚本的三步Payload。
-
-
攻击执行:
-
搭建HTTP服务器托管反弹Shell脚本。
-
发送XML-RPC POST请求,触发Payload。
-
通过
netcat
监听反弹Shell。
-
红队思维
-
分步执行:将复杂命令拆分为下载、授权和执行,降低失败率。
-
隐蔽性优化:使用加密Payload或混淆脚本,避免WAF拦截。
-
检测规避:在
/tmp
下操作临时文件,并及时清理痕迹。
🐳 Docker逃逸:突破容器限制
技术原理
在Docker容器内获得Shell后,通过docker0
接口和/proc/self/cgroup
确认环境。利用宿主机共享的/var/run/docker.sock
,创建挂载宿主根目录的新容器,实现逃逸。
渗透步骤
-
环境确认:
-
检查
cat /proc/self/cgroup
或ip a
,验证Docker环境。
-
-
定位Socket:
-
查找
/var/run/docker.sock
。
-
-
逃逸执行:
-
运行新容器,挂载宿主
/
至/mnt
,访问敏感文件。
-
核心技术解析
-
Docker Socket:UNIX域套接字,允许容器与宿主Docker守护进程通信。
-
挂载逃逸:通过
-v /:/mnt
参数,直接操作宿主文件系统。
红队思维
-
逃逸优先级:Docker环境是高价值目标,需快速验证逃逸可能性。
-
权限利用:Socket存在表明配置疏忽,可作为提权突破口。
-
防御启示:建议禁用容器内的Socket挂载,或限制Docker权限。
🔗 攻击链串联
技术关联
-
LFI到RCE:LFI泄露数据库凭据,触发Cacti RCE。
-
RCE到权限提升:RCE获Shell,枚举SSH凭据。
-
权限提升到端口转发:SSH登录并转发内部服务端口。
-
端口转发到反序列化:访问OFBiz,触发CVE-2020-9496。
-
反序列化到Docker逃逸:容器Shell利用Socket提权。
协议衔接
-
HTTP/HTTPS:贯穿漏洞触发。
-
SSH/TCP:支持转发与Shell。
-
UNIX域套接字:实现Docker逃逸。
🛠️ 红队视角:实战总结与心得
攻击链总结
-
侦察 → LFI → 凭据泄露 → RCE → Shell → 权限提升 → 端口转发 → 反序列化 → Docker逃逸
红队建议
-
隐蔽性:加密流量,清理日志,避免触发警报。
-
灵活性:根据目标Java版本调整Payload链。
-
自动化:借助Metasploit模块加速利用。
-
思维延伸:每个步骤都可能成为新攻击的起点,保持发散性探索。
📝 结语
- 通过LFI、RCE、SSH端口转发、CVE-2020-9496反序列化及Docker逃逸,本文展示了红队如何系统性地攻破目标。
- SSH转发解决了内部访问难题,反序列化利用了Java漏洞,而Docker逃逸揭示了容器安全的薄弱环节。
- 防御者需关注补丁更新、输入校验和容器隔离,以对抗此类攻击。