think5审计与调试技巧1
source link: https://blue-bird1.github.io/posts/thinkphp5-1/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
think5审计与调试技巧1
think5审计与调试技巧1
think5是一个非常流行的框架, 现在的cms很多都采用了think5作为开发框架.这就带来一个问题, 没用过的安全人员审计的时候就非常懵逼了.
例如 程序入口在哪? orm操作都是这种函数 Db::name($modeln['tablename'])->where('id',$id)->setInc('click');
怎么操作才会出现sql注入?
这就需要框架知识了,但是学习整个框架又太多, 不学又不知道怎么审计.所以这个系列旨在带来足以审计的think5框架知识,而不太复杂
整体目录结构
think5 主要需要关注的目录如下
├── application 应用目录(可设置)
├── config 配置目录
├── extend 扩展类库目录(可定义)
├── public 网站目录
├── route 路由
├─- runtime 应用的运行时目录(可写,可设置)
├── thinkphp 框架目录
└── vendor 第三方库
我们审计主要看application
目录
5.0 官方给的目录参考是
├─application 应用目录(可设置)
│ ├─common 公共模块目录(可更改)
│ ├─index 模块目录(可更改)
│ │ ├─config.php 模块配置文件
│ │ ├─common.php 模块函数文件
│ │ ├─controller 控制器目录
│ │ ├─model 模型目录
│ │ ├─view 视图目录
│ │ └─ ... 更多类库目录
│ ├─command.php 命令行工具配置文件
│ ├─common.php 应用公共(函数)文件
│ ├─config.php 应用(公共)配置文件
│ ├─database.php 数据库配置文件
│ ├─tags.php 应用行为扩展定义文件
│ └─route.php 路由配置文件
但是事实可能缺失很多部分 例如nonecms
的目录是
├── admin
│ ├── behavior
│ ├── config
│ ├── controller
│ ├── rbac.php
│ ├── tags.php
│ ├── validate
│ └── view
├── command.php
├── common
│ ├── lib
│ ├── model
│ └── taglib
├── common.php
├── index
│ ├── config
│ └── controller
├── mobile
│ ├── config
│ └── controller
└── push
├── controller
└── service
think5 url
最常见的think5 url是
http://serverName/index.php(或者其它应用入口文件)/模块/控制器/操作/[参数名/参数值...]
http://serverName/index.php(或者其它应用入口文件)?s=/模块/控制器/操作/[参数名/参数值...]
index.php/index/blog/read
index.php?s=/index/blog/read
其他方式也有 但是基本大同小异 例如index/listing/index/cid/47.html
think5.1 配置文件在config目录 5.0在application/config.php
常见的配置文件
app.php cache.php cookie.php database.php log.php session.php template.php trace.php
最重要的配置文件是app.php
主要需要关注的配置如下
// 应用调试模式
'app_debug' => true,
// 应用Trace
'app_trace' => true,
// 默认全局过滤方法 用逗号分隔多个
'default_filter' => '',
// 禁止访问模块
'deny_module_list' => ['common'],
app_debug
和 app_trace
建议设置成true.
调试模式下异常会显示详细信息,而不是通用报错界面
app_trace
则会在右下角显示一个按钮,根据设置可以显示执行路径,执行sql等等
如果没有显示,需要添加
// Trace信息
'trace' => [
//支持Html,Console
'type' => 'html',
]
如果没有看到这个设置 可能在trace.php
中设置
<?php
return [
// 内置Html Console 支持扩展
'type' => 'Html',
];
xxx.php
对应的是app.php
里的xxx
设置
default_filter
可能的值是函数, 例如 strip_tags
等于对所有用户传入的参数执行过滤.
deny_module_list
则是禁止访问的模块
config/log.php
return [
// 日志记录方式,内置 file socket 支持扩展
'type' => 'File',
// 日志保存目录
'path' => '',
// 日志记录级别
'level' => [],
];
默认路径是在runtime/log
数据库trace
app_trace
设置后会发现并没有sql记录,这个需要在database.php添加
'debug' => true,
不过就算你看到你的sql注入进入了显示的语句, 但是由于thinkphp5的参数绑定, 很可能并没有生效.
路由对审计影响其实不大, 毕竟url怎么改, 真正的执行代码也不会变.建议扫描性的看一下,是否有开发不小心把调试用的路由留在上面了..
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK