XCTF Web_php_unserialize

一.根据题目猜测和反序列化漏洞有关

  1.思路:

  进入实验环境后,发现是一段php代码,通过接受get请求方式将提交过来的var的值,

  先进行base64解码,再进行正则的判断,如果不匹配成功就会反序列化输入的参数值。

  所以这里我们目的就是为了绕过正则表达式,让其反序列化出我们要的fl4g.php,再通过析构函数,高亮出fl4g文件中的内容。

  2.步骤:

  通过代码中的注释我们发现flag在fl4g.php这个文件里面,所以我们要将其序列化

  

   编写一段代码先实例化我们要序列化的类,这里吧fl4g.php传进去,然后通过构造方法将其赋值给$file,

  然后我们输出序列化的结果,这里为了绕过正则可以采用将    :4:   替换为 :+4:,

  在 PHP5 < 5.6.25, PHP7 < 7.0.10 的版本存在wakeup的漏洞。当反序列化中object的个数和之前的个数不等时,wakeup就会被绕过。

扫描二维码关注公众号,回复: 10443785 查看本文章

  所以我再将它的   :1:   替换为一个大点的值  比如  :2:    ,

  因为在接受到var值后会对其base64解码,所以这里我们再将其base64编码,然后输出即得到我们要输入的参数值。

  TzorNDoiRGVtbyI6Mjp7czoxMDoiAERlbW8AZmlsZSI7czo4OiJmbDRnLnBocCI7fQ==  ,得到flag。

  **这里我们要注意:这里的file变量私有变量(protected变量应该也会),所以序列化之后字符串开头各有一个空白字符%00

  字符串长度实际长度2如果序列化复制到线base64网站进行编码可能就会丢掉空白字符,从而得到错误的编码值

  如下图,通过strlen求到序列化的长度为48,但实际我数了一下只有46。

  

  

  

  

  

猜你喜欢

转载自www.cnblogs.com/darklee/p/12627325.html