thinkphp脆弱性修复方案的6.X版本的代码孔事例分析
浏览:326 时间:2021-11-14

大年初五,根据我们SINE security的网站安全监控平台显示,thinkphp 6.0官方版被发现存在一个高风险的网站代码漏洞,可导致网站被植入网站木马后门文件,也叫webshell。具体原因是这里没有对sessionID参数值进行详细的过滤和验证。这样一来,可以远程修改pOST数据包,将session的值变成恶意后门代码,发送到服务器后端生成pHp文件直接生成,从而导致网站攻击和服务器入侵。有关thinkphp漏洞的详细信息,我们将与您一起安全地分析它。

Thinkphp是国内广泛使用的开源系统,由php mysql框架开发。基于该框架的开发易于维护,受到很多站长和企业的青睐。从2018年到2019年,thinkphp漏洞会一个接一个的出现,就像之前的3.23版本一样。此漏洞存在于ThinkpHp5.0缓存漏洞、ThinkpHp5.0.10、ThinkpHp5.0.12、ThinkpHp5.0.13、ThinkpHp5.0.23和thinkphp5.0.22版本中。

目前新的6.0版本存在上传会话任意文件的漏洞。我们SINE安全工程师进行详细的安全分析和代码安全检测。在索引控制器中,我们发现我们可以编写会话来控制代码。首先,我们看一下代码:如下图所示。

上述代码用于获取name的参数值,并将该值中的内容写入会话。让我们在本地构建一个TP版本Tp6.0的环境来测试生成的会话文件将去往何处。测试网站/tp6/public/index . PHP/index/test session?Name=当get访问这个页面时,它会在网站根目录下的运行时文件夹的会话目录下生成一个pHp文件,我们可以看到。那么,究竟是什么代码使编写文件名成为可能呢?让我们仔细看看Tp框架中的store.php代码,将其追溯到第253到270行,并调用一个参数来编写文件。writefile($filename,$data)接下来让我们跟踪这个函数的值在哪里被使用,见下图:

原来是追踪到了sessionID值,也就是pOST包中的phpsessid,导致该值被远程伪造篡改。漏洞截图:

经过我们对SINE安全的网站安全测试,我们发现thinkphp的漏洞利用条件是服务器打开了会话功能,但是默认代码没有打开。一些第三方开发公司利用会话功能控制用户的登录状态和权限的判断,可能导致网站被攻击、篡改、数据库内容被修改等攻击。在这里,我们建议网站运营者修复代码漏洞,拦截并验证会话判断和编写,并且不允许。要直接写入的php文件。如果你对代码了解不多,也可以找专业的网站安全公司帮你修复网站漏洞。