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在图片后边添加上木马的内容,一个原理。
②检验关键字
例如
③检验文件大小
没啥用,一般上传的木马超不过那个大小。
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.白名单检测扩展名
最难绕过的方法。绕过方法请参考其他方法。
8.双写绕过
如果对文件的内容例如str_replace()使其变为空,就可以构造特殊的内容例如,过滤后就变为了
不过我觉得没啥用,他要是循环过滤那不就完了,写代码的时候肯定不会只给你过滤一次啊。