题目环境源于 github 上的trainingCTF
思路
- 在弱口令,观察前端源码无果后;寻找其他可用资源(探测存活页面,和备份资源)
- 发现存货页面update.php,register.php,profile.php
- 找到备份源码后,代码审计,全局搜索unserialize可以更快的定位(题目本身就是一种提示)
- 找到serialize的位置,从获取数据->searialize->unserialize寻找突破口
本题关键在与利用反序列化传递$photo从而利用file_get_content读取config.php(其中有flag
审计完毕的考点
发现update可以修改$photo但是,$photo在传入时,会被加上’upload’并MD5
好吧其实关键就在filter函数,它对序列化后的内容进行过滤,造成漏洞
因为过滤后的对象位置会发生改变,而反序列化又是基于长度定位,和匹配花括号的
所以通过可以使用字符串逃逸对photo对象的值修改
这里有个坑,为了绕过nickname的长度限制,我们传入了一个数组(nickname)所以在序列化时nickname是一个数组,不仅要闭合序列化后的对象还要把数组给闭合 花括号;}s: ......
总结
https://www.cnblogs.com/NPFS/p/13338789.html
偷个懒