网站为了实现加速访问,会将用户访问过的页面存入缓存来减小数据库查询的开销。而Thinkphp5框架的缓存漏洞使得在缓存中注入代码成为可能。(漏洞详情见参考资料)
本文将会详细讲解:
1. 如何判断缓存漏洞存在的可能性
2. 如何利用Thinkphp5的框架漏洞结合网站的一些配置实现前台getshell
希望可以给予读者一些关于漏洞应用的启发。
1.某基于Thinkphp5.0.10搭建的论坛类测试网站
2.apache2
3.php5.6及以上版本,相关php组件
4.mysql
1.dirsearch (github上的一个用python编写的网站路径扫描工具)
1.查看网页的cookie,发现存在thinkphp_show_page_trace字段,确定网页基于thinkphp框架。
2.使用 dirsearch 扫描目标网站。发现可以访问 cache目录,说明可能存在缓存漏洞。
1.考虑到这是一个论坛类网站,尝试发帖注入缓存。
2.这是最困难的一步,猜解缓存中的php文件名。根据框架实现,文件名是一个唯一字符串的md5码(此处的md5要用php的函数计算,测试发现和网上的一些在线平台计算结果不同)。考虑到论坛类网站有大量的帖子,需要用数据库存储,而帖子的索引应该为很有可能为id 。
再结合url的路径名,猜测为article_id
echo(md5(“article_52″));
12a51218427a2df68e54e8f4c8b10109
通过访问缓存成功getshell
在thinkphp框架中,/thinkphp/library/think/cache/driver/File.php中定义了缓存的实现。其中,getCacheKey($name)函数实现了cache文件路径的计算,为获得缓存文件名称提供了可能。
而set()与get()函数以序列化对象的方式无过滤地实现了缓存数据的写入与读出,为代码注入缓存提供可能。
通过测试,可以发现帖子中的内容可以直接写入缓存文件。
由于缓存文件是一个php文件,可以进行代码注入。在代码前加一个回车,使代码行独立于前面的注释行。再在末尾加上注释符号//,注释剩余内容。
在处理帖子的代码中,读取帖子首先查询cache文件,通过调用thinkphp5框架中的cache接口实现。
1. 从框架入手,在/thinkphp/library/think/cache/driver/File.php 中的set()函数中对于$value参数进行过滤,去除换行符号。(具体代码见参考资料)缺点: 可能会导致缓存文件在展示时文本布局的改变。
2. 从网页实现入手,读取缓存时的使用的唯一索引可以设置的比较复杂,让攻击者无法猜到。如: 3ae282ad69314d68_article_id
3. 从服务器的配置入手,关闭从外部对于cache文件夹的直接访问。
4. 从php的配置入手,关闭eval等危险函数。
https://paper.seebug.org/374/
*本文原创作者:WindWing(mail)
黑客是如何找人位置(有没有黑客可以找到一个人的) 人与人之间离不开联络,从最开始的千里马到飞鸽传书再到座机、BB机、大哥大、手机、等等。 就以现在的科技发展来说,想找一个人打电话是最快的方...
天气冷要穿上秋衣了,仅有自身明白照料好好爱自己,才可以让他人来心痛,别让严寒侵蚀了你的人体,冷了你的爱,下边我就产生天气冷穿秋裤的简洁明了心情短语,天气冷穿秋裤微信朋友圈溫暖问侯。 天气冷穿秋裤的简...
中国登月第一人(人类登月第一人)1969年7月20日,全球可能有5.三亿人盯住美国nasa的航天员尼尔机械纪米·阿姆斯特朗 ,由于他为人们产生了一次“极大的飞越 ” 。阿姆斯特朗那一天建立了自身古代历...
很多妈妈纸尿裤用的露安适,虽然宝宝用的很好但是用的太贵了实在是用不起了,想换个性价比高的牌子用用,那么帮宝适紫帮怎么样呢,下面友谊长存的小编就带来:帮宝适紫帮和露安适哪个好 日本紫帮和露安适纸尿裤对...
据优化数据计算,现在查找引擎查找引擎优化优化大多数作业靠人工去完结,导致优化进程慢,功率低,今天,小编就介绍几款合适SEO站长运用的优化辅佐东西,削减优化繁琐内容加工程序,解放双手机械行为。 查找引...
六安网站优化:5个步调做好网站优化 值得一看 你能做些什么来确保该网站呈此刻百度、360或神马搜索上?固然提高搜索排名好像是一项难题的任务,但搜索引擎优化是提高网站搜索可见性的独一途径。 1.为了辅佐...