Maison  >  Article  >  cadre php  >  Analyse de la vulnérabilité des opérations de fichiers arbitraires ThinkPHP6

Analyse de la vulnérabilité des opérations de fichiers arbitraires ThinkPHP6

藏色散人
藏色散人avant
2020-01-20 14:13:594330parcourir

漏洞介绍

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

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

漏洞复现

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

Analyse de la vulnérabilité des opérations de fichiers arbitraires ThinkPHP6

Analyse de la vulnérabilité des opérations de fichiers arbitraires ThinkPHP6

漏洞分析

根据官方github的commit:

Analyse de la vulnérabilité des opérations de fichiers arbitraires ThinkPHP6

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

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

Analyse de la vulnérabilité des opérations de fichiers arbitraires ThinkPHP6

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

Analyse de la vulnérabilité des opérations de fichiers arbitraires ThinkPHP6

调用writeFile函数,跟入:

Analyse de la vulnérabilité des opérations de fichiers arbitraires ThinkPHP6

果然是写入文件的操作。

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

Analyse de la vulnérabilité des opérations de fichiers arbitraires ThinkPHP6

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

Analyse de la vulnérabilité des opérations de fichiers arbitraires ThinkPHP6

这里的$cookieName的值是PHPSESSID。

Analyse de la vulnérabilité des opérations de fichiers arbitraires ThinkPHP6

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

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

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

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

Analyse de la vulnérabilité des opérations de fichiers arbitraires ThinkPHP6

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

总结

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

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

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

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer