【PHP】tp3.2.X缓存漏洞之一句话过狗及修复方案


1、背景:楼主也是亲身经历了tp3.2.3的缓存漏洞,导致外包项目被各种木马毒害,还好最终解决了。

2、解决方案:

1)清除所有毒害文件(难度较高),有备份的直接删除整个项目,拿备份文件替换(数据库被毒害的话,也全部替换)

2)更新补丁:具体步骤=》

step1:

修复方案也很简单
打开文件:thinkphp\library\think\cache\driver\File.php

找到 : public function set($name, $value, $expire = null){ 方法

添加:$data = str_replace(PHP_EOL, '', $data);   如下:

 

 

 step2:

修改config.php里缓存配置:

    //缓存安全相关 -- security
    'DATA_CACHE_KEY'=>'lvyou',
    'DATA_CACHE_PREFIX'=>'你的缓存文件前缀',   //这样木马就找不到文件 
    'DATA_CACHE_SUBDIR'     => true,  // 使用子目录缓存 (根据缓存标识的哈希创建子目录)
    'DATA_PATH_LEVEL'       => 1,        // 子目录缓存级别

到这里,就可以解决缓存木马问题。

 

那么,木马是怎么产生的呢?参考这篇文章:https://newsn.net/say/thinkphp-bug-cache.html 和  https://blog.csdn.net/qq_35669659/article/details/89372025 ,

里面讲解了S() 方法 + 关键突破口是%0a,它产生了一个换行符

是产生木马的原因。

 

这里我多讲两句:因为tp3框架初始化的时候,会调用 hooks初始化,即:

Application\Common\Behavior\InitHookBehavior\run 方法,里面有个 S(‘hooks’,Hook::get())调用,

所以 黑客自然知道了 缓存文件名 是 md5('这个不能放出来,不然漏洞传播更广泛').php,然后就发生了不幸的事情。

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM