其他漏洞
编辑器漏洞
网站在实现上传文章等功能时会套用第三方编辑器的功能
大部分编辑器漏洞都是文件上传漏洞
判断:
1、看界面
2、目录扫描
fkceditor、ewebeditor、ckeditor、kindedit......
网上搜索相应版本的漏洞跟着测试即可
解析漏洞
IIS/7.X
Apache
Apache解析漏洞-低版本
x.php.xxx.yyy 最后的yyy不识别,向前解析,直到识别,即x.php
利用场景:
中间件apache属于低版本,2.x版本等低版本,即可利用漏洞上传一个不识别的文件后缀,触发后门代码解析
黑名单
Apache换行解析漏洞-vulhub有
2.4.0~2.4.29
%0a
Nginx
上传图片马路径/.php 即可php执行图片马
CMS漏洞
某CMS上传
思路!!!
1、找文件上传点
scan网站字典扫描、会员中心...
2、看中间件
看是不是低版本,又没有解析漏洞能够配合上传
3、测试上传漏洞(绕过)
判断黑名单还是白名单或是其他检测,针对性绕过
4、看CMS漏洞、其他漏洞(编辑器、CVE漏洞)
编辑器:看样式、字典扫描
上传参数解析:明确可修改项目
-----------------------------64980465541849181541550146591
Content-Disposition: form-data; name="upload_file"; filename="test.png"
Content-Type: image/png
name:表单参数值,不能更改,非要更改要达到与代码统一同步
表单传递的名字 upload_file
由前端决定命名,实际情况是改不了的
Content-Dispositon :一般可更改
接收类型 form-data表单的数据
filename:文件名,可以更改
上传的图片名字,本地的名字
Content-Type:文件MIME,视情况更改
文件自带类型,什么类型就显示啥
常见绕过方法
本质就是利用数据包和waf程序代码的信息差,书写格式不同两者读取到的含义不同
数据溢出-防匹配(xxx...)
冲垃圾数据,在;filename之前加大量垃圾数据,让waf失效,别忘了垃圾数据后加';'
符号变异-防匹配(' " ;)
单引号后双引号括起来表示这是个赋值的东西,不括起来waf可能会认为是个函数
filename="1.php : 若去掉一个"waf可能会被认定为文件名为"1,waf的防护机制可能是找" '引号内的东西匹配
1.php \ "1.php \ '1.php \ "1.jpg;.php"; \ "1.php%00.jpg"......利用 ' " ; / 各种符号不断组合测试
数据截断-防匹配(%00 ; 换行)
"1.php%00.jpg"
换行:
1.p
h
p
WAF程序代码可能会认为换行是\n ,但数据包可以识别
重复数据-防匹配(参数多次)
先判断以第几个参数为准,然后多次写参数
eg: 若以最后一个为准
filename="1.jpg";filename="1.jpg";......filename="1.php"
借助数据包原有自带正常数据作为干扰条件,写到waf检测参数中
eg:
filename="Content-Disposition: form-data; name="upload_file"1.php"
WAF读到filename时白名单认为是正常数据,后面的1.php没有值会接收他
而数据包读取时会正常接收到1.php
fuzz模糊测试
确定测试点,用字典大量替换
思路
定位它的检测项目位置
确定检测机制
想办法绕过
文件上传安全修复方案
后端验证:采用服务端验证模式
后缀检测:基于黑名单,白名单过滤
MIME检测:基于上传自带类型检测
内容检测:文件头,完整性检测
直接用getimage这类直接定死的函数,只能处理图像的函数
自定义函数:把黑白名单都写进去
function check_file(){}
直接在上面布置WAF防护产品:宝塔、云盾、安全公司产品......