think5审计与调试技巧1
think5审计与调试技巧1
think5是一个非常流行的框架, 现在的cms很多都采用了think5作为开发框架.这就带来一个问题, 没用过的安全人员审计的时候就非常懵逼了.
例如 程序入口在哪? orm操作都是这种函数 Db::name($modeln['tablename'])->where('id',$id)->setInc('click');
怎么操作才会出现sql注入?
这就需要框架知识了,但是学习整个框架又太多, 不学又不知道怎么审计.所以这个系列旨在带来足以审计的think5框架知识,而不太复杂
整体目录结构
think5 主要需要关注的目录如下
|
|
我们审计主要看application
目录
5.0 官方给的目录参考是
|
|
但是事实可能缺失很多部分 例如nonecms
的目录是
|
|
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
和 app_trace
建议设置成true.
调试模式下异常会显示详细信息,而不是通用报错界面
app_trace
则会在右下角显示一个按钮,根据设置可以显示执行路径,执行sql等等
如果没有显示,需要添加
|
|
如果没有看到这个设置 可能在trace.php
中设置
|
|
xxx.php
对应的是app.php
里的xxx
设置
default_filter
可能的值是函数, 例如 strip_tags
等于对所有用户传入的参数执行过滤.
deny_module_list
则是禁止访问的模块
日志
config/log.php
|
|
默认路径是在runtime/log
数据库trace
app_trace
设置后会发现并没有sql记录,这个需要在database.php添加
|
|
不过就算你看到你的sql注入进入了显示的语句, 但是由于thinkphp5的参数绑定, 很可能并没有生效.
路由
路由对审计影响其实不大, 毕竟url怎么改, 真正的执行代码也不会变.建议扫描性的看一下,是否有开发不小心把调试用的路由留在上面了..