【代码审计-PHP】基于Thinkphp框架开发的
创始人
2024-04-20 03:19:08
0

目录

 一、Thinkphp基本结构

1、框架目录

2、判断框架、版本

3、入口文件

4、资源文件

5、调试开关

6、URL路由

二、基本函数

1、请求

2、交互:

3、响应:

三、危险函数

四、已有漏洞

五、漏洞检测工具

六、工具


 一、Thinkphp基本结构

1、框架目录

www  WEB部署目录(或者子目录)
├─application           应用目录
│  ├─common             公共模块目录(可以更改)
│  ├─module_name        模块目录
│  │  ├─common.php      模块函数文件
│  │  ├─controller      控制器目录
│  │  ├─model           模型目录
│  │  ├─view            视图目录
│  │  ├─config          配置目录
│  │  └─ ...            更多类库目录
│  │
│  ├─command.php        命令行定义文件
│  ├─common.php         公共函数文件
│  └─tags.php           应用行为扩展定义文件
│
├─config                应用配置目录
│  ├─module_name        模块配置目录
│  │  ├─database.php    数据库配置
│  │  ├─cache           缓存配置
│  │  └─ ...            
│  │
│  ├─app.php            应用配置
│  ├─cache.php          缓存配置
│  ├─cookie.php         Cookie配置
│  ├─database.php       数据库配置
│  ├─log.php            日志配置
│  ├─session.php        Session配置
│  ├─template.php       模板引擎配置
│  └─trace.php          Trace配置
│
├─route                 路由定义目录
│  ├─route.php          路由定义
│  └─...                更多
│
├─public                WEB目录(对外访问目录)
│  ├─index.php          入口文件
│  ├─router.php         快速测试文件
│  └─.htaccess          用于apache的重写
│
├─thinkphp              框架系统目录
│  ├─lang               语言文件目录
│  ├─library            框架类库目录
│  │  ├─think           Think类库包目录
│  │  └─traits          系统Trait目录
│  │
│  ├─tpl                系统模板目录
│  ├─base.php           基础定义文件
│  ├─convention.php     框架惯例配置文件
│  ├─helper.php         助手函数文件
│  └─logo.png           框架LOGO文件
│
├─extend                扩展类库目录
├─runtime               应用的运行时目录(可写,可定制)
├─vendor                第三方类库目录(Composer依赖库)
├─build.php             自动生成定义文件(参考)
├─composer.json         composer 定义文件
├─LICENSE.txt           授权说明文件
├─README.md             README 文件
├─think                 命令行入口文件

2、判断框架、版本

在源码中搜Thinkphp,如果有就是Thinkphp框架

搜THINK_VERSION可以看到相应的版本信息


3、入口文件

关键词APP_PATH

定义应用目录、框架入口文件

 

按住Ctrl再点击这个目录,就会在左边目录栏跳转到这个目录位置


4、资源文件

均放在public的目录下,找不到的话会爆路径错误情况

public
├─index.php       应用入口文件
├─static		  静态资源目录   
│  ├─css            样式目录
│  ├─js             脚本目录
│  └─img            图像目录
│─router.php      快速测试文件
└─.htaccess       用于apache的重写

5、调试开关

审计的时候,需要将false改为true

如果直接搜debug的话,可能会搜到convention.php上的debug

  默认情况下:// 应用调试模式'app_debug'              => false,// 应用Trace'app_trace'              => false,


6、URL路由

①方法/变量值进行传参
http://domainName/index.php/模块/控制器/操作/方法/变量值eg:访问www.xxx.com/index.php/index/index/index
为application目录下的index模块下的从contraller目录下的index文件下的index函数②变量传参
http://tp5.com/index.php?s=/index/Index/index



二、基本函数

1、请求

Request对象进行调用

获取请求变量

利用:寻找用户可控的变量(且传入给有一定功能的函数)


1、param()

获取所有请求变量

param('指定的函数对象','未获取到时的默认值','对于获取到的值的处理函数')

$request->param():用于获取所有的变量(优先级:路由变量 > 当前请求变量($_POST) > $_GET变量


2、get()

获取$_GET变量

$request->get('指定的函数对象')
echo input('get.函数对象') 


3、
post()获取$_POST

file()获取$_FILE

ip()获取请求IP

method()获取请求方法

pathInfo()获取控制器和方法名的路径

rootInfo()获取路由

2、交互:

配置:

1、代码过滤

2、过滤器过滤

3、模块过滤

4、预编译,使用占位符

……


利用:

1、判断代码绕过条件

2、过滤器漏洞

3、寻找未使用过滤模块的地方

4、不安全的过滤

……

3、响应:

1、配置自动输出

配置:在config.ph中设置default_return_type更改默认返回类型

利用:寻找模板存在的漏洞、寻找未引用模板的目录


2、函数输出

配置:

return 格式类型json($data,201,['set_cookie'=>'xxxx'])

利用:寻找用户可控值


3、重定向

eg:

if($userid>=0){$this->success("提示语","user跳转页面")}
else{ $this->error("错误提示语")}

利用:看是否能利用重定向漏洞,跳转到其他不安全地方



三、危险函数

类型危险函数
SQLselect、insert、update、POST、$REQUEST、mysql_query、mysqli
文件上传$_FILES、move_uploaded_file、!file_exists、type="file"
文件读写file_get_contents()、file_put_contents()、move_uploaded_file()、highlight_file()、fopen()、readfile()、fread()、fgetss()、fgets()、parse_ini_file()、show_source()、file()、rename()
文件删除unlink & delete()、rmdir()
文件包含include、include_once、require、require_once
命令执行system()、exec()、shell_exec()、passthru()、pcntl_exec()、popen()、proc_open()
代码执行eval()、assert()、preg_replace()、call_user_func()、call_user_func_array()、array_map()
xssprint、print_r、echo、printf、sprintf、die、var_dump、var_export
变量覆盖关$$、parse_str()、extract()、importrequestvariables()
反序列化serialize()、unserialize()、__construct__
…………


四、已有漏洞

针对未公开的漏洞

根据描述寻找到未公开的漏洞点



五、漏洞检测工具

针对已公开的漏洞

大佬集成了一个工具箱,可以关注公众号以后免费下载

 



六、工具

Seay

RIPS

CheckMarx

Fortify

VCG

Kunlun-M

相关内容

热门资讯

银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
月入8000+的steam搬砖... 大家好,我是阿阳 今天要给大家介绍的是 steam 游戏搬砖项目,目前...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWS管理控制台菜单和权限 要在AWS管理控制台中创建菜单和权限,您可以使用AWS Identity and Access Ma...