两道题浅析PHP反序列化逃逸

打印 上一主题 下一主题

主题 856|帖子 856|积分 2568

两道题浅析PHP反序列化逃逸

一、介绍


  • 反序列化逃逸的出现是因为php反序列化函数在进行反序列化操作时,并不会审核字符串中的内容,所以我们可以操纵属性值,使得反序列化提前结束。
  • 反序列化逃逸题一般都是存在一个filter函数,这个函数看似过滤了敏感字符串,其实使得代码的安全性有所降低;并且分为filter后字符串加长以及字符串变短两种情况,这两种情况有着不同的处理方式。

    • 例如这段代码:
      1. [/code]本来反序列化的结果为:a:2:{s:4:"user";s:12:"flagflagflag";i:1;s:1:"1";}
      2. 但是因为敏感字符串替换变成了:a:2:{s:4:"user";s:12:"";i:1;s:1:"1";}
      3. 这样在反序列化时,就导致了原先的键值flagflagflag被现在的12个字符";i:1;s:1:"1替换了。导致函数误以为键user的值为";i:1;s:1:"1。
      4. 但是同时这里确定了有两个类,所以要想反序列化成功,则需要让原来键1对应值再包含一个类,这样就能够填补前面被覆盖的1键值的空缺;i:1;s:1:"1"应该是i:1;s:13:"1";i:2;s:1:"2",即过滤后字符串为:a:2:{s:4:"user";s:13:"";i:1;s:13:"1";i:2;s:1:"2";}
      5. [*]下面通过两道题实际应用一下该漏洞。
      6. [/list]
      7. [/list][size=5]二、【安洵杯 2019】easy_serialize_php[/size]
      8. [size=4]2.1 收获[/size]
      9. [list]
      10. [*]php反序列化逃逸
      11. [*]数组变量覆盖
      12. [*]POST请求体传递数组
      13. [/list][size=4]2.2 分析[/size]
      14. [list]
      15. [*][b]代码:[/b]
      16. [code]
      复制代码
      这样会直接输出字符串hint.php。实际为了躲避__wakeup函数,evil的类变量需要设置为2。
    </ul>3.3 反序列化逃逸

    payload:
    1. _SESSION[test]=phpphpphpphpphpphpflag&_SESSION[function]=;s:3:"img";s:20:"ZDBnM19mMWFnLnBocA==";i:1;s:1:"2";}
    复制代码
    3.4 SSRF

    得到base64字符串解码:
    [code]
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

半亩花草

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表