建设自己的二手房中介网站,泉州百度搜索推广,做的好点的外贸网站,自己做的网站打开超慢原标题#xff1a;利用Thinkphp 5缓存漏洞实现前台Getshell*本文原创作者#xff1a;WindWing#xff0c;属于FreeBuf原创奖励计划#xff0c;禁止转载000 背景网站为了实现加速访问#xff0c;会将用户访问过的页面存入缓存来减小数据库查询的开销。而Thinkphp5框架的缓存…原标题利用Thinkphp 5缓存漏洞实现前台Getshell*本文原创作者WindWing属于FreeBuf原创奖励计划禁止转载0×00 背景网站为了实现加速访问会将用户访问过的页面存入缓存来减小数据库查询的开销。而Thinkphp5框架的缓存漏洞使得在缓存中注入代码成为可能。(漏洞详情见参考资料)本文将会详细讲解1. 如何判断缓存漏洞存在的可能性2. 如何利用Thinkphp5的框架漏洞结合网站的一些配置实现前台getshell希望可以给予读者一些关于漏洞应用的启发。0×01 环境 测试环境1.某基于Thinkphp5.0.10搭建的论坛类测试网站2.apache23.php5.6及以上版本相关php组件4.mysql工具1.dirsearch(github上的一个用python编写的网站路径扫描工具)0×02 实现 判断缓存漏洞存在的可能性1.查看网页的cookie发现存在thinkphp_show_page_trace字段确定网页基于thinkphp框架。2.使用 dirsearch 扫描目标网站。python3 dirsearch.py -u site_ip_here -e php发现可以访问 cache目录说明可能存在缓存漏洞。实施攻击1.考虑到这是一个论坛类网站尝试发帖注入缓存。2.这是最困难的一步猜解缓存中的php文件名。根据框架实现文件名是一个唯一字符串的md5码(此处的md5要用php的函数计算测试发现和网上的一些在线平台计算结果不同)。考虑到论坛类网站有大量的帖子需要用数据库存储而帖子的索引应该为很有可能为id 。再结合url的路径名猜测为article_idecho(md5(“article_52″));12a51218427a2df68e54e8f4c8b10109通过访问缓存成功getshell0×03 原理分析 框架在thinkphp框架中/thinkphp/library/think/cache/driver/File.php中定义了缓存的实现。其中getCacheKey($name)函数实现了cache文件路径的计算为获得缓存文件名称提供了可能。而set()与get()函数以序列化对象的方式无过滤地实现了缓存数据的写入与读出为代码注入缓存提供可能。通过测试可以发现帖子中的内容可以直接写入缓存文件。由于缓存文件是一个php文件可以进行代码注入。在代码前加一个回车使代码行独立于前面的注释行。再在末尾加上注释符号//注释剩余内容。网页实现在处理帖子的代码中读取帖子首先查询cache文件通过调用thinkphp5框架中的cache接口实现。0×04 防御1. 从框架入手在/thinkphp/library/think/cache/driver/File.php 中的set()函数中对于$value参数进行过滤去除换行符号。(具体代码见参考资料)缺点: 可能会导致缓存文件在展示时文本布局的改变。2. 从网页实现入手读取缓存时的使用的唯一索引可以设置的比较复杂让攻击者无法猜到。如: 3ae282ad69314d68_article_id3. 从服务器的配置入手关闭从外部对于cache文件夹的直接访问。4. 从php的配置入手关闭eval等危险函数。0×05 参考资料https://paper.seebug.org/374/*本文原创作者WindWing(mail)属于FreeBuf原创奖励计划禁止转载 返回搜狐查看更多责任编辑