中间解析漏洞小知识科普

前言

当一个web应用对上传文件的后缀名等限制严格,难以上传类似于PHP这类可动态执行脚本的时候,可以考虑考虑比对一下中间件的版本号和尝试一下是否存在解析漏洞这个问题。

常见中间件的解析漏洞

IIS5.x-6.x解析漏洞

目前使用IIS5.x-6.x版本的服务器都是比较古老的网站,而且此处的解析漏洞只能解析asp而不能解析aspx
其原理在于,服务器默认不解析;后面的内容,理所应当的可以想到利用方式。

上传一个 shell.asp;.jpg

访问路径

www.zhhhy.com/xx.asp;.jpg

6.x版本中还可以使用目录解析方式,原理是IIS会将.asp目录下的文件都解析成asp文件

www.zhhhy.com/a.asp/shell.jpg

其中,shell.jpg包含着我们的一句话内容。
值得一提的是,还可以IIS还可以解析.asa .cer ,cdx这类文件类型。在测试时,不妨多试试,没准有意外惊喜。

PHP-CGI解析漏洞

由于PHP-CGI中的一个配置项cgi.fix_pathinfo=1默认是开启的,这导致当某个文件不存在时,会向前解析

www.zhhhy.com/shell.jpg/shell.php

当我们访问shell.php并不存在时,则会将shell.jpg当成php脚本执行。
而正因这个特性,在IIS7.0,IIS 7.5Nginx都存在解析漏洞。这本身并不是中间件产生的问题,而属于用户配置不当产生的问题,因此对于版本号要求不是那么大,测试时依旧多试试。

Apache解析漏洞

Apache解析漏洞有两种方式。第一种未知后缀导致的,这是由于人为的配置不当,但凡是人为配置的问题,都和版本号无关。当

上传shell.php.zhhhy文件
访问 www.zhhhy.com/shell.php.zhhhy

由于Apache并不认识.zhhhy是什么文件,于是向左再取一个后缀,于是就当成了php文件执行了。
第二种则是特殊符号(CVE-2017-15715)的助攻。影响版本在2.4.02.4.29即可。在上传文件的时,在文件名以十六进制的方式加入一个换行符%0a(0x0a)。P神对原理进行了简单解释P神对原理进行了简单解释

Nginx解析漏洞

上文提到在PHP-CGI的默认产生会导致Nginx存在一个解析漏洞,这本身并不是Nginx的锅。而在< 8.03的版本中,如果上传文件名如shell.jpg%00.php,则会解析成PHP文件。

防御

网上已有很多防御方法,此处不再摘抄。自己总结了一下,配置问题则当然检查配置。而如何配置是正确,那则要有一定的积累,这就是所谓的安全基线。如果是系统本身的问题,则该升级则升级,该打补丁则打补丁。有时候会遇到说不能升级系统,希望靠waf设备在流量层做拦截,那么就是要配置规则,因为没有做过实际开发和运维,不知道直接拦截多后缀的请求是否得当,毕竟解析漏洞多数都有多后缀的特征。

闲话

解析漏洞对于使用的中间件和中间件的版本号都有一定要求,也就证明了渗透测试第一步信息收集的重要性。当然也由于人为配置问题的因素存在,并不意味着版本号是不存在漏洞的就不会出现问题。总之,多试试,不会有啥毛病的。

你可能感兴趣的:(中间解析漏洞小知识科普)