【靶场】upload-labs-文件上传漏洞闯关

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


前言

上传文件的时候,如果服务器端脚本语言,未对上传的文件进行严格的验证和过滤,就有可能上传恶意的脚本文件,从而控制整个网站,甚至是服务器。
搭建了一个upload-labs靶场用来学习文件上传漏洞漏洞一共20关

1.第一关

在这里插入图片描述

看一下源码,在前端有校验,试试修改前端页面试试
在这里插入图片描述

1.保存html页面

ctrl+S把页面保存,修改前端代码
在这里插入图片描述

2.修改页面html

修改校验
在这里插入图片描述
将form的action地址写为第一关的地址

http://localhost/Pass-01/index.php

在这里插入图片描述
修改action
在这里插入图片描述

3.访问修改后的本地html文件

在这里插入图片描述

4.上传php文件

php文件内容
在这里插入图片描述

在这里插入图片描述

点击上传之后,地址变为了第一关地址,而且文件上传成功
在这里插入图片描述

5.访问上传的php

在这里插入图片描述

2.第二关

在这里插入图片描述
试了第一关的方法,校验方法没有写在html中,第一关方法用不了,看看源码,打算试试bp抓包

1.抓上传包修改文件类型 image/jpeg

在这里插入图片描述

2.上传成功

在这里插入图片描述

3.第三关

在这里插入图片描述
在这里插入图片描述

1.phtml php3会被解析为php

原理

apache服务器解析漏洞,会把phtml,php3类型解析为php
在这里插入图片描述

2.上传成功

在这里插入图片描述

4.第4关(黑名单验证 htaccess)

在这里插入图片描述

原理

使用.htaccess(超文本访问),是许多Web服务器根据目录应用设置的有用文件,允许在运行时覆盖Apache的默认设置。使用.htaccess,可以在运行时轻松启用或禁用任何功能。

1.新建.htaccess

在这里插入图片描述

它的作用是:强制将 loudong.jpg 文件当作 PHP 脚本解析并执行,即使它的扩展名是 .jpg。
在这里插入图片描述

2.将要上传的php文件拓展名改为loudong.jpg

在这里插入图片描述
名称要和.htaccess中的FilesMatch一样

3.上传两个文件

将两个文件都上传
上传.htaccess
在这里插入图片描述
上传loudong.php
在这里插入图片描述

4.上传成功

在这里插入图片描述

5.第5关(大小写绕过)

将第4关源码和第5关源码进行比较
在这里插入图片描述
发现第5关未将拓展名转为小写,直接和黑名单校验了,黑名单只有小写的,,那么就把上传文件拓展名大写,就能绕过了
在这里插入图片描述

1.php修改为PHP

直接改文件名,或者抓包修改文件名
在这里插入图片描述

2.上传成功

在这里插入图片描述

6.第6关(末尾空格)

第4关代码:
在这里插入图片描述
第6关代码:
在这里插入图片描述
两个比较发现少了拓展名首尾去空 那么在文件拓展名后面加上空格就可绕过

1.抓包,文件名加空格

在这里插入图片描述

2.上传成功

在这里插入图片描述

7.第7关(增加一个.)

第4关:
在这里插入图片描述

第7关:
在这里插入图片描述

少了删除文件末尾的”.“,那么修改文件名加个“。",应该能绕过

原理

Apache 的 AcceptPathInfo 默认行为:
如果请求路径包含冗余字符(如 /13.php.),Apache 仍会尝试解析 .php 部分。

PHP 的文件处理:
PHP 在接收文件路径时,会调用系统 API,而 Windows API 会忽略末尾的点,导致 13.php. 被当作 13.php 执行。

1.抓包,文件名加"."

在这里插入图片描述

2.成功上传

在这里插入图片描述

8.第8关

第4关
在这里插入图片描述

第8关
在这里插入图片描述
没有去除字符串:: D A T A ,文件名加上 : : DATA,文件名加上:: DATA,文件名加上::DATA

