热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

8PHP代码审计——thinkphp3.2.3框架信息泄露

环境:thinkphp_3.2.3_fullphp5.6.27以上下载thinkphp3.2.2解压到http:www.tptest.com网站的根目录下并访问网址&

环境:


thinkphp_3.2.3_full

php5.6.27以上


 

下载thinkphp3.2.2解压到http://www.tptest.com/网站的根目录下并访问网址,如果出现以下页面,说明安装成功:

 

找到目录tptest.com\Application\Common\Conf\config.php配置数据库,开启调试,这里只需配置前6项即可,其它均使用默认配置

return array(/* 数据库设置 */'DB_TYPE' => 'mysql', // 数据库类型'DB_HOST' => '127.0.0.1', // 服务器地址'DB_NAME' => 'thinkphp32', // 数据库名'DB_USER' => 'root', // 用户名'DB_PWD' => '123456', // 密码'DB_PORT' => '3306', // 端口'DB_PREFIX' => '', // 数据库表前缀'DB_PARAMS' => array(), // 数据库连接参数'DB_DEBUG' => TRUE, // 数据库调试模式 开启后可以记录SQL日志'DB_FIELDS_CACHE' => true, // 启用字段缓存'DB_CHARSET' => 'utf8', // 数据库编码默认采用utf8'DB_DEPLOY_TYPE' => 0, // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)'DB_RW_SEPARATE' => false, // 数据库读写是否分离 主从式有效'DB_MASTER_NUM' => 1, // 读写分离后 主服务器数量'DB_SLAVE_NO' => '', // 指定从服务器序号'SHOW_PAGE_TRACE'=>true,
);

 

然后访问网址,如果出现以下页面说明配置完成

 

thinkphp3.2.2日志文件信息泄露

thinkphp在开启DEBUG调试情况下会在\Application\Runtime\Logs\Home目录下生成日志,在浏览器地址栏中输入路径可以直接访问读取日志文件,输入路径造成目录遍历。

ThinkPHP3.2日志文件路径:Application\Runtime\Logs\Home\17_07_22.log

ThinkPHP3.1日志文件路径:Runtime\Logs\Home\17_07_22.log

可以看到thinkphp的日志文件的格式为:项目名\Runtime\Logs\Home\年份_月份_日期.log,这样容易导致日志文件很容易被猜解到,并且日志里面有执行SQL语句的记录,会导致数据库的相关信息泄露。

 

通常建议开发阶段开启debug,部署阶段把index.php中的debug模式关闭掉:

define('APP_DEBUG',false);

 

thinkphp缓存信息泄露

thinkphp提供了方便的缓存方式,包括数据缓存、静态缓存和查询缓存等,主要提供了两个函数进行数据缓存:F函数和S函数,F函数设置缓存数据后没有缓存时间限制,而S函数则可以设置缓存时间。

 

例如在index.php中通过F函数插入一段代码,访问http://www.tptest.com/网址后,默认会在Application\Runtime\Data目录下生成一个data.php文件

 

并且data.php文件中的php代码是可以执行的,假设thinkphp中的F函数是可控的,那么攻击者很可能会插入一段恶意的代码向网站写入shell等等,F函数是一个非常危险的函数,需谨慎使用。

 

在没有设置缓存路径的情况下,F函数缓存的数据默认是在data目录下,S函数默认是在temp目录。

如果使用S函数进行文件方式的缓存机制,那么可以设置DATA_CACHE_KEY参数,避免缓存文件名被猜测到,只需在config.php文件中最下面添加一行配置,例如:'DATA_CACHE_KEY'=>'think'

在index.php中执行S函数,刷新网页,在temp目录下会生成一个md5加密的文件,解密后就是data.php文件了。

 

F函数和S函数的功能非常强大,但也非常危险,在开发中应尽量避免使用数据缓存函数。


推荐阅读
  • 解决VS写C#项目导入MySQL数据源报错“You have a usable connection already”问题的正确方法
    本文介绍了在VS写C#项目导入MySQL数据源时出现报错“You have a usable connection already”的问题,并给出了正确的解决方法。详细描述了问题的出现情况和报错信息,并提供了解决该问题的步骤和注意事项。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • ThinkPHP视频教程第二十五集:关联模型
    php教程|php手册thinkphp代码,代码示例,代码参考,php短信,数据库备份代码,令牌验证,去除代码中的空白和注释Thinkphpphp教程-php手册对学习Thinkp ... [详细]
  • 后端开发|php教程apache配置文件,thinkphp后端开发-php教程例如你的原路径是http:localhosttestindex.phpindexadd那么现在的地址是 ... [详细]
  • php怎么创建项目目录,ThinkPHP 5.1自动生成模块及目录、文件
    试用一下ThinkPHP5.1这最新版的TP框架,创建项目很简单,在web根目录使用composer搞定:composercreate-p ... [详细]
  • 安装mysqlclient失败解决办法
    本文介绍了在MAC系统中,使用django使用mysql数据库报错的解决办法。通过源码安装mysqlclient或将mysql_config添加到系统环境变量中,可以解决安装mysqlclient失败的问题。同时,还介绍了查看mysql安装路径和使配置文件生效的方法。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 通过手机浏览器调用客户端QQ
    php教程|php手册thinkphp代码,代码示例,代码参考,php短信,数据库备份代码,令牌验证,去除代码中的空白和注释调用QQ客户端php教程-php手册可调用iosandr ... [详细]
  • 0x00端口渗透端口扫描端口的指纹信息(版本信息)端口所对应运行的服务常见的默认端口号.尝试弱口令端口爆破hydra端口弱口令NTScanHs ... [详细]
  • 实现jqueryfileupload文件上传带进度条效果的方法
    jQueryFileUpload是一个Jquery图片上传组件,支持多文件上传、取消、删除,上传前缩略图预览、列表显示图片大小,支持上传进度条显示;支 ... [详细]
  • Session接口:Session是应用程序与数据库之间交互操作的一个单线程对象,是Hibernate运作的中心,所有持久化对象必须在s ... [详细]
  • ThinkPHP6 核心分析:系统服务
    什么是系统服务?系统服务是对于程序要用到的类在使用前先进行类的标识的绑定,以便容器能够对其进行解析(通过服务类的 register 方法),还有就是初始化一些参数、注册路由等(不限 ... [详细]
author-avatar
闲云野鹤-男主角_185
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有