1

think5审计与调试技巧1

 2 years ago
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.
neoserver,ios ssh client
Jan 17, 2019

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_debugapp_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怎么改, 真正的执行代码也不会变.建议扫描性的看一下,是否有开发不小心把调试用的路由留在上面了..


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK