ThinkPHP 5.0反序列化利用链学习


安装环境

下面2个都要下载 framework v5.0.24 think v5.0.24 并且将framework下载好后的framework-5.0.24改名为为thinkphp放到think-5.0.24文件夹中 这里直接在sublime中运行/public/index.php文件调试

 

利用链

入口还是利用Windows类触发__toString() 只不过没有Conversion.php,这里找到thinkphp/library/think/Model.php $relation->append($name)$relation$relation = $this->getAttr($key);而来 和5.1类似,getAttr()getData()而来,getData()返回值又可控 这里又和5.1后面类似了,还是存在think/Request.php... 发现这里hook竟然变成了静态属性:归类管理,不属于某个对象,所以无法使用对象直接访问静态属性。类的内部可以使用 self。且不可序列化。 也就不可控了 换个思路,回到Model.phpgetAttr(),看到 $type[$name]$value也可控 跟到readTransform()方法,也就是传入的$value,$type可控 可以实例化任意类,且参数可控 有个可造成SSRF的原生类:new \SplFileObject("http://0:2333/");(记得要在前面加\过if条件判断) 暂时未找到进一步RCE利用点,tcl

 

POC

实例化任意类测试(SSRF)