什么是中间件

        中间件(英语:Middleware)是提供系统软件和应用软件之间连接的软件,以便于软件各部件之间的沟通。中间件处在操作系统和更高一级应用程序之间。他充当的功能是:将应用程序运行环境与操作系统隔离,从而实现应用程序开发者不必为更多系统问题忧虑,而直接关注该应用程序在解决问题上的能力 。容器就是中间件的一种。

        也就是说,关于中间件,我们可以理解为:是一类能够为一种或多种应用程序合作互通、资源共享,同时还能够为该应用程序提供相关的服务的软件。(注意:中间件是一类软件的总称,不是单独的一个软件)

        我们经常管web中间件叫做web服务器或者web容器

        正常情况下一次web的访问顺序是:web浏览器---服务器(硬件)---web容器---web应用服务器---数据库服务器。

常用的中间件:

        ISS、Apache、Nginx、Tomcat、shiro、WebLogic、Jboss、WebSphere等

各中间件漏洞总结:

ISS:

        解析漏洞

                ISS 6.x版本

                        基于文件名

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

                        基于文件夹名

                                该版本.asp可以作为文件夹名且会默认将.asp/目录下的所有文件当成Asp文件解析。

                                该版本配置默认将.asa,.cdx,.cer解析为asp

                ISS7.x版本

                        在fast-cgi运行模式下,在任意文件例如1.jpg后面加上/.php都会将该文件解析为php文件

        PUT任意文件写入

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

Apache

        未知扩展名解析漏洞

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

        AddHandler导致的解析漏洞

                当httpd-conf文件被添加

AddHandler application/x-httpd-php .php

                这种情况下,只要文件名中包含.php的后缀,文件就会以php文件解析,.php可以不用是最后一个后缀,可利用这种特性构造文件名绕过上传白名单。

        Httpd换行解析漏洞

                影响版本:2.4.0-2.4.29

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

Nginx

        任意解析漏洞:

                小皮面板(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时依旧解析。

        文件名逻辑漏洞

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

                实现方法与上一个相类似,访问a.jpg,抓包修改为a.jpg...php,在hex选项卡中修改jpg后的两个点2e为20,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时,将产生目录遍历漏洞。

Tomcat

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

                环境:Tomcat/8.0.30

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

        Apache 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受到远程执行代码的攻击。

        Tomcat+弱口令&&后台getshell漏洞

                影响范围:Apache Tomcat 8

       

 

Shiro

        反序列化漏洞

                Apache Shiro框架提供了记住密码的功能(RememberMe),用户登录成功后会生成经过加密并编码的cookie。在服务端对rememberMe的cookie值,先base64解码然后AES解密再反序列化,就导致了反序列化RCE漏洞。

                那么,Payload产生的过程:

                命令=>序列化=>AES加密=>base64编码=>RememberMe Cookie值

                在整个漏洞利用过程中,比较重要的是AES加密的密钥,如果没有修改默认的密钥那么就很容易就知道密钥了,Payload构造起来也就十分的简单。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