刷题记录:[0CTF 2016]piapiapia

题目复现链接:https://buuoj.cn/challenges

参考链接:0CTF-2016-piapiapia

一、涉及知识点

1、数组绕过正则及相关

参考利用数组绕过问题小总结

md5(Array()) = null
sha1(Array()) = null
ereg(pattern,Array()) = null
preg_match(pattern,Array()) = false
strcmp(Array(), "abc") = null
strpos(Array(),"abc") = null
strlen(Array()) = null

PS:multipart/form-data方式传递数组

刷题记录:[0CTF 2016]piapiapia-LMLPHP

2、改变序列化字符串长度导致反序列化漏洞

  • unserialize()会忽略能够正常序列化的字符串后面的字符串

    比如:a:4:{s:5:"phone";s:11:"13587819970";s:5:"email";s:32:"[email protected]";s:8:"nickname";s:10:"12345hacke";s:5:"photo";s:10:"config.php";}s:39:"upload/f47454d1d3644127f42070181a8b9afc";},反序列化会正常解析a:4:{s:5:"phone";s:11:"13587819970";s:5:"email";s:32:"[email protected]";s:8:"nickname";s:10:"12345hacke";s:5:"photo";s:10:"config.php";},而忽略s:39:"upload/f47454d1d3644127f42070181a8b9afc";},从而导致读取config.php
  • 可以利用这个规则构造字符串来闭合,如本题中filter()where替换成hacker,就可以将这个成员的最后一个字符挤出去,重复34次就可以挤出34个字符,正好闭合改序列化字符串

二、解题方法

见参考链接,不做赘述

05-11 23:03