基础及过滤方式
什么是文件上传漏洞?
存在文件上传的地方均有可能有文件漏洞(但不是一定有);如果上传代码某个地方存在验证疏忽,则会有文件漏洞
危害
可能直接获取网站权限,危害高于sql注入
如何查找
1.通过扫描敏感文件,字典里面会有一些常见上传地址;
2.会员中心大部分会有一个图像上传利用图像上传;
3.进入网站后台也有上传,但后台权限不等于网站权限;
4.白盒从对方代码中分析某些地方有没有文件上传功能进行查找漏洞;
文件上传的利用思路
拿到文件上传后,对来源和类型进行简要了解,选择对应的思路
常规
扫描获取上传
通过网站敏感文件扫描获取上传地址
会员中心上传
大部分有上传图像的功能;后台系统上传;各种途径上传
CMS
已知CMS源码上传
编译器
ckeditor、fckeditor、kindeditor、xxxxeditor
其他/CVE
代码审计
平台/第三方应用等
找网站上传的url通过搜索引擎
site:url (无三级域名) upload
解析漏洞(前提:访问了代码文件)
格式上的解析出现了混乱;上传图片文件能够解析成为代码文件
注:
1.文件上传大部分不允许上传脚本格式,允许的一般是压缩文件或者音频文件
2.提示不允许代码文件上传时,可以通过修改前端代码绕过文件格式验证
3.前端的脚本(HTML.JS)在用户的浏览器上执行,直接可见;而后端的代码(PHP)在服务器执行后将结果返回给用户
4.如果前端禁用js脚本,过滤代码就会被禁用,但不安全并且可能禁用正常js脚本;相反,后端需要发送至服务器处理,相对安全
5.如果整个上传流程是js写的,则可能抓不到包(如果前后端没有交互则抓不到包)
6.没有上传成功但已经传输到对方服务器了,失败或成功可能没有返回路径7.不同类型不同方式;不能通过图片格式的文件执行代码,必须要解析或者改后缀
8.CVE:通用漏洞披露,用来表示一种漏洞的特定编号,如CVE-2020-15999{年-编号}
9.MIME:浏览器通常使用MIME识别文件类型以此确定如何处理文档;在Burpsuite中Content-type对应的参数,一般格式是type/subtype
黑白名单绕过
文件上传常见验证
后缀名;黑名单;白名单;
文件类型
MIME信息
文件头(文件内容验证)
内容头信息
黑名单
asp;php;jsp;aspx;cgi;war等,即碰到明确不允许上传的后缀
后缀名不完全就可以通过类似后缀绕过,例如黑名单为.php则使用.php5、.php7等
白名单(较黑名单安全)
jpg;png;zip;rar等,即碰到只允许上传
判断content-type的值判断格式
修改绕过断定,可以伪造,通过抓包修改发送数据包
源码的表单
onsubmit属性的return checkfile()对信息进行过滤
method属性对应传参格式post或者get
几个函数
$_FILES['upload_file']['type']
判断MIME类型
$_FILES['upload_file']['size']
判断文件大小,单位是字节
if(isset...)
判断是否触发
特殊解析后缀
最好上传同类型的脚本;其他格式执行其他效果,取决于其他的服务器的执行效果
.htaccess
超文本入口;提供了针对目录改变配置的方法;通过此文件实现解析的自定义
后缀名大小写绕过
修改大小写;代码验证没有空格则添加空格也可以实现绕过(windows);也可以添加.但linux不行
php在windows中,如果添加了::$DATA则会被当成文件流处理,不会检测后缀名,且保持::$DATA前的文件名
代码将字符串php替换为空
如:a.php变成a.;此时可以通过双写绕过a.pphphp
过滤了后缀,即使上传成功代码也无法执行
0x00与%00截断
0x00截断:建立在文件命名上;也就是ACSII码为0的符号在某些函数中,被当作结束符,如果系统对文件名读取,读取到0x00可能会认为读取完成,就实现了绕过后缀
%00截断:建立在地址信息上;%00被解码成了0x00发挥了作用
注:
1.get自动解码,加%00就会相当于url的值,相当于真实的编码值;
2.post不会自动解码;
内容逻辑数组绕过
图片一句话:copy 1.png /b + shell.php /a webshell.jpg,上传图片马
二次渲染:相当于直接将文件上传至服务器上进行重命名,未进行文件检测;此时使用资源占用[上传文件的瞬间,将文件打开使服务器不能对文件进行操作、进行重新命名,而实现绕过]
目录命名:xx.php%00.jpg用%00截断;xx.php/.被认作文件以php结尾,而绕过php文件验证
iis 6.0漏洞以文件夹形式、xx.asp/php形式触发
文件夹:image/qq.jpg(原本),修改为image.asp/qq.jpg则会被当做asp解析
文件:image.jpg(原本),修改为image.asp;image.jpg则会被当做asp解析
如果是php文件将asp修改为php即可
常见绕过方法
数据溢出
防匹配(xxxxx)、将文件名重复,数据量变大,导致服务器崩溃,可能不会上传上去、将重复的东西单独一行放在文件名前面,添加;分号、垃圾数据溢出
符号变异
防匹配(',",;)、文件名后面没有分号,添加分号(表示结束)表示后面还有参数、双引号改单引号、去掉后面的双引号,实现错误闭合,匹配"前的内容、也可以 "随便加"文件.php
数据截断
防匹配(%00,;,换行)、x.jpg .php、x.php .jpg、x.jpg;.php、x.php%00.jpg、x.php(回车分成三行)
重复数据
防匹配(参数多次)、重复识别的参数以第几个为准,然后重复识别的参数(类似递归),再用数据溢出方法
白名单方法
将前面的参数复制到filename的双引号里面并且添加x.php