1.文件上传漏洞原理
文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。常见场景是web服务器允许用户上传图片或者普通文本文件保存,而用户绕过上传机制上传恶意代码并执行从而控制服务器。
文件上传漏洞利用条件:
(1)能够成功上传木马
(2)上传的木马能够被web容器解析执行,所以上传路径要在web容器覆盖范围内。
(3)用户能够访问上传的木马,所以得知道上传的木马准确路径。
2.常见的检测方式及绕过技巧
3.文件解析漏洞
3.31文件解析漏洞与中间件
文件解析漏洞是指中间件在解析文件的时候,某些特性可以被用作文件上传漏洞,从而实现非法文件解析。常见中间件有Apache、IIS、Nginx等。
3.2 IIS解析漏洞
3.2.1 IIS6.0
(1)目录解析
在网站目录/xx.asp/ 下面,任意拓展名的文件都会被解析为asp文件。
(2)文件解析
IIS6.0 都会把/xx.asp;.jpg、 /xx.asp:.jpg这类文件解析为 asp 文件,因为/xx.asp:.jpg 此类文件在Windows下不允许存在,:.jpg被自动除去,剩下/xx.asp。
(3)其他默认可解析文件格式
/xx.asa、/xx.cer、/xx.cdx
3.2.2 IIS7.0/IIS7.5
在Fast-CGI运行模式下,在一个文件路径(/xx.jpg)后面加上/xx.php会将/xx.jpg/xx.php 解析为 php 文件。
常用利用方法:将一张图和一个写入后门代码的文本文件合并将恶意文本写入图片的二进制代码之后,copy xx.jpg/b + yy.txt/a xy.jpg
(/b 即二进制[binary]模式,/a 即ascii模式 xx.jpg正常图片文件)
3.3Nginx解析漏洞
(1)在Fast-CGI关闭的情况下,Nginx <=0.8.37 存在解析漏洞,在一个文件路径(/xx.jpg)后面加上%00.php会将 /xx.jpg%00.php 解析为 php 文件。
(2)在Fast-CGI运行模式下, Nginx <=0.8.37,在一个文件路径(/xx.jpg)后面加上/xx.php会将/xx.jpg/xx.php 解析为 php 文件。
3.4Apache解析漏洞
(1)Apache认为一个文件可以有多个后缀名,例如:peak.txt.jpg.xx
(2)Apache的解析规则是从右往左依次判断后缀名,当Apache不认这个后缀名时,就继续往前判断后缀名,如果遇到认识的后缀名,就将这整个文件当做认识的这个后缀名来解析。如请求xx.php.ras,Apache无法解析.ras,然后向左解析到.php。
4.文件上传漏洞测试思路