⛳文件上传漏洞
是指用户上传了一个可执行
的脚本文件
, 并通过此脚本文件获得了执行服务器端
命令的能力, 这种攻击方式是最为直接
和有效
的。
“文件上传” 本身没有问题,有问题的是文件上传后, 服务器怎么处理
、解释文件
,如果服务器的处理逻辑
做的不够安全
则会导致严重的后果。
🎃上传漏洞危害
-
🎲注意几点:
🎲上传文件是web脚本语言
,服务器的web容器解释并执行了用户上传的脚本,导致代码执行
🎲上传文件是病毒或者木马时,主要用于诱骗
用户或者管理员下载执行或者直接 自动运行
🎲上传文件是Flash的策略文件 crossdomain.xml
,黑客用以控制Flash
在该域 下的行为(其他通过类似方式控制策略文件的情况类似)
🎲上传文件是病毒、木马文件,黑客用以诱骗
用户或者管理员下载执行
🎲上传文件是钓鱼图片或为包含了脚本的图片,在某些版本的浏览器中会被作为脚本执行,被用于钓鱼
和欺诈
。除此之外,还有一些不常见的利用方法,比如将上传文件作为一个入口,溢出服务器
的后台处理程序,如图片解析模块;或者上传一个合法的文本文件,其内容包含了PHP脚本
,再通过"本地文件包含漏洞(Local File Include
)"执行此脚本
🎃漏洞利用
文件上传漏洞利用条件:
(1)能够成功上传木马。
(2)上传的木马能够被web容器解析执行,所以上传路径要在web容器覆盖范围内。
(3)用户能够访问上传的木马,所以得知道上传的木马准确路径。
将一句话木马上传至服务器,并能成功访问。(页面空白访问成功)
通过hackbar对变量a进行传值,即可完成服务端命令执行。
还可以执行系统命令。
此外,还可以配合如菜刀,蚁剑等工具使用。
打开蚁剑,选择添加数据。
输入好参数后测试连接,然后添加。
🍀文件类型检测绕过
-
❄️ 更改请求绕过
有的站点仅仅在前端检测
了文件类型,这种类型的检测可以直接修改网络请求绕过
同样的,有的站点在后端仅检查了HTTP Header中的信息
比如 Content-Type
等,这种检查同样可以通过修改网络请求绕过
-
🎯 Magic检测绕过
有的站点使用文件头来检测文件类型,这种检查可以在Shell
前加入对应的字节以绕过检查。几种常见的文件类型的头字节如下表所示
类型 | 二进制值 |
---|---|
JPG | FF D8 FF E0 00 10 4A 46 49 46 |
GIF | 47 49 46 38 39 61 |
PNG | 89 50 4E 47 |
TIF | 49 49 2A 00 |
BMP | 42 4D |
-
🎯 后缀绕过
部分服务仅根据后缀、上传时的信息或Magic Header
来判断文件类型,此时可以绕过。
php由于历史原因,部分解释器可能支持符合正则 /ph(p[2-7]?|t(ml)?)/
的后缀,如 php
/ php5
/ pht
/ phtml
/ shtml
/ pwml
/ phtm
等 可在禁止上传php文件时测试该类型。
jsp引擎则可能会解析 jspx
/ jspf
/ jspa
/ jsw
/ jsv
/ jtml
等后缀,asp支持 asa
/ asax
/ cer
/ cdx
/ aspx
/ ascx
/ ashx
/ asmx
/ asp{80-90}
等后缀。
除了这些绕过,其他的后缀同样可能带来问题,如 vbs
/ asis
/ sh
/ reg
/ cgi
/ exe
/ dll
/ com
/bat
/ pl
/ cfc
/ cfm
/ ini
等。
-
🌽 系统命名绕过
在Windows系统中,上传 index.ph.
会重命名为 .
,可以绕过后缀检查。也可尝试 index.php%20
, index.php:1.jpg
index.php::$DATA
等。在Linux系统中,可以尝试上传名为 index.php/.
或 ./aa/../index.php/.
的文件
-
🍜.user.ini
在php执行的过程中,除了主 php.ini
之外,PHP 还会在每个目录下扫描 INI 文件,从被执行的 PHP 文件所在目录开始一直上升到 web 根目录($_SERVER['DOCUMENT_ROOT'] 所指定的)
。如果被执行的 PHP 文件在 web 根目录之外,则只扫描该目录。.user.ini
中可以定义除了PHP_INI_SYSTEM
以外的模式的选项,故可以使用 .user.ini
加上非php后缀的文件构造一个shell,比如 auto_prepend_file=01.gif
。
-
🚸 WAF绕过
有的waf在编写过程中考虑到性能原因,只处理一部分数据,这时可以通过加入大量垃圾数据来绕过其处理函数。
另外,Waf和Web系统对 boundary
的处理不一致,可以使用错误的 boundary
来完成绕过。
-
🍀 竞争上传绕过
有的服务器采用了先保存,再删除不合法文件的方式,在这种服务器中,可以反复上传一个会生成Web Shell的文件并尝试访问,多次之后即可获得Shell。
🎲 攻击技巧
-
🐼 Apache重写GetShell
Apache可根据是否允许重定向考虑上传.htaccess
内容为
AddType application/x-httpd-php .png
php_flag engine 1
之后就可以用png或者其他后缀的文件做php脚本了
-
🐼 软链接任意读文件
上传的压缩包文件会被解压的文件时,可以考虑上传含符号链接的文件若服务器没有做好防护,可实现任意文件读取的效果
-
🐼 防护技巧
使用白名单限制上传文件的类型
使用更严格的文件类型检查方式
限制Web Server对上传文件夹的解析
后端验证:采用服务端验证模式
后缀检测:基于黑名单,白名单过滤
MIME 检测:基于上传自带类型检测
内容检测:文件头,完整性检测
自带函数过滤:参考 uploadlabs 函数
自定义函数过滤:function check_file(){}
WAF 防护产品:宝塔,云盾,安全公司产品等
-
🐼 参考链接
构造优质上传漏洞Fuzz字典
https://www.freebuf.com/articles/web/188464.html
更多文章 关注我们
原文始发于微信公众号(猫因的安全):文件上传漏洞一点小心得
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论