PHP是C语言写的,MySQL是C++写的,Apache大部分是C语言写的,小部分是C++写的。所以,文件解析漏洞的本质还是需要我们去挖掘C语言和C++的漏洞。文件解析漏洞是指中间件(IIS、Apache、Nginx等)在解析文件时存在漏洞,攻击者可以利用该漏洞解析非法文件。需要注意的是,文件解析漏洞和文件上传漏洞是两个不同的东西,文件解析漏洞是基于文件上传的。例如,Apache中间件是用C和C++混合编写的。当Apache中间件存在解析漏洞时,无论我们的PHP代码层多么安全,都没有办法抵御攻击者的攻击,因为目前的漏洞与PHP代码层无关,已经是一个潜在的安全问题。文件解析漏洞是由于Apache中间件的C语言或C++编程存在漏洞,攻击者可以利用该漏洞解析非法文件。因此,底层安全性比任何其他安全性都更为重要。至少从现在开始,我们必须开始关注底层安全。接下来介绍Apache解析PHP文件的原理。Apache(httpd.exe)运行后,开始监听浏览器发送的请求,拦截请求,然后告诉PHP代码解析器(CGI、FAST-CGI或ApacheModule)解析之后的具体PHP文件加工简单。PHP代码解析器解析完文件后,将HTML页面返回给Apache,Apache将HTML页面响应给Web浏览器,依此类推。Apache在解析正常的PHP文件时,当然没有大问题。但是,当出现格式错误的文件时,Apache应该如何处理呢?其实在httpd.conf文件中,有一个设置DefaultTypetext/plain,它告诉我们当Apache遇到无法识别的文件时,它会如何反应。比如DefaultTypetext/plain,在这样设置的前提下,当Apache遇到无法识别的文件时,会将这些无法识别的文件解析为文本文件。这里,不能识别是什么意思?原来Apache的conf目录下有个mime.types文件(Linux在etc/mime.types)。这个文件的内容是Apache预定义的一些文件,可以正常解析。例如一张图片的Content-type与其文件的对应关系如下。image/jpeg:对应jpeg、jpg、jpe文件。image/gif:对应gif文件。image/png:对应png文件。image/ief:对应ief文件。image/g3fax:对应g3文件。当Apache遇到普通文件但无法解析时,可以在这里手动添加解析类型。例如,您要下载一个Word文件,但Apache将Word文件返回为rar文件。在这种情况下,这是因为Apache无法识别mime.types文件(或httpd.conf文件)中的Word文件。然后,它只能通过分析文件本身的内容,认为它是一个压缩文件,最后,Apache返回一个压缩文件。至于压缩文件的格式,只有Apache知道。这时,如果我们想让Apache正常识别Word文件,就需要在mime.types文件中加入如下三行代码:application/vnd.MSword.document.macroEnabled.12docmaapplication/vnd.openxmlformats-officedocument.wordprocessingml.documentdocxapplication/vnd.openxmlformats-officedocument.wordprocessingml.templatedotx这样Apache就可以正常返回Word文件了。其实也可以在http.conf文件中设置文件解析类型,使用Apache的AddType命令来设置,代码如下。AddTypeapplication/vnd.MSword.document.macroEnabled.12docmAddTypeapplication/vnd.openxmlformats-officedocument.wordprocessingml.documentdocxAddTypeapplication/vnd.openxmlformats-officedocument.wordprocessingml.templatedotx建议不要修改mime.types文件。添加文件解析类型指令时推荐使用Apache的AddType。因此,对于无论是mime.types文件还是httpd.conf文件都无法识别的文件解析类型,Apache会默认按照DefaultTypetext/plain字段中给出的值来解析无法识别的文件。可能在使用这个值之前,有一个解析验证,比如下载一个Word文件,返回一个rar文件。有兴趣的可以研究一下Apache的代码,研究一下我们的文件解析漏洞发生在Apache框架代码的哪个分支上。某网站文件存在解析漏洞,攻击者可以登录IIS服务器中的C:\inetpub\wwwroot。在该目录下创建一个名为aa.asp的文件夹,如图1所示。图1建立可执行目录接下来,攻击者在本地新建一个aa.jpg文件,并在其中写入一段ASP单字木马代码。然后,攻击者将用ASP一句话木马代码编写的aa.jpg图片木马文件上传到aa.asp文件夹中。最后,攻击者使用中国菜刀连接aa.asp文件夹下刚刚上传的aa.jpg图片木马文件,获取webshel??l,如图2所示。图2获取webshel??l
