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

前言:

我们还是学习Upload-labs靶场。

正文:

第十一关(双写绕过黑名单)

查看一下源代码:

if (isset($_POST['submit'])) {
    if (file_exists(UPLOAD_PATH)) {
    	//黑名单
        $deny_ext = array("php","php5","php4","php3","php2","html","htm","phtml","pht","jsp","jspa","jspx","jsw","jsv","jspf","jtml","asp","aspx","asa","asax","ascx","ashx","asmx","cer","swf","htaccess","ini");
		//读取上传的文件的名字
        $file_name = trim($_FILES['upload_file']['name']);
        //如果上传文件的名字有黑名单的内容,就使用空格代替黑名单里面的内容
        $file_name = str_ireplace($deny_ext,"", $file_name);
        $temp_file = $_FILES['upload_file']['tmp_name'];
        $img_path = UPLOAD_PATH.'/'.$file_name;    

这个适合,我们可以尝试一下双写绕过

在这里插入图片描述
上传成功
在这里插入图片描述

文件名也对。
在这里插入图片描述

第十二关(白名单 %00截断)

这个属于白名单绕过,这是php语言自身的问题,php低版本存在的漏洞。查看一下源代码。

if(isset($_POST['submit'])){
    //设置一下白名单
    $ext_arr = array('jpg','png','gif');
    //取出的上传文件的后缀
    $file_ext = substr($_FILES['upload_file']['name'],strrpos($_FILES['upload_file']['name'],".")+1);
    //如果后缀在白名单中,就开始重新命名
    if(in_array($file_ext,$ext_arr)){
        //分析代码,这是以时间戳的方式对上传文件进行命名,
        $temp_file = $_FILES['upload_file']['tmp_name'];
        $img_path = $_GET['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;

        if(move_uploaded_file($temp_file,$img_path)){
            $is_upload = true;
        } else {
            $msg = '上传出错!';
        }
    } 
    //如果后缀不在白名单中,就报错
    else{
        $msg = "只允许上传.jpg|.png|.gif类型文件!";
    }
}

使用上传路径名%00截断绕过,不过这需要对文件有足够的权限,比如说创建文件夹,上传的文件名写成1.jpg(这个随便写,后面的路径相当于对文件进行重命名), save_path改成…/upload/kun12343.php%00 (kun12343.php%00.jpg经过url转码后会变为kun12343.php\000.jpg),最后保存下来的文件就是kun12343.php

前提:

%00截断的限制条件是PHP<5.3.29,且GPC关闭
因为当 magic_quotes_gpc 打开时,所有的 ’(单引号), "(双引号),(反斜线) and  空字符会自动转为含有反斜线的转义字符。
magic_quotes_gpc 着重偏向数据库方面,是为了防止sql注入,
但magic_quotes_gpc开启还会对 $_REQUEST,GET ,_GET,GET,POST,$COOKIE 输入的内容进行过滤

上传一个一句话木马,

在这里插入图片描述

上传成功

在这里插入图片描述

第十三关(白名单 0x00截断)

这个代码和上一关代码类似

if(isset($_POST['submit'])){
    $ext_arr = array('jpg','png','gif');
    $file_ext = substr($_FILES['upload_file']['name'],strrpos($_FILES['upload_file']['name'],".")+1);
    if(in_array($file_ext,$ext_arr)){
        $temp_file = $_FILES['upload_file']['tmp_name'];
        $img_path = $_POST['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;

        if(move_uploaded_file($temp_file,$img_path)){
            $is_upload = true;
        } else {
            $msg = "上传失败";
        }
    } else {
        $msg = "只允许上传.jpg|.png|.gif类型文件!";
    }
}

我们试一下

在这里插入图片描述
我们看到 ,路径不在url中了,我们使用0x00
在这里插入图片描述
将upload后面加上kun12343.php加空格,名字改成jpg格式。点击十六进制,找到我们留的一个空格,将空格改成00

在这里插入图片描述
如下:

在这里插入图片描述
点击发送
在这里插入图片描述
成功上传

第十四关(绕过文件头检查)

将文件头改成GIF的文件头
在这里插入图片描述
成功绕过
在这里插入图片描述

第十五关(getimagesize())

我们上传kun12343.php,抓包,将Content-Type修改为:image/jpeg。在请求内容开头加上GIF89A点击发送
在这里插入图片描述
上传成功。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

我能突破限制.

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

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

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

打赏作者

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

抵扣说明:

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

余额充值