文件上传漏洞 File Upload
⽂件上传是Web 应⽤必备功能之⼀。
如果服务器配置不当或者没有进⾏⾜够的过滤,Web ⽤户就可以上传任意⽂件,包括恶意脚本⽂件,exe 程序等等,这就造成了⽂件上传漏洞。
漏洞的成因
- 服务器配置不当
- Web应用开放了文件上传功能,没有对上传的文件做足够的限制和过滤。
- 在程序开发部署时,没有考虑到系统的特性或组件的漏洞,而导致限制被绕过。
漏洞危害
- 上传漏洞最直接的威胁就是上传任意文件,包括恶意脚本,程序等。
- 直接上传后门文件,导致网站沦陷。
- 通过恶意文件,利用其他楼栋拿到管理员权限(提权),导致服务器沦陷。
- 通过文件上传漏洞获得网站后门,叫Webshell
安全等级LOW
源码分析
低难度级别可以任意文件上传没有做任何安全过滤。我们可以直接上传木马一句话,利用冰蝎连接。
冰歇
概述
- 冰蝎是一款基于Java开发的动态加密通信流量的新型Webshell客户端。老牌 Webshell 管理神器——中国菜刀的攻击流量特征明显,容易被各类安全设备检测,实际场景中越来越少使用,加密 Webshell 正变得日趋流行。由于通信流量被加密,传统的 WAF、IDS 设备难以检测,给威胁狩猎带来较大挑战。冰蝎其最大特点就是对交互流量进行对称加密,且加密秘钥是由随机数函数动态生成,因此该客户端的流量几乎无法检测
- 官网地址为:https://github.com/rebeyond/Behinder
- 运行环境:
- 客户端:jre8+
- 服务端:.net 2.0+;php 5.3-7.4;java 6+
安装
- 本地windwos启动客户端
1 | D:\exe\Behinder_v3.0_Beta_11.t00ls>java -jar Behinder.jar |
开始攻击
- 上传木马文件,其实就是冰蝎server中带有的shell.php文件
- 比如
<?php @eval($_POST['123']);?>
就是典型的一句话木马,这里的123为自定义密码
- 比如
- 查看服务器成功上传成功的文件
1 | [root@VM-24-13-centos uploads]# pwd |
- 冰歇连接,注意默认密码就是rebeyond
- 双击刚刚新增的url,自动弹出连接成功的界面(需要等几秒钟,才会出结果)
- 无论是执行shell命令,还是管理文件,基本上服务器行的信息全部暴露无遗
安全等级为medium
- 直接上传木马文件shell.php,报错了
源码分析
对文件上传类型和文件大小做了限制
开始攻击
先把服务器上的shell.php文件删除
1 | [root@VM-24-13-centos uploads]# rm shell.php |
上传木马shell文件
burp site 拦截上传请求
把content-type修改为image/jpeg
点击拦截请求,把状态改为禁用
发现文件上传成功
服务器上查看到刚刚上传成功的文件
1 |
|
用冰歇同样连接成功
安定等级为High
注意,本次攻击失败,但是也把攻击步骤写下来
源码分析
对文件后缀进行白名单验证,所以我们只能进行图片jpg png的上传
中国菜刀
菜刀和冰歇差不多的工具
现在最新的是2016的版本,这里下载:https://github.com/raddyfiy/caidao-official-version/releases/tag/NULL
- 使用copy命令的方式,写一个图片木马文件
- 1.bat中的文件内容就是copy命令
1 | copy 1.jpg/b+1.php/a 3.jpg |
- 1.php中的内容,注意777是密码
1 |
|
- 运行1.bat生成了3.jpg文件
- 上传3.jpg文件
用文件包含的方式访问刚刚上传的图片,发现了乱码
http:/xx.xx.xx.xx/DVWA-2.0.1/vulnerabilities/fi/?page=file:////var/www/html/DVWA-2.0.1/hackable/uploads/3.jpg
- 使用菜刀连接,发现一直无法得到webshell,最终发现原来这样访问肯定不行,因为没有登录,这样直接访问跳转到了登录界面,很多博文都是这样记录的,有点奇怪
安全等级为Impossible
源码分析
这里分析一下 Impossible级别的代码,对上传文件进行了重命名(为md5值,导致%00截断无法绕过过滤规则),加入Anti-CSRF token防护CSRF攻击,同时对文件的内容作了严格的检查,导致攻击者无法上传含有恶意脚本的文件。
本文主要参考的来自这里