zoukankan      html  css  js  c++  java
  • upload-labs-env文件上传漏洞 11-19关

    Pass-11

    源码:加上了本人的注释=。=

    $is_upload = false;
    $msg = null;
    if(isset($_POST['submit'])){
        $ext_arr = array('jpg','png','gif');//文件的后缀
        $file_ext = substr($_FILES['upload_file']['name'],strrpos($_FILES['upload_file']['name'],".")+1); //获取文件的后缀名 在.的位置+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; //获取上传文件最重要保存在哪个目录加了个/和随机数字和日期

    在源码中可以看到,除了白名单的三种后缀别的后缀都不可以上传,然后这次用到的绕过方式为00绕过

    00绕过的原理为: 00截断是16进制的00   当操作系统在读文件名的时候在读到00的时候他认为这个文件就结束了,后面有再多的东西也没有用

    那么我们就上传一个木马文件,改为jpg格式,然后再路径里面添加一个php文件后面加%00

    最上传的文件为1.php  然后连接就好

    Pass-12

    源码:

    $is_upload = false;
    $msg = null;
    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;

    源码跟11关没有什么本质的区别,只不过就是这关采用了POST的形式上传

     同样是上传shell.jpg的文件,在文件路径添加一个1.php.jpg不写00

    然后到HEX里面找到16进制的1.php.jpg,在.jpg的.这里把他的16进制改为00,然后上传就成功了。

    Pass-13

    源码

    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;
    }

    源码的整体大概意思就是只读取文件头的前两个字节,前两个字节符合上传的三种文件格式即可。

    那么我们只需要上传shell.php在内容的头部加入三种格式的文件头即可。

    GIF   GIF 89A

    JPEG(JPG)    FFD8FF

    PNG    89504E87

    GIF    47494638

    然后就上传成功了,你写的什么格式的文件头,上传的就是什么格式

    那么这里就需要文件包含来进行连接了,然而我的靶机里面没有文件包含,所以我就自己写了一个

    <?php
    header("Content-Type:text/html;charset=utf-8");
    $file=$_GET['file'];
    if(isset($file)){
        include $file;
    }else{
        show_source(__file__);
    }
    ?>

    然后访问文件包含漏洞的文件:localhost/baohan.php?file=图片马路径    即可连接

    Pass-14

    源码于13大同小异,只不过判断的方式不同

    这里我选择的是插入图片马

    在dos里输入  copy 1.jpg/b+shell.php 2.jpg

    然后生成了一个2.jpg的图片马

    上传上去,用文件包含连接即可

    Pass-15 使用了exif_imagetype的判断方式

      同13 14

    Pass-16

    源码

    $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_ADDR.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格式的图片!";
                }else{
                    //给新图片指定文件名
                    srand(time());
                    $newfilename = strval(rand()).".jpg";
                    $newimagepath = $UPLOAD_ADDR.$newfilename;
                    imagejpeg($im,$newimagepath);
                    //显示二次渲染后的图片(使用用户上传图片生成的新图片)
                    $img_path = $UPLOAD_ADDR.$newfilename;
                    unlink($target_path);
                    $is_upload = true;

    16关这里使用了一个二次渲染的过滤,也就是把你上传的图片打碎重组生成新的图片

    这里如果我们用自己生成的图片马的话,会把你的恶意代码删除。

    使用winhex工具,在中间随意位置写入16进制的恶意代码,然后上传。

    Pass-17

  • 相关阅读:
    ubuntu(linux)虚拟主机部署桌面,使用window链接
    扫描shader
    Android Studio快捷键
    eclipse取消空格、等号、分号自动录入
    Libgdx学习记录28——创建Desktop程序
    设计模式19——代理模式
    设计模式18——模板方法
    设计模式17——解释器模式
    设计模式16——工厂模式
    设计模式15——外观模式
  • 原文地址:https://www.cnblogs.com/liujizhou/p/11839108.html
Copyright © 2011-2022 走看看