thinkphp3.2.3经典漏洞:配置不当导致日志可下载
发布于 作者:苏南大叔 来源:程序如此灵动~最近苏南大叔接到一个小小的任务,找某个系统的漏洞。通过url
和错误页特征,可以知道该系统是基于thinkphp3.2.3
的。那么,这个系统算是比较古老的了,毕竟现在都是thinkphp
都是5.x
系列了。但是,得益于国内日益繁荣的盗版代码的情况,基于thinkphp3.2.3
的各种网站类系统,还是遍地开花的。所以,这也能算是个非常经典漏洞了。
本文测试环境:mac
/thinkphp@3.23
/php@7.2
。本文涉及的仅仅是thinkphp@3.2.3
的一个小漏洞:日志文件可任意下载漏洞。
log
日志可随意下载
很多网站运营人员,对日志文件是不以为然的。可以下载又如何?这个是很多人真实的想法。但是,如果日志文件里面记载了很多机密信息呢?
对于thinkphp
来说,每个访问者访问的url
链接,get
的参数,都是明文记录在日志里面的。还有报错信息,页面上不会报的错误,在这里都会有记录。所以,thinkphp
的日志还是很有参考价值的。但是,在thinkphp@3.2.3
系统中,如果运维配置不当,这个日志文件是可以被下载的。
log
日志的默认路径
日志路径的组成是这样的:
<domain>/<应用名称>/Runtime/Logs/<模块名>/<日期>.log
假如想访问2019年1月1日的日志的话,其默认值就是:
<domain>/Application/Runtime/Logs/Home/19_01_01.log
或者
<domain>/Application/Runtime/Logs/Index/19_01_01.log
当然,这个路径是可以定制的,而且是有特殊意义的。但是,大部分开发者都不会去修改这个路径。而且大部分的运维人员都不会去禁用这个.log
文件的下载。所以,漏洞就这么产生了。
防御方式
框架位置(推荐)
对于thinkphp
来说,可以把框架移动到www
根目录的外部。例如:最新版的thinkphp@5
就是根目录叫做public
,框架和public
目录平行。
修改路径(治标不治本)
对于开发人员来说,可以修改默认的log
日志的路径。
修改应用路径Application
的方法:修改index.php
中的变量APP_PATH
。
define('APP_PATH','./Application/');
修改默认模块名称Home
的方法:在Common/Conf/config.php
中,配置DEFAULT_MODULE
。
return array(
'DEFAULT_MODULE' => 'Home'
);
运维配置(防患于未然)
对于运维人员来说,可以禁用.log
文件的下载功能。例如,在nginx
中可以利用下面的方式,禁止.log
文件访问。
location ~ .*\.log$ {
deny all;
}
相关链接
总结
苏南大叔在本文中,描述了一个很常见,很容易被忽视的日志下载漏洞。当然,如果您重视这个问题,这个漏洞也是蛮容易修复的。不过,大多数人都不会重视的。那么,就让漏洞多飞一会吧~
更多thinkphp
相关文字,请点击苏南大叔的博客:
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。