一、文件上传漏洞
1.1 文件上传漏洞概述
文件上传是web应用程序常见的一种功能,通过文件上传功能用户可以上传图片、视频以及其他类型的文件到web应用服务器或者数据库,但是随着web中包含的功能越来越多,文件上传的存在的风险也越来越大。
如果用户上传了恶意的可执行文件或者脚本,就有可能导致网站被控制或者服务器沦陷,以至于引发网络安全事件。
1.2 文件上传漏洞的原理
漏洞的原理在于,应用程序未正确验证和限制用户上传的文件类型、大小和内容,或者未对上传的文件进行充分的检查和过滤。攻击者利用这个漏洞,可能会上传各种类型的恶意文件,如:
可执行文件:例如恶意脚本、木马、后门程序,允许攻击者在服务器上执行任意代码。
Web Shell:用于在服务器上执行命令并获取控制权的恶意脚本。
恶意文档:包含宏病毒的文档,可能感染用户系统并传播恶意代码。
恶意图片:利用图片解析漏洞进行攻击,例如通过包含恶意脚本的图片进行跨站脚本攻击(XSS)。
伪装文件:攻击者可能上传伪装成其他类型文件的恶意文件,绕过安全检查。
1.3 文件上传的思路
1.3.1.常规类
- 扫描获取上传
- 会员中心头像上
- 后台系统上传
- 其他途径上传
1.3.2.cms类
- 已知道的cms源码的上传漏洞
1.3.3.编辑类
- ckeditor
- fckeditor
- kindeditor
- xxxxeditor。
1.3.4.其他类/CVE
- 代码审计
- 平台或第三方应用
1.4 web界面存在的风险点
上传头像、上传身份认证、上传文件以及有存在文件上传的地方就可能存在相关的漏洞,但不是有文件上传就一定有漏洞,但有文件上传就能进行测试。
1.5 文件上传的实战思路
上传文件和文件执行是两个东西
漏洞分类:解析漏洞、cms漏洞、其他漏洞(编辑器漏洞、cve漏洞、安全修复)
思路:
如果有一个网站,要从文件上传的方向开始
第一步:先看中间件,看是否存在解析漏洞/CMS/编辑器漏洞/CVE/
如果有,如何找:
字典扫描:扫描会员中心,文件上传的位置
找到后,如何利用:
验证/绕过
二、文件上传绕过分类
2.1 JS前端验证防护
示例:upload-labs第一关
方法1:
- 我们发现当我们向上传一个
*.txt
文档时web页面提示我们文件类型不允许,还提示我们上传.jpg/.png/.gif格式的文件,文件类型的检测点在哪里呢?
点击
f12
查看网页源码发现了下面的js函数:可以判定类型判断就在Js函数里面,下面我们想办法绕过它!1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19function checkFile() {
//获取文件
var file = document.getElementsByName('upload_file')[0].value;
//检查文件是否为空
if (file == null || file == "") {
alert("请选择要上传的文件!");
return false;
}
//定义允许上传的文件类型
var allow_ext = ".jpg|.png|.gif";
//提取上传文件的类型 从最后一个‘.’截断,判断后缀名
var ext_name = file.substring(file.lastIndexOf("."));
//判断上传文件类型是否允许上传
if (allow_ext.indexOf(ext_name) == -1) {
var errMsg = "该文件不允许上传,请上传" + allow_ext + "类型的文件,当前文件类型为:" + ext_name;
alert(errMsg);
return false;
}
}既然它在前端不让我们上传.php文件,那我们暂且满足它的要求,上传一个.jpg后缀的文件(文件内容是Php一句话木马),然后对上传进行抓包,在抓取的数据包中修改文件的后缀名为.php 。发送数据包
此时文件已经上传成功了。我们尝试使用蚁剑连接,但是到目前为止我们一直是黑盒测试,并不知道我们上传的文件的后台具体位置,暂时无法填写蚁剑的URL地址,所以无法连接。正常情况下要对网站进行目录扫描,找到可以的上传点。但是此处upload环境比较简单,所以直接人工遍历,最后发现在网站根目录下有一个inlcude目录,我们猜测上传的文件会到这个文件夹。
使用蚁剑连接成功!
方法2
打开浏览器的开发者选项,勾选禁用JavaScript,这样也可以使前端的验证失效,此时直接上传webshell.php即可
2.2 服务端黑名单检测
参考文章:
1.https://blog.csdn.net/weixin_44268918/article/details/128074253