本文中的经典漏洞,来自于thinkphp@3.2.3S()函数。在这个漏洞中,由于编程人员的疏忽,可能会把一些客户可控的参数,写入到缓存中。而对于thinkphp@3.2.3来说,默认的缓存处理机制中,这又是一个可访问的.php文件。那么,漏洞就这么产生了。

苏南大叔:thinkphp3.2.3经典漏洞:缓存函数不当使用导致临时文件变木马 - thinkphp-bug-cache
thinkphp3.2.3经典漏洞:缓存函数不当使用导致临时文件变木马(图4-1)

本文测试环境:macthinkphp@3.2.3php72。苏南大叔在本文中,要描述的就是这样一个漏洞,框架默认+运维配置不当+程序猿没注意。就可能导致本文中的漏洞发生。这个S()函数会把值缓存成某个特殊的可执行的临时.php文件保存起来。

漏洞的防范

防范的办法,还是从根源上入手。优先推荐升级到最新版的thinkphp,当然这个工作量可能比较大。如果抗拒的话,那么可以使用现有的thinkphp@3代码,做一些必要的防范措施。

框架移出根目录

这个比较好理解,把thinkphpApplication目录上移动一层。然后修改原有的index.php的框架位置定义即可。

index.php:

define('APP_PATH','./../Application/');
require './../ThinkPHP/ThinkPHP.php';

修改默认应用名称

治标不治本的方案,但是也可以值得试试。修改index.php即可:

define('APP_PATH','./ApplicationRename/');

设置nginx规则

Application下的所有文件,是不是都不应该允许用户直接访问到呢?

location ~ ^/Application/ {
  deny all;
}

相关链接

总结

这个漏洞的产生,还是需要有点前提条件的。所以,也并不能说是必现的漏洞。而且,破局的关键点:缓存的名字,这个也是需要您来猜测得到的。所以说,这个经典漏洞客观是存在的,但是能不能找到,那就可能取决于机缘巧合了。

更多thinkphp的相关文字,请点击苏南大叔的博客:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留链接作者。
本站采用创作共用版权协议, 要求署名、非商业用途和相同方式共享。
转载本站内容必须也遵循“署名-非商业用途-相同方式共享”的创作共用协议。
未经许可,规模化镜像抄袭本站内容的行为,将会根据有关法律法规进行维权。
程序如此灵动~》下所有原创文章,如被用于商业用途,请您按规定支付稿费。

 【加群】加入QQ群【175454274】和大家一起讨论这个问题

 【源码】本文代码片段及相关软件,请点此获取

 【绝密】秘籍文章入口,仅传授于有缘之人   thinkphp

本站的忠实读者小伙伴,正在阅读下面这些文章: