刷題記錄:[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:"aaaaaaaaaa@aaaaaaaaaa.aaaaaaaaaa";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:"aaaaaaaaaa@aaaaaaaaaa.aaaaaaaaaa";s:8:"nickname";s:10:"12345hacke";s:5:"photo";s:10:"config.php";}
,而忽略s:39:"upload/f47454d1d3644127f42070181a8b9afc";}
,從而導致讀取config.php- 可以利用這個規則構造字符串來閉合,如本題中
filter()
將where
替換成hacker
,就可以將這個成員的最后一個字符擠出去,重復34次就可以擠出34個字符,正好閉合改序列化字符串
二、解題方法
見參考鏈接,不做贅述