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

    反序列化的题,也刚好补了我一点php的知识   private与public的区别.......

    有备份网站的好习惯,F12一看没有什么东西,肯定就是泄露源码里了,御剑还是扫不出来,disearch可以

    在index.php中

     会接受select参数,并且反序列化,

     如果用户名等于admin 密码等于100  就可以获取flag

    但是__wakeup()   在反序列化前会把admin覆盖成guest

    必须要绕过,经典的绕过方法:

    CVE-2016-7124

    当序列化字符串中表示对象属性个数的值大于真实的属性个数时会跳过__wakeup的执行

    绕过wakeup的同时,还要注意private

    之前遇到很多反序列化的题,变量都是public

    我第一次构造pop链的时候也没仔细看,疯狂报错的同时,序列化得内容也是有问题,我这才看见了 private

    搜了一下 private与public反序列化时的区别

    还搜到了 protected反序列化的区别  

    摘自https://blog.csdn.net/weixin_44077544/article/details/103542260
    protected 声明的字段为保护字段,在所声明的类和该类的子类中可见,但在该类的对象实例中不可见。因此保护字段的字段名在序列化时,字段名前面会加上*的前缀。这里的 表示 ASCII 码为 0 的字符(不可见字符)。这里的 表示 ASCII 码为 0 的字符(不可见字符),而不是 组合。这也许解释了,为什么如果直接在网址上,传递*username会报错,因为实际上并不是,只是用它来代替ASCII值为0的字符。必须用python传值才可以
    private 声明的字段为私有字段,只在所声明的类中可见,在该类的子类和该类的对象实例中均不可见。因此私有字段的字段名在序列化时,类名和字段名前面都会加上0的前缀。字符串长度也包括所加前缀的长度。其中 0 字符也是计算长度的。

    pop:

     

    还看到有师傅不用python提交,可以用%00 

    payload:

    O:4:"Name":3:{s:14:"%00Name%00username";s:5:"admin";s:14:"%00Name%00password";i:100;}
  • 相关阅读:
    Mysql 时间字段(加上或者减去一段时间)
    awk数组与语法
    awk模块、变量、执行
    awk简介与表达式实例
    图数据库
    推荐几款优秀的开源博客系统
    红黑树
    用户画像基础概念
    Panda Global获悉,美国承诺4年内明确区块链数字资产监管方式!
    重庆聚焦区块链应用,Panda Global觉得春天真的来了!
  • 原文地址:https://www.cnblogs.com/tiaopidejun/p/12487548.html
Copyright © 2011-2022 走看看