zoukankan      html  css  js  c++  java
  • [极客大挑战 2019]PHP 反序列化

    1.  题目主页为一个很鬼畜的猫猫,会跟着鼠标晃头

    题目说猫猫会踩键盘,所以作者每次都会机制的备份文件,所以这里想到了有备份文件。

     一开始使用dirsearch找,发现都是429请求过多,看样子不能自动扫备份文件,根据经验尝试一下 www.tar www.zip等等,运气比较好的是www.zip为备份文件,下载下来看看。

    2.  遍历各个文件,flag.php内的flag是假的,较为有用的是index.php和class.php。

    其中index.php关键代码:

    这里可以看出,index.php包含了class.php,接受get传参给select,随后序列化处理。

    class.php关键代码

     class.php中,定义了Name类,有两个私有变量username和password,随后定义了_construct(),_wakeup(),_destruct()函数,分别为,建立对象时会调用的函数,反序列化时首先调用的函数,和析构前调用的函数。

    代码审计后发现传入的对象必须为username=admin且password=100才能输出正确的flag,于是构造序列化字符串

     

     由于对象变量为私有变量,序列化后会产生不可见字符%00,将其填入序列化后的字符串中。

    3.  在提交参数前,需要注意,反序列化后首先会调用_wakeup()函数,所以需要将序列化后{前的数字改大,大于类中的变量数,利用php序列化的特性,即可绕过_wakeup函数,不提前为变量赋值。

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

    payload:

    ?select=O:4:"Name":3:{s:14:"%00Name%00username";s:5:"admin";s:14:"%00Name%00password";s:3:"100";}
  • 相关阅读:
    一、服务器控件生命周期
    ArcGIS中的Analysis Tool中的Overlay
    谓词和操作
    联接基础知识SQL中
    修改windows右键菜单
    二、服务器控件的呈现
    连接池
    数据库中的NULL(空值)
    有关在SQL中使用函数
    锁的概述及例子讲解(转贴)
  • 原文地址:https://www.cnblogs.com/cmredkulaa/p/14551854.html
Copyright © 2011-2022 走看看