文件上传漏洞及其绕过

1.前端JS验证

基于本地验证文件是否符合要求:直接将JavaScript禁用。或者burp抓包后修改后缀,将php文件后缀现先改为jpg,burp抓包后后缀改回php。

2.MIME 类型验证

burp抓包将Content-type类型修改为image/jpeg,image/png等

3.黑名单验证

①寻找没有过滤的类型:

phtml php3 php4 php5 PHP phtm

例如phtml php3 php4 php5 PHP phtm这些后缀名首先得让服务器支持这些解析为php脚本运行,httpd.conf配置文件中可以查看设置。

从图中可以看到,我安装的Apache默认解析php和phtm的,如果黑名单并没有过滤phtm,就可以上传phtm的木马。

②大小写绕过

例如phP,黑名单上不存在的话就可以绕过,过滤严格的话一般会用个strtolower()把后缀全变为小写,那个时候就不行了。

4.检查文件内容

①getimagesize() 函数用于获取图像信息:

构造图片马,或者用winhex在图片后边添加上木马的内容,一个原理。

②检验关键字

例如<?php

<script language="php">eval($_POST['cmd']);</script>  

③检验文件大小

没啥用,一般上传的木马超不过那个大小。

5。00截断

计算机处理文件遇到0x00(代表NULL)则会自动截断后边的内容,而较低版本的php就会因为这个出现漏洞。
一般分为两种那个情况:

①可以自己构造上传路径。

burp抓包在上传路径后边加上muma.php%00,然后将%00进行url编码(crtl+shift+u),(浏览器还要进行url解码,所以先编码后解码,保证原来的字符不变)上传。

②不知道上传路径:

文件名改为muma.php+.jpg,这个+ 其实就是个标识作用,改别的字符也行。burp抓包后,hex打开,将+的数值改为00,实际上代表就是0x00.
上传。不过00截断很旧了已经,现在基本找不到这种漏洞了。

6. .htaccess上传

Apache才有效的一个配置文件,直接配置Apache达到为所欲为的目的,默认开启。如果不开启,找到httpd.conf配置文件:
Options FollowSymLinks

AllowOverride None
改为:
Options FollowSymLinks

AllowOverride All
即完成了开启。

在有的时候黑名单过滤不严格,就会漏掉过滤.htaccess文件 。

这段代码就是让以ma.jpg的文件以php文件执行。上传图片后,不管图片名字有没有被自动重命名,访问的图片的地址看最后会有服务器上图片的名字,然后用.htaccess进行配置即可。
也可以直接Addtype application/x-httpd-php .jpg.所有的jpg都会以php脚本运行。

7.白名单检测扩展名

最难绕过的方法。绕过方法请参考其他方法。

猜你喜欢

转载自www.cnblogs.com/zaqzzz/p/9395409.html