原理

windows会自动去掉末尾的"::$DATA"

1.抓包,文件加::$DATA

在这里插入图片描述

2.上传成功

在这里插入图片描述

9.第9关(代码不严谨)

在这里插入图片描述

原理

deldot从字符串的尾部开始,从后向前删除点.,知道该字符串的末尾字符不是.为止,而如果中间有个空格,就不会继续删除。

1.抓包 文件名加". ."

在这里插入图片描述

2.上传成功

在这里插入图片描述

10.第10关(PPHPHP)

在这里插入图片描述

原理

str_ireplace 函数用于字符串替换操作,不区分大小写,会把拓展名中的php替换为空所以改为pphphp

1.抓包 ,改为.pphphp

在这里插入图片描述

2.成功上传

在这里插入图片描述

11.第11关(0x00 截断)

在这里插入图片描述

原理

在这里插入图片描述

00 截断是操作系统层的漏洞。操作系统在识别字符串时,当读取到\0 字符时,就认为读取到了一个字符串的结束符号。因此,我们可以通过修改数据包,插入\0 字符的方式,达到字符串截断的目的。
save_path=…/upload/
filename=“loudong.jpg”
正常情况:…/upload/loudong.jpg
修改:
save_path=…/upload/13.php%00
filename=“loudong.jpg” 拼接的路径为:…/upload/13.php%00loudong.jpg :由于%00 当作结尾,故最终保存的文件
为…/upload/1.php

关键的代码在于这里的’save_path 是一个可控的变量,但是后面还拼接上一个后缀名,也需要绕过,

1.修改文件类型,把php改为jpg

在这里插入图片描述

2.抓包,sava_path修改为/13.php%00

在这里插入图片描述

在这里插入图片描述

3.上传成功

在这里插入图片描述

12.第12关(Post 0x00 截断)

在这里插入图片描述

原理

和上面一题代码对比,这里使用的是 Post 方式
但和 get 对比,需要多做一次解码的工作
GET 型提交的内容会被自动进行 URL 解码,在 POST 请求中,%00 不会被自动解

1.抓包,修改为/13.php%00

在这里插入图片描述
在这里插入图片描述

2.把%00转码

在这里插入图片描述

3.上传成功

在这里插入图片描述

13.第13关(jpg图片木马)

在这里插入图片描述

function getReailFileType($filename){
   
    $file = fopen($filename, "rb");
    $bin = fread($file, 2); //只读2字节
    fclose($file);
    $strInfo = @unpack("C2chars", $bin);    
    $typeCode = intval($strInfo['chars1'].$strInfo['chars2']);    
    $fileType = '';    
    switch($typeCode){
         
        case 255216:            
            $fileType = 'jpg';
            break;
        case 13780:            
            $fileType = 'png';
            break;        
        case 7173:            
            $fileType = 'gif';
            break;
        default:            
            $fileType = 'unknown';
        }    
        return $fileType;
}

$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){
   
    $temp_file = $_FILES['upload_file']['tmp_name'];
    $file_type = getReailFileType($temp_file);

    if($file_type == 'unknown'){
   
        $msg = "文件未知,上传失败!";
    }else{
   
        $img_path = UPLOAD_PATH."/".rand(10, 99).date("YmdHis").".".$file_type;
        if(move_uploaded_file($temp_file,$img_path)){
   
            $is_upload = true;
        } else {
   
            $msg = "上传出错!";
        }
    }
}

会验证上传内容,确认是图片格式,所以不能简单把 php 转化为 jpg,需要使用图片木马,需要在正常图片里面加入恶意代码

1.将图片和php木马融合,生生成.jpg图片木马

copy 1.png /b + 13.php /a webshell.jpg

2.上传成功

在这里插入图片描述

3.访问木马

上传的是个图片,需要使用文件包含漏洞来把图片当作代码来执行
在这里插入图片描述

14.第14关(png图片木马)

在这里插入图片描述

function isImage($filename)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

脆皮瞎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值