1.JS验证 禁用JS 或者先通过前端验证抓包修改后缀
2.对数据包MIME 修改数据包的中的content -Type类型
3.CTF中常用到的PHP45 存在的没有php5的黑名单
4.伪静态文件(htaccess)内部代码为SetHandler application/x-httpd-php
作用是将后续文件无论传啥都当做PHP文件处理
5.大小写的绕过
6.空格绕过
7.点(.)绕过
8.::$DATA的绕过(在PHP+windows的情况下会把::$DATA当做文件流处理)不检测后缀
9.逻辑错误 点加空格加点
10.双写后缀绕过
要点穿插:
00截断(16进制遇到0截断) 0x00表示ascii的0,表示结束,达到绕过(C和C++)
%00截断 将16进制中的25(%)变为00使sublim判断为结束从而达到绕过
11.路径中upload使用的是get请求可以进行%00截断
12 0X00截断,使用Decoder对upload后的25(%)进行修改 达到0x00效果
13 -15 图片马的制作: 前端字节 getimagesize() exif_imagetype()
Windows:copy F1.jpg /b +F2.php /a shall.jpg 合成代码 前加后 可绕过
Linux: cat F1.jpg F2.php >>shall.jpg 前加后 可绕过
16 二次渲染图片 将图片马消除:可以gif在文件上传后进行文件对比在匹配部分加入
<?php phpinfo() ?>后上传 或者用hackbar进行参数的更改
17条件竞争:互联网并行程序 先获取 在执行 不行删除 先上传所以不一定要图片马
<?php fputs(fogen('web.php','w'),'<?php phpinfo();?>')?> 放入爆破模式intruder
对payload进行处理 最后脚本运行多次或者不断刷新界面 原因是条件竞争可能来不及重命名
18上传图片马原理和18一致
19pass验证 抓包00截断
20CTF审计代码:发现只有数组才能绕过 通过php数组特性 更改save_name里的值达到绕过
防御总结一日小结:
1.白名单(黑名单可绕过)
2.前后端都检查
3.二次渲染
4.隐藏上传文件路径
5.单独设置服务器,可做日志
6.重命名,