刷题记录:[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
方式传递数组
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个字符,正好闭合改序列化字符串
二、解题方法
见参考链接,不做赘述