目录
一、文件上传漏洞的产生与危害
概念
上传文件的时候,如果服务器端脚本语言,未对上传的文件进行严格的验证和过滤, 就有可能上传恶意的脚本文件,从而控制整个网站,甚至是服务器。
二、文件上传检测绕过
1、JS 绕过
由于服务器端未正确验证用户上传的文件类型、文件大小和文件内容导致的。
通过修改文件上传源代码,使其中判断上传文件类型的源代码失效,从而绕过。
2、文件类型验证
通过bp抓包绕过文件类型
3、黑名单验证
思路:apache 服务器能够使用 php 解析.phtml.php3
将文件后缀名进行修改。注:仔细查看黑名单文件类型。
4、黑名单验证.htaccess
思路:
使用.htaccess(超文本访问)是许多 Web 服务器根据目录应用设置的有用文件,允许在运行时覆盖 Apache 服务器的默认配置。使用.htaccess,我们可以在运行时轻松启用或禁用任何功能。
5、大小写绕过
代码里面没有验证大写,可以把文件名变成大写
6、末尾空格
上传的时候在文件名后加个空格
7、增加一个.
代码里面少了删除末尾的点
8、增加一个::$DATA
思路:
在 window 的时候如果文件名+"::$DATA"会把::$DATA 之后的数据当成文件流处理,不会检测后 缀名,且保持::$DATA 之前的文件名,他的目的就是不检查后缀名
例如:"phpinfo.php::$DATA" Windows 会自动去掉末尾的::$DATA 变成"phpinfo.php" 从而实现绕过
9、代码不严谨
借助的是代码不严谨
10、PPHPHP
str_ireplace 函数用于字符串替换操作,不区分大小写 其语法是 str_ireplace(find,replace,string,count)。参数 find 必需,规定要查找 的值;replace 必需,规定替换 find 中的值的值;string 必需,规定被搜索的字符串。
11、0x00 截断
00 截断是操作系统层的漏洞,由于操作系统是 C 语言或汇编语言编写的,这两种语言 在定义字符串时,都是以\0(即 0x00)作为字符串的结尾。操作系统在识别字符串 时,当读取到\0 字符时,就认为读取到了一个字符串的结束符号。因此,我们可以通 过修改数据包,插入\0 字符的方式,达到字符串截断的目的。
方法:在bp中添加%00(00截断分为get和post两种方法具体可根据当时场景讨论)
注:post需对%00多做一次解码的工作,get 型提交的内容会被自动进行 URL 解码,在 post请求中,%00 不会被自动解码
12、图片木马
源代码中会有验证上传内容,确认是图片格式。例如:会限制图片中格式不能简单地 php 转化为 jpg,需要使用图片木马。在正常图片里面加入恶意代码执行以下命令。
copy a.png /b + b.php /a c.png
将a图片与b恶意代码相结合,生成图片。
13、图片二次渲染绕过
因源代码会将图片解码并将其转换为另一个l图像资源,该资源包含了图像的像素数据和其他相关信息。
须将恶意图片进行二次渲染,推荐使用010 Editor
14、条件竞争
在文件上传过程中,利用并发请求的特性,通过多次上传同一文件或者上传不同文件的方式来绕过服务器端的文件类型检查或权限控制,从而实现上传恶意文件或者覆盖系统文件的攻击。