无验证
我们就可以直接上传一句话木马或者是webshell脚本。
前端验证 也叫客服端检测
前端验证主要是用JavaScript函数,我们先看看这个函数
含义:JavaScript(简称“JS”) 是一种具有函数优先的轻量级,解释型或即时编译型的编程语言。虽然它是作为开发Web页面的脚本语言而出名,但是它也被用到了很多非浏览器环中,JavaScript 基于原型编程、多范式的动态脚本语言,并且支持面向对象、命令式和声明式(如函数式编程)风格。
作用:JavaScript的作用更多的时候是实现网页的交互功能,刚刚开始学前端的小伙伴都知道网页主要由HTML+CSS实现,但只能实现一个静态的内容效果,想要实现交互和更炫酷的效果那么就需要使用JS的帮助了,所以HTML+CSS+JS被称为前端三剑客。
因此在文件上传中js函数主要是要验证你上传的文件是不是它允许的文件类型。
在ctfhub中一道题就是关于前端验证的
文件上传我们一来都会先上传一句话木马看看,或者是先上传配置文件,
但是我们上传以后就会发现,上传不了。然后我们就会尝试去抓包看看,但是发现抓包也是不可以的,因为我们没有禁用检测文件后缀的JS代码。我们禁用之后就可以抓包了。上传正常格式文件,抓包修改文件的filename为脚本格式。
服务端检测(目录路径检测)
对目录路径的检测不够严谨而导致可以使用%00截断绕过进行攻击。
eg:
- /111.php%00.gif/111.gif -> /111.php
黑白名单绕过
黑名单
1.大小写绕过,例如黑名单中为.php,那么可以上传.PHP或者.Php来绕过黑名单,这里在sql中也有体现。
2.“. ”“_”号和空格绕过,(只适用于Windows系统)Windows系统下,文件名后缀最后一个“.”“_”和空格会被自动去除,例如黑名单为.php,那么可以上传.php.,.php_或者.php 来绕过黑名单,Windows在解析时会删除最后一个.和_还有空格
3.::$DATA绕过,(只适用于Windows系统)在Windows的时候如果文件名+"::$DATA"会把::$DATA之后的数据当成文件流处理,不会检测后缀名,且保持::$DATA之前的文件名
4.双写绕过,有些函数会替换敏感文件名,但不递归删除的话就可以双写绕过,例如a.phphpp,php被替换为空后就成了a.php
5.00截断绕过,上传时上传a.php.jpg,抓包在php后添加一个字符修改其HEX值为00,这样解析之后就是a.php了,也绕过了黑名单; 常见于ASP程序,JSP也会出现 PHP限制条件: php<5.3.4 php.ini中的magic_quotes_gpc设置为OFF
6.上传可解析的扩展文件名,例如:
asp/aspx: asp,aspx,asa,asax,ascx,ashx,asmx,cer,aSp,aSpx,aSa,aSax,aScx,aShx,aSmx,cEr
php : php,php5,php4,php3,php2,pHp,pHp5,pHp4,pHp3,pHp2,html,htm,phtml,pht,Html,Htm,pHtml
jsp : jsp,jspa,jspx,jsw,jsv,jspf,jtml,jSp,jSpx,jSpa,jSw,jSv,jSpf,jHtml
可利用burp fuzz测试
白名单
通过某种类型的技巧来绕过白名单,例如添加空字节注入(shell.php%00.gif),或使用双重扩展来上传文件(shell.jpg.php)。