从品牌网站建设到网络营销策划,从策略到执行的一站式服务
这篇文章给大家分享的是有关ThinkPHP6任意文件操作漏洞的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
创新互联公司主要从事成都网站建设、网站制作、网页设计、企业做网站、公司建网站等业务。立足成都服务湛河,十载网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:028-86922220漏洞介绍
2020年1月10日,ThinkPHP团队发布一个补丁更新,修复了一处由不安全的SessionId导致的任意文件操作漏洞。该漏洞允许攻击者在目标环境启用session的条件下创建任意文件以及删除任意文件,在特定情况下还可以getshell。
具体受影响版本为ThinkPHP6.0.0-6.0.1。
漏洞复现
本地环境采用ThinkPHP 6.0.1+PHP7.1.20+Apache进行复现。在特定情况下执行测试验证程序即可写入一个webshell,如下图:
漏洞分析
根据官方github的commit:
https://github.com/topthink/framework/commit/1bbe75019ce6c8e0101a6ef73706217e406439f2
因而推测,可能是在存储session时导致的文件写入。然后,跟踪:vendor/topthink/framework/src/think/session/Store.php:254
。
这里调用了一个write函数,跟进一下:vendor/topthink/framework/src/think/session/driver/File.php:210。
调用writeFile函数,跟入:
果然是写入文件的操作。
继续反向看一下文件名是否可控,该文件名来自于最开始的getId()得到的$sessionId的值。既然有getId,就会有setId,看一下函数内容:
当传入的参数$id满足32位的长度时,就将该值设为$this->id。看一下调用setId的地方:vendor/topthink/framework/src/think/middleware/SessionInit.php:46。
这里的$cookieName的值是PHPSESSID。
而$sessionId是cookie中名为PHPSESSID的值,因此是攻击者可控的,从而导致写入的文件名可控。
写入的文件名可控,那么写入的内容是否可控呢?分析发现,写入的内容就是创建session使用的内容。但是session的创建是由实际的后端业务逻辑来决定的,而默认环境下并没有创建session。因此,默认环境下无法做到任意文件写入。
在对该漏洞的深入分析过程中,我们发现该漏洞还可以实现任意文件删除,且文件删除对后端业务逻辑依赖较低。
还是在vendor/topthink/framework/src/think/session/Store.php:254中:
通过分析验证,我们发现漏洞(如上图)还能导致任意文件删除。
总结
在目标环境为Windows且开启session的情况下,容易遭受任意文件删除攻击。
在目标环境开启session且写入的session可控的情况下,容易遭受任意文件写入攻击。
建议相关用户及时升级到ThinkPHP6.0.2版本,以免遭受攻击。
感谢各位的阅读!关于“ThinkPHP6任意文件操作漏洞的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
成都网站建设公司地址:成都市青羊区太升南路288号锦天国际A座10层 建设咨询028-86922220
成都快上网科技有限公司-四川网站建设设计公司 | 蜀ICP备19037934号 Copyright 2020,ALL Rights Reserved cdkjz.cn | 成都网站建设 | © Copyright 2020版权所有.
专家团队为您提供成都网站建设,成都网站设计,成都品牌网站设计,成都营销型网站制作等服务,成都建网站就找快上网! | 成都网站建设哪家好? | 网站建设地图