THIS IS B3c0me

记录生活中的点点滴滴

0%

Upload-Labs

一、文件上传漏洞

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格式的文件,文件类型的检测点在哪里呢?

image-20230905200418048

  • 点击f12查看网页源码发现了下面的js函数:可以判定类型判断就在Js函数里面,下面我们想办法绕过它!

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    function 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 。发送数据包

image-20230905203454335

  • 此时文件已经上传成功了。我们尝试使用蚁剑连接,但是到目前为止我们一直是黑盒测试,并不知道我们上传的文件的后台具体位置,暂时无法填写蚁剑的URL地址,所以无法连接。正常情况下要对网站进行目录扫描,找到可以的上传点。但是此处upload环境比较简单,所以直接人工遍历,最后发现在网站根目录下有一个inlcude目录,我们猜测上传的文件会到这个文件夹。

    image-20230905205103156

  • 使用蚁剑连接成功!

    image-20230905205220656

方法2

打开浏览器的开发者选项,勾选禁用JavaScript,这样也可以使前端的验证失效,此时直接上传webshell.php即可

2.2 服务端黑名单检测

参考文章:

1.https://blog.csdn.net/weixin_44268918/article/details/128074253

2.https://jay1an.github.io/2023/08/03/upload-labs/

欢迎关注我的其它发布渠道