搜索
首页php框架ThinkPHPThinkPHP6 任意文件操作漏洞分析

漏洞介绍

2020年1月10日,ThinkPHP团队发布一个补丁更新,修复了一处由不安全的SessionId导致的任意文件操作漏洞。该漏洞允许攻击者在目标环境启用session的条件下创建任意文件以及删除任意文件,在特定情况下还可以getshell。

  1. 具体受影响版本为ThinkPHP6.0.0-6.0.1。

漏洞复现

本地环境采用ThinkPHP 6.0.1+PHP7.1.20+Apache进行复现。在特定情况下执行测试验证程序即可写入一个webshell,如下图:

8541ac69cad3f51b59bba6af662497d.png

d2b9689020c2d2dcd6ef544f9e0d3de.png

漏洞分析

根据官方github的commit:

5e4f82bf9570ae7fe15d99b70eb5364.png

https://github.com/topthink/framework/commit/1bbe75019ce6c8e0101a6ef73706217e406439f2

因而推测,可能是在存储session时导致的文件写入。然后,跟踪:vendor/topthink/framework/src/think/session/Store.php:254

3f9652f2757f83260f28964c2f3ffd9.png

这里调用了一个write函数,跟进一下:vendor/topthink/framework/src/think/session/driver/File.php:210。

61b3b5b94aaaab99afcef687e404a9e.png

调用writeFile函数,跟入:

f618a55df0c4f4f09c6155d045d3c6f.png

果然是写入文件的操作。

继续反向看一下文件名是否可控,该文件名来自于最开始的getId()得到的$sessionId的值。既然有getId,就会有setId,看一下函数内容:

c09df06a64d5d0b7ebe15dab1381925.png

当传入的参数$id满足32位的长度时,就将该值设为$this->id。看一下调用setId的地方:vendor/topthink/framework/src/think/middleware/SessionInit.php:46。

8cf637c538d2ec726ce56e79e04a7f9.png

这里的$cookieName的值是PHPSESSID。

83ce804d81f30651e63da7327620c72.png

而$sessionId是cookie中名为PHPSESSID的值,因此是攻击者可控的,从而导致写入的文件名可控。

写入的文件名可控,那么写入的内容是否可控呢?分析发现,写入的内容就是创建session使用的内容。但是session的创建是由实际的后端业务逻辑来决定的,而默认环境下并没有创建session。因此,默认环境下无法做到任意文件写入。

在对该漏洞的深入分析过程中,我们发现该漏洞还可以实现任意文件删除,且文件删除对后端业务逻辑依赖较低。

还是在vendor/topthink/framework/src/think/session/Store.php:254中:

6024f99fc937987710d3edec77be1ba.png

通过分析验证,我们发现漏洞(如上图)还能导致任意文件删除。

总结

在目标环境为Windows且开启session的情况下,容易遭受任意文件删除攻击。

在目标环境开启session且写入的session可控的情况下,容易遭受任意文件写入攻击。

建议相关用户及时升级到ThinkPHP6.0.2版本,以免遭受攻击。

php中文网,大量的免费thinkphp入门教程,欢迎在线学习!

以上是ThinkPHP6 任意文件操作漏洞分析的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文转载于:seebug.org。如有侵权,请联系admin@php.cn删除

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

SecLists

SecLists

SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器