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

漏洞的利用

因为这个漏洞是的本质,就是把用户传递的参数保存到一个.php缓存中了。那么,根据缓存文件的代码情况,可以构造一个特殊的参数,形成一个事实上的一句话木马。下面以phpinfo()函数的执行为例:

下图中的参数,可以构造一个phpinfo()的可执行缓存文件。

http://tp3/?poc=%0aphpinfo();//
  • 关键突破口是%0a,它产生了一个换行符
  • //曾注释掉了后续的代码。

下面的截图是,缓存文件的真实代码结果(注意看换行符的产生):

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

根据文件的默认路径,大家可以访问到下面的网址,进而执行相关的php代码。注意替换文件名的md5值:

http://tp3/Application/Runtime/Temp/ae0e4bdad7b5f67141743366026d2ea5.php

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

相关链接

总结

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

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

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

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

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

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

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