2023/08/10:upload笔记
代码相关
1 |
|
文件上传结束后,默认的被储存在临时文件夹中,这时必须把他从临时目录中删除或移动到其他地方,可使用copy()
或move_uploaded_file()
可能存在错误使用的函数:empty()、isset()、strpos()、rename()、iconv()、copy()
校验过程
1.客户端javascript检测
(上传文件)
2.服务端MIME检测
3.目录路径检测
4.文件扩展名检测
5.文件内容检测
校验方式与绕过
javascript检测(upload-lab pass 1)
通常验证上传文件的扩展名是否符合验证条件
方法
1.浏览器禁用js
2.F12修改js代码绕过验证
3.使用burp抓包直接提交,绕过js验证
MIME(content-type字段校验)(upload-lab pass 2)
MIME type代表互联网媒体类型,在html文件中可以使用content-type属性表示,描述了文件类型的互联网标准。Response对象通过设置ContentType使客户端浏览器,区分不同种类的数据,并根据不同的MIME调用浏览器内不同的程序嵌入模块来处理相应的数据。
方法
使用Burp截取上传数据包,修改Content-Type的值
文件扩展名检测
方法 1:.htaccess(upload-lab pass 4)
配合Apache的.htaccess文件上传解析漏洞
通过htaccess文件可以实现改变文件扩展名等操作绕过检测
方法 2:解析缺陷绕过(upload-lab pass 18)
Apache的解析漏洞主要特性为Apache是从后面开始检查后缀,按最后一个合法后缀执行,将木马的后缀进行修改为允许上传的类型后,即可成功绕过验证,最终拿到权限。
例如将后缀修改为.7z、.cab、.zip、.bmp
方法 3:目录路径检测解析绕过
例如,将保存文件的相对路径uploadimg/
改为uploadimg/1.asp/
,filename="yijuhua.asp"
改为filename="yijuhua.asp/1.jpg"
,上传文件的名字为yijuhua.asp/1.jpg
时服务器会从头部查找查找”.”号,然后查找”/“,如果有则内存截断,原文件会被解析为/yijuhua.asp
方法 4:解析缺陷绕过(与上类似)
例如,将保存文件的相对路径uploadimg/
改为uploadimg/1.php
,filename="yijuhua.php"
改为filename="yijuhua.jpg"
,文件的名字为1.php;yijuhua.jpg
会作为php解析,原理类似。
方法 5:黑名单绕过
1.使用大小写绕过(针对对大小写不敏感的系统如windows)
2.使用黑名单外的脚本类型,如:php5,asa 和 cer等(IIS默认支持解析.asp,.cdx, .asa,.cer等)
1 |
|
3.配合操作系统文件命令规则
4.双扩展名之间使用00截断,绕过验证上传恶意代码:test.php%00.jpg
5.超长文件名截断上传(windows 258byte | linux 4096byte)
6.空格及点绕过
7.::$DATA
绕过
方法 6:服务端检测文件内容配合文件包含漏洞
如:先上传一个内容为木马的txt后缀文件,因为后缀名的关系没有检验内容;然后再上传一个php的文件,内容为<?php Include(“上传的txt文件路径”);?>
,php文件就会去引用txt文件的内容,从而绕过校验
方法 7:PHP特性(使用数组绕过)
如:file_put_contents()
函数的第二个参数,可以是数组;然后,如果代码里用正则匹配 bad word 的时候,对一个数组进行正则匹配没用
方法 8:服务端检测文件头(upload-lab pass 15)
不同文件头(PHP使用getimagesize函数验证):
PNG: 文件头标识 (8 bytes) 89 50 4E 47 0D 0A 1A 0A
JPEG: 文件头标识 (2 bytes): 0xff, 0xd8 (SOI) (JPEG 文件标识)
GIF: 文件头标识 (6 bytes) 47 49 46 38 39(37) 61
在恶意脚本前加上允许上传文件的头标识
方法 8:竞争上传(upload-lab pass 17)
原代码存在逻辑漏洞,如先上传文件,检测不通过后再删除,此时可以使用多线程并发的访问上传的文件,总会有一次在上传文件到删除文件这个时间段内访问到上传的php文件
方法 9:二次渲染(upload-lab pass 16)
GIF:
首先将GIF文件与php一句话木马合并,再将上传后的文件下载与合并后的文件对比(如010_Editor),在未被渲染的部分写一句话木马
PNG:
需要脚本构造图片
1 |
|
1.准备png图片
2.在cmd使用php命令执行该脚本生成新png图片
3.使用新图片上传
4.在文件包含漏洞处进行传参