苏南大叔再来发一个thinkphp@3.2.3的经典漏洞,最新的thinkphp@5.0.3中是没有本文所描述的这个漏洞的。所以,各位不明真相的吃瓜群众,可以暂时散散了。

苏南大叔:thinkphp3.2.3经典漏洞:任何文件可以被越权包含执行 - thinkphp-bug-display
thinkphp3.2.3经典漏洞:任何文件可以被越权包含执行(图4-1)

本文描述的漏洞可以用于破解上一个.log日志查看的漏洞。就是说,对于可下载的log日志,即使在nginx层面上已经deny all了。但是利用本文中的漏洞,还是可以越权查看log日志。这个问题,就貌似很大了。上一篇文章链接见文章末尾。

禁止直接下载日志

对于thinkphp@3.2.3来说,日志文件的默认位置是:./data/runtime/Logs/目录下。对于常见的nginx容器来说,可以这样修改战斗配置文件来杜绝查看日志文件。

location / {
    # ...
    location ~ .*\.(log)?$ {
        deny all;
    }
}

苏南大叔:thinkphp3.2.3经典漏洞:任何文件可以被越权包含执行 - logs_deny_all
thinkphp3.2.3经典漏洞:任何文件可以被越权包含执行(图4-2)

取得日志内容

nginx层面上来说,是不会直接读取到.log文件了。但是,thinkphp@3.2.3还有其他办法可以读取到这个文件。方式如下:

http://localhost/?a=display&templateFile=data/runtime/Logs/Portal/20_05_05.log
http://localhost/?a=display&templateFile=config.yaml

苏南大叔:thinkphp3.2.3经典漏洞:任何文件可以被越权包含执行 - thinkphp-bug-display-poc
thinkphp3.2.3经典漏洞:任何文件可以被越权包含执行(图4-3)

就是说,调用display方法,传入参数:templateFile。这里不仅仅是用于查看log文件了,理论上根目录下面任何文件都能够被查看出来。但是这个过程是个文件包含include的概念,所以,php语句会被执行。

读取执行任意文件

因为这个display操作中的templateFile是个包含的概念,而不是读取。所以这也是个危险的设定,万一非法上传了某个包含php语句的文件,就可以利用这个方法来执行非法语句了。比如:

http://localhost/?a=display&templateFile=hack.txt

hack.txt里面的内容是一些php语句,那么这个语句就会被立刻执行。

<?php
echo "hacker!";

苏南大叔:thinkphp3.2.3经典漏洞:任何文件可以被越权包含执行 - thinkphp-bug-display-poc2
thinkphp3.2.3经典漏洞:任何文件可以被越权包含执行(图4-4)

相关链接

总结

以前苏南大叔有个同事,是个鉴定的thinkphp黑粉,他的理由是:thinkphp漏洞太多。苏南大叔表示傻傻不明白,一直到很多年后的今天,才觉得那位同事,说的确实是有些道理。但是,这并不是抛弃thinkphp的理由。

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

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

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

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

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

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