网上有很多的通关教程,但是单纯的通关并没有太大意义,于是开始在源码层分析漏洞成因

参考答案:https://xz.aliyun.com/t/2435

前八关的问题分别如下

pass-01 仅在前端过滤并未对传入后端的数据进行过滤,等于没过滤而产生漏洞
pass-02 仅在后端判断了Content-Type,未对文件后缀进行判断导致修改Content-Type: image/jpeg,便可突破限制
pass-03 不完善的黑名单机制,以至于可以使用例如php2,php3,pht等php的别名进行绕过,
pass-04 对大部分的php,asp等别名进行过滤,也对文件名进行例如去空格等处理,未过滤.htaccess文件,可上传含有内容为SetHandler application/x-httpd-php的.htaccess,使得所有文件都可以按照php文件执行
pass-05 未对文件名进行大小写转换
pass-06 未对文件末尾的空格进行处理
pass-07 未对文件末尾的. 进行处理
pass-08 未对::$DATA字符串进行处理,

总结

1.对文件名的简单处理是尤为重要的,可以利用window的特性绕过一些判断机制
2.黑名单机制安全性是脆弱的
3.前端过滤而后端未过滤等于没过滤
4.可利用.htaccess文件使得任意文件按照php的方式执行 SetHandler application/x-httpd-php

简单的文件名处理方法

$file_name = trim($_FILES['upload_file']['name']);
$file_name = deldot($file_name);//删除文件名末尾的点
$file_ext = strrchr($file_name, '.');
$file_ext = strtolower($file_ext); //转换为小写
$file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
$file_ext = trim($file_ext); //收尾去空

由于对php语言并不了解,有些其他的突破方法并不能理解.看来php还是得学习一波诶.