CVE-2017-10271 漏洞复现与分析
漏洞介绍
Weblogic 的 WLS Security 组件对外提供 webservice 服务,其中使用了 XMLDecoder 来解析用户传入的 XML 数据,在解析的过程中出现反序列化漏洞,导致可执行任意命令。攻击者发送精心构造的 xml 数据甚至能通过反弹 shell 拿到权限。
影响版本
OracleWebLogic Server10.3.6.0.0OracleWebLogic Server12.1.3.0.0OracleWebLogic Server12.2.1.1.0OracleWebLogic Server12.2.1.2.0
漏洞复现环境
攻击方:kali 2021
服务端:vulhub 的 weblogic 的 CVE-2017-10271 环境
漏洞复现
攻击方使用 Burp 发送反弹 shell 的 payload:
成功得到 shell:
POC
https://github.com/NingKn/CVE_EXP/blob/main/cve-2017-10271/cve-2017-10271.py
漏洞分析
CVE-2017-10271 漏洞是 WebLogic Server WLS 组件的远程命令执行漏洞,触发漏洞 url 如下:
http://192.168.124.42:7001/wls-wsat/CoordinatorPortType 发送 post 数据包,通过构造 SOAP(XML)格式的请求,在解析的过程中导致 XMLDecoder 反序列化漏洞。
在 weblogic/wsee/jaxws/workcontext/WorkContextServerTube 类的 processRequest 方法中,处理我们发送的 POST 数据包中的 SOAP(XML)数据。var1 即是传入的 SOAP 数据,我们 idea 配置好远程调试并且开启 debug 后,在 processRequest 方法中下断点:
Burp 通过 post 发送数据包后,idea 停留在断点处,查看其中的 var1 变量既是我们发送的 xml 数据:
代码往下走,进入 readHeaderOld 方法,跟进前我们查看 var3 变量的信息:
跟进 readHeaderOld 方法,发现这里其实就是进行了一波转换,生成了 WorkContextXmlInputAdapert var6 对象,下图是该方法中的 var4 变量存放了的 xml 数据:
Var6 中的 buf 集合就是 var4 中的数据,及我们传输的 xml:
跟进 receive 方法,var1 实参是上面 var6 形参:
跟进 var2 的 receiveRequest 方法:
这里的 var1 就是上面的 var1 形参:
跟进 receiveRequest 方法:
跟进 readEntry 方法,var0 存放了 xml 数据:
跟进 var0 的 readUTF 方法:
直接调用了 xmlDecoder.readObject 方法,产生漏洞。
总结:
XMLDecoder 来解析用户传入的 XML 数据,在解析的过程中出现反序列化漏洞,导致可执行任意命令执行。
漏洞修复:
方法一:删除 wls-wsat 组件,然后重启 weblogic
方法二:官网下载,打补丁
评论