upload-labs上传漏洞记录

本文记录了upload-labs靶场的多个关卡,涉及上传漏洞的多种绕过方法,如白名单验证、黑名单绕过、.htaccess解析、大小写绕过、%00截断等,通过代码审计和利用文件包含漏洞展示了攻击者可能的攻击路径,对于理解Web安全具有实践意义。
摘要由CSDN通过智能技术生成

upload是一个包含有各种上传漏洞的靶场,搭建十分简单,适合我们进行练习。

温馨提示:如果测试文件命名相同,请及时清理上传文件
目前更新到第13关,后续慢慢更新,欢迎关注~

下载地址:https://github.com/c0ny1/upload-labs

在这里插入图片描述


pass-01

这一关有三个思路

  • 关闭js
    查看源码,可以看到判断文件类型的函数写在了前端页面,可以直接选择浏览器直接禁用js,但是如果js里包含其他正常功能,效果适得其反,并且判断函数写在前端页面的情况很少
    在这里插入图片描述
  • burp抓包,修改文件类型
    随意上传一张图片,抓到包后,修改文件类型为php,在数据部分写上<?php phpinfo();?>
    在这里插入图片描述
    上传成功
    在这里插入图片描述访问ip/upload-labs/upload/2.php,成功
    在这里插入图片描述
  • 修改源代码,进行本地访问
    右键查看页面源代码并copy,删除判断文件类型的那段js代码
    在这里插入图片描述然后添加action=“http://xxx.xxx.xxx.xxx/upload-labs/Pass-01/index.php”,因为如果我们直接打开它,是运行在本地的,本地没有之前的访问地址,没法上传文件。可以正常上传一张图片,查看一下地址
    在这里插入图片描述在这里插入图片描述双击打开,页面如下图所示
    在这里插入图片描述就可以直接上传php,显示成功上传,访问http://xxx.xxx.xxx.xxx/upload-labs/upload/test.php,同样得到
    在这里插入图片描述据说浏览器也可以直接修改前端页面,但我没有试过,大家可以尝试一下。

pass-02:白名单验证

首先看一下源码

$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
   
    if (file_exists(UPLOAD_PATH)) {
   
        if (($_FILES['upload_file']['type'] == 'image/jpeg') || ($_FILES['upload_file']['type'] == 'image/png') || ($_FILES['upload_file']['type'] == 'image/gif')) {
   
            $temp_file = $_FILES['upload_file']['tmp_name'];
            $img_path = UPLOAD_PATH . '/' . $_FILES['upload_file']['name']            
            if (move_uploaded_file($temp_file, $img_path)) {
   
                $is_upload = true;
            } else {
   
                $msg = '上传出错!';
            }
        } else {
   
            $msg = '文件类型不正确,请重新上传!';
        }
    } else {
   
        $msg = UPLOAD_PATH.'文件夹不存在,请手工创建!';
    }
}

可以很清楚地看到在第三个if处,只允许JPEG、PNG和GIF,这是一个很明显的白名单验证
先随意上传一个文件,抓包
在这里插入图片描述可以看到,此时的Content-Type不是允许的类型,我们修改为image/jpeg(改成另外两个也可以),上传成功
访问http://xxx.xxx.xxx.xxx/upload-labs/upload/test.php,得到信息

Content-Type(内容类型),一般是指网页中存在的 Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件,这就是经常看到一些 PHP 网页点击的结果却是下载一个文件或一张图片的原因。
Content-Type 标头告诉客户端实际返回的内容的内容类型。
菜鸟教程:content-type


pass-03:黑名单绕过

查看源码

$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
   
    if (file_exists(UPLOAD_PATH)) {
   
        $deny_ext = array('.asp','.aspx','.php','.jsp');
        $file_name = trim($_FILES['upload_file']['name']);
        $file_name = deldot($file_name);//删除文件名末尾的点
        $file_ext = strrchr($file_name, '.');
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值