本文中的经典漏洞,来自于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文件保存起来。

漏洞背后的默认值情况

注意缓存变量的名字是bug,用户传递的变量名是poc。其中的缓存名字,这个是本文漏洞的关键线索。thinkphp@3默认是使用File做缓存的,而且缓存文件的名字是可以依法换算的.php文件。

缓存文件的名字命名规则是这样的:md5(name)。比如,在上面的例子中,缓存的名字是bug,那么文件名就是ae0e4bdad7b5f67141743366026d2ea5.php

而这个临时文件的默认存储路径是:

<domain>/Application/Runtime/Temp/<md5>.php

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

相关链接

总结

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

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

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

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

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

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

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