IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> 打靶归来 - 详解upload-labs靶场(下) -> 正文阅读

[PHP知识库]打靶归来 - 详解upload-labs靶场(下)

一、环境准备

① - 靶场的搭建

  • 下载地址:upload-labs
  • upload-labs靶场曾有过一次更新,更新新添加了一道Pass-05,有一些以前的教程的题号与这篇教程不符合,请各位自行分辨
  • 本篇作者所用到的PHP版本为5.4.45(之前更改设置忘记调回来了,后面用的都是5.2.17,但是5.4.15亲测可用),只有在做部分题目时需要修改
  • Pass16需要打开php.ini中的php_exif模块

注意:更改配置之后记得重启服务器

② - 准备webshell

  1. 测试用webshell
# shell.php → 测试所用的phpinfo
<?php phpinfo(); ?>
  1. 图片马的制作
  1. 准备工作:准备好.jpg / .png / .gif 三种类型的图片,图片大小越小越好,推荐使用截图工具的截图;准备好webshell文件,将图片与文件放到一个目录下
  2. 在cmd下执行:copy 01.png/b + test.php/a shell.png
    [01.png 为图片,大小不宜过大 | test.php为webshell | shell.png为生成的图片马文件]
    在这里插入图片描述

③ - 说明

  1. Pass1 ~ Pass13 见打靶归来 - 详解upload-labs靶场(上)
  2. 确认webshell上传成功的演示在上篇做了说明,这里就不再赘述
  3. Pass14 ~ Pass17的图片马我们将各挑选一种来做演示,不会三种后缀都上传一遍
  4. Pass14 ~ Pass17使用的文件包含漏洞的简单介绍:只要被包含的文件符合php语法,无关该文件的后缀类型,都会当作php代码执行。这就导致了我们可以上传任意类型的webshell,所以我们可以上传图片马作为webshell,不用考虑后缀问题
  5. Pass17需要用到的Hex编辑器下载 —— 网盘链接 【提取码:8888】

二、题解

【Pass14 - 利用添加gif图片的文件幻数绕过】

题目:
在这里插入图片描述


绕过方法:

  1. 可以给webshell添加文件幻数(文件开头2个字节)绕过
  2. 可以上传图片马绕过。

因为Pass15和Pass16我们是使用图片马绕过,这一题我们使用第一种方法尝试,我们以较为简单的gif图为例(有兴趣的朋友们可以去试试其它的文件格式),步骤:在原有webshell代码前添加字符串GIF89a
在这里插入图片描述

第一步:上传webshell
在这里插入图片描述

可以看到,webshell被自动识别为了gif文件

第二步:利用文件包含漏洞访问图片马

在这里插入图片描述

【Pass15 - 利用png图片马绕过】

题目:
在这里插入图片描述


绕过方法:

上传图片马绕过

第一步:上传图片马
在这里插入图片描述

第二步:使用利用文件包含漏洞访问图片马

在这里插入图片描述

Pass16 - 利用jpg图片马绕过】

题目:
别忘记打开php_exif模块
在这里插入图片描述


绕过方法:

上传图片马绕过

第一步:上传图片马
在这里插入图片描述

第二步:使用利用文件包含漏洞访问图片马

在这里插入图片描述

【Pass17 - 二次渲染绕过】

题目:

# 使用二次渲染过滤
$is_upload = false;
$msg = null;
if (isset($_POST['submit'])){
    // 获得上传文件的基本信息,文件名,类型,大小,临时文件路径
    $filename = $_FILES['upload_file']['name'];
    $filetype = $_FILES['upload_file']['type'];
    $tmpname = $_FILES['upload_file']['tmp_name'];

    $target_path=UPLOAD_PATH.'/'.basename($filename);

    // 获得上传文件的扩展名
    $fileext= substr(strrchr($filename,"."),1);

    //判断文件后缀与类型,合法才进行上传操作
    if(($fileext == "jpg") && ($filetype=="image/jpeg")){
        if(move_uploaded_file($tmpname,$target_path)){
            //使用上传的图片生成新的图片
            $im = imagecreatefromjpeg($target_path);

            if($im == false){
                $msg = "该文件不是jpg格式的图片!";
                @unlink($target_path);
            }else{
                //给新图片指定文件名
                srand(time());
                $newfilename = strval(rand()).".jpg";
                //显示二次渲染后的图片(使用用户上传图片生成的新图片)
                $img_path = UPLOAD_PATH.'/'.$newfilename;
                imagejpeg($im,$img_path);
                @unlink($target_path);
                $is_upload = true;
            }
        } else {
            $msg = "上传出错!";
        }

    }else if(($fileext == "png") && ($filetype=="image/png")){
        if(move_uploaded_file($tmpname,$target_path)){
            //使用上传的图片生成新的图片
            $im = imagecreatefrompng($target_path);

            if($im == false){
                $msg = "该文件不是png格式的图片!";
                @unlink($target_path);
            }else{
                 //给新图片指定文件名
                srand(time());
                $newfilename = strval(rand()).".png";
                //显示二次渲染后的图片(使用用户上传图片生成的新图片)
                $img_path = UPLOAD_PATH.'/'.$newfilename;
                imagepng($im,$img_path);

                @unlink($target_path);
                $is_upload = true;               
            }
        } else {
            $msg = "上传出错!";
        }

    }else if(($fileext == "gif") && ($filetype=="image/gif")){
        if(move_uploaded_file($tmpname,$target_path)){
            //使用上传的图片生成新的图片
            $im = imagecreatefromgif($target_path);
            if($im == false){
                $msg = "该文件不是gif格式的图片!";
                @unlink($target_path);
            }else{
                //给新图片指定文件名
                srand(time());
                $newfilename = strval(rand()).".gif";
                //显示二次渲染后的图片(使用用户上传图片生成的新图片)
                $img_path = UPLOAD_PATH.'/'.$newfilename;
                imagegif($im,$img_path);

                @unlink($target_path);
                $is_upload = true;
            }
        } else {
            $msg = "上传出错!";
        }
    }else{
        $msg = "只允许上传后缀为.jpg|.png|.gif的图片文件!";
    }
}

绕过方法:

具体方法可以参考这篇文章
这里作者使用文章中介绍的GIF绕过方法进行打靶,其它方法比较麻烦,想玩玩的朋友们可以自行尝试

第一步:上传一个gif图片马,上传之后,将网站回显的图片下载下来进行比较
在这里插入图片描述
发现少了一堆的数据,很不幸,写入的webshell被删了
第二步:找一个数据没有被更改的地方插入webshell代码
在这里插入图片描述

如果显示不为gif图片,则需要重新挑选一个位置插入webshell

第三步:上传图片马,并测试是否成功
在这里插入图片描述
在这里插入图片描述
作者用到的Hex编辑器的下载链接在文章开头有介绍

【Pass18 - 条件竞争绕过文件删除】

题目:
在这里插入图片描述
绕过方法:

根据题目可知,此操作是先将文件移动至目录,再判定是否符合上传规范,若不符合则删除文件。我们可以利用php代码生成新的webshell文件,再利用条件竞争1在上传的文件未被删除之前访问它,则可以添加webshell文件至服务器

第一步:制作创建webshell的代码

# 若上传一句话木马,需要特别注意引号的问题:写入数据的时候需要使用单引号包裹,因为使用双引号会解析里面的$变量
<?php
  fputs(fopen('shell.php','w'), '<?php phpinfo(); ?>');
?>

第二步:利用Burp的爆破模块制造条件竞争访问创建webshell的代码

  1. 抓取上传文件的包,并通过爆破模块进行持续无字典爆破2
  2. 由源码可知,上传的文件不会被重命名。我们可以访问该文件(可以任意上传一个图片,找到保存的位置),并抓包,然后爆破模块进行持续无字典爆破
    在这里插入图片描述

访问文件的爆破模块出现长度不同的返回包即可停止爆破,查看包的内容
在这里插入图片描述

由返回包可知访问成功

第三步:访问创建的webshell代码
在这里插入图片描述

【Pass19 - apache的后缀名识别漏洞 + 条件竞争绕过重命名】

题目:
在这里插入图片描述
绕过方法:

绕过白名单过滤:利用apache的后缀名识别漏洞 —— 从右往左依次识别后缀,遇到不能识别的后缀名便跳过 ,因此可以文件名改为create.php.7z.7z这个后缀apache不能识别)


绕过重命名(因为重命名会把shell.php重命名为其它的字符串,导致后缀名识别漏洞不可用):利用条件竞争绕过

只需要对添加了.7z后缀的文件进行条件竞争绕过即可,步骤与Pass18一致,这里就不做演示

【Pass20 - ./绕过黑名单检测】

题目:
在这里插入图片描述

绕过方法:

就是一个很简单的一个绕过黑名单检测,不明白为什么会放到Pass20来。只需要修改POST传参中的save_name参数即可,点绕过、大小写绕过啥的都可以

在这里插入图片描述
为了弄清楚这一题的考点,我去看了其它的靶场教程,发现是考move_uploaded_file()会忽略掉文件末尾的/.,也就是将save_name的参数改为shell.php/.,亲测有效,应该是黑名单检测补充的一个新方法,这种方法没有系统的限制
在这里插入图片描述

【Pass21 - /.绕过白名单检测】

题目:

$is_upload = false;
$msg = null;
if(!empty($_FILES['upload_file'])){
    //检查MIME
    $allow_type = array('image/jpeg','image/png','image/gif');
    if(!in_array($_FILES['upload_file']['type'],$allow_type)){
        $msg = "禁止上传该类型文件!";
    }else{
        //检查文件名
        #  如果save_name存在则使用save_name的数据,否则使用upload_file的数据
        $file = empty($_POST['save_name']) ? $_FILES['upload_file']['name'] : $_POST['save_name'];	
        # 通过.将文件名分为一个数组	
        if (!is_array($file)) {
            $file = explode('.', strtolower($file));
        }
        # 提取数组的最后一项作为后缀名进行后缀名判定
        $ext = end($file);
        # 白名单检测后缀名
        $allow_suffix = array('jpg','png','gif');
        if (!in_array($ext, $allow_suffix)) {
            $msg = "禁止上传该后缀文件!";
        }else{
        	# 将file的第一个元素与位于数组长度-1的元素拼接组成保存用的文件名
            $file_name = reset($file) . '.' . $file[count($file) - 1];
            $temp_file = $_FILES['upload_file']['tmp_name'];
            $img_path = UPLOAD_PATH . '/' .$file_name;
            if (move_uploaded_file($temp_file, $img_path)) {
                $msg = "文件上传成功!";
                $is_upload = true;
            } else {
                $msg = "文件上传失败!";
            }
        }
    }
}else{
    $msg = "请选择要上传的文件!";
}

绕过方法:

由代码审计可得,是通过读取数组的最后一个元素来进行后缀名白名单检测,通过位于数组长度-1的元素拼接文件名作为保存所用的文件数据。我们只需要让数组的最后一个元素符合条件,让数组长度-1的元素为空即可完成绕过

第一步:修改webshell的文件类型为白名单内的文件类型
第二步:修改请求包,将save_name[1]空出来,不填入数据
在这里插入图片描述

Note:这一题的save_name参数最好要加上在结尾加上/,利用/.绕过,而不要单纯的使用.绕过,因为.绕过只适用于Windows系统
第三步:访问上传的文件
在这里插入图片描述
在这里插入图片描述


  1. 条件竞争:多个线程或进程在读写一个共享数据时结果依赖于它们执行的相对时间 ??

  2. 在这里插入图片描述 ??

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-09-24 10:21:05  更:2021-09-24 10:21:09 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 22:41:44-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码