一、Javascript 检测绕过
背景
上传只通过前端检查后缀名是否符合白名单策略,后缀没有任何检测。
绕过方法
首先前端上传符合前端白名单的后缀文件,然后利用BurpSuite 抓包修改数据包中的文件文件名后缀
实验过程
URL:靶机IP/js_upload

1.创建PHP文件,后缀名改成jpg,文件名任意,文件内容为:
<?PHPphpinfo();?>
2.BurpSuite代理打开,开始拦截数据包,前端选中创建好的文件,点击上传。
3.BurpSuite 抓取到前端访问的数据包,修改文件名为PHP

修改成

4.服务器提示上传成功:

5.访问上传的文件

二、文件后缀检测绕过
背景
服务端代码利用黑名单拦截.php文件后缀上传,但是Apache服务器开启对别的PHP的后缀名支持,例如:php5,phtml服务端配置:

同时如果Apache服务器对于PHP解析方式使用的是AddHandler,则Apache文件解析机制,从右向左开始解析文件后缀,若后缀名不可识别,则继续判断直到遇到可解析的后缀为止服务端配置:

绕过方法
直接上传phtml文件或者构造后缀.php.jpg文件,绕过服务端黑名单检查
实验过程
URL:靶机IP/ext_upload/
1.创建.phtml后缀名文件或者后缀.php.jpg文件,文件内容为:
<?PHPphpinfo();?>
2.前端选中创建好的文件,点击上传。
3.服务器提示问价上传成功,

4.访问上传的文件

三、文件类型检测绕过
背景
服务端检测代码利用上传文件的Content-type字段检查文件属性,但是Content-Type字段可以通过前端抓包修改字段值,以达到绕过的目的。
绕过方法
前端修改Content-Type字段
实验过程
URL:靶机IP/mime_upload/
1.创建.php后缀结尾的文件,文件内容为:
<?PHPphpinfo();?>
2.BurpSuite代理打开,开始拦截数据包,前端选中创建好的文件,点击上传。
3.修改BurpSuite抓取到的数据包

修改为:

4.服务器提示上传成功

5.访问上传的文件

四、文件信息检测绕过
背景
服务端代码为了更加准确的检查上传的文件,开始检查上传的文件头,其中就就包括PHP使用的getimagesize函数,该函数就是通过检查文件头来进行判断文件是否是图像文件,但是该存在一问题,可以通过修改函数头来进行绕过检查判断。
绕过方法
给文件添加白名单的文件头
实验过程
URL:靶机IP/hex_upload
1.浏览器打开访问的URL,选择桌面upload文件夹内部1.php文件,点击上传。
2.发现可以后端并没有拦截该文件上传,直接上传成功

3.访问上传的文件
