【代码审计-PHP】基于Thinkphp框架开发的

简介: 【代码审计-PHP】基于Thinkphp框架开发的

一、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可以看到相应的版本信息

ec14bf288fe54ac3882154a9a24365d8.png


3、入口文件


关键词APP_PATH

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

89b4525472c24df792769c16d3f29ae3.png

25c44795490946f6aaff2e58053c62c5.png

18d0134605a44a7c8f5d68b3f3ea31e8.png


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

e8644c56e2d14f2883a68fd7aad0ec63.png


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,

248d13cb748f400d977dc1a4e945e68f.png


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("错误提示语")}


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


三、危险函数


1676087434884.png


四、已有漏洞


针对未公开的漏洞

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

2e3652eab81f4f38bed8d8c15de1c155.png

五、漏洞检测工具


针对已公开的漏洞

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

1d5bffeb72214edea81eb6e248e9b9e8.png

9424cdf48daa48ad984486710808037a.png


六、工具


Seay

RIPS

CheckMarx

Fortify

VCG

Kunlun-M

目录
相关文章
|
1月前
|
SQL 安全 PHP
PHP 自发布以来一直在 Web 开发领域占据重要地位,PHP 8 更是带来了属性、刚性类型等新特性。
【10月更文挑战第1天】PHP 自问世以来,凭借其易用性和灵活性,在 Web 开发领域迅速崛起。从简单的网页脚本语言逐步演进为支持面向对象编程的现代语言,尤其自 PHP 5.3 引入命名空间后,代码组织和维护变得更加高效。PHP 7 的性能优化和 PHP 8 的新特性(如属性和刚性类型)进一步巩固了其地位。框架如 Laravel、Symfony、Yii2 和 CodeIgniter 等简化了开发流程,提高了效率和安全性。
44 2
|
8天前
|
API PHP 数据库
PHP中哪个框架最适合做API?
在数字化时代,API作为软件应用间通信的桥梁至关重要。本文探讨了PHP中适合API开发的主流框架,包括Laravel、Symfony、Lumen、Slim、Yii和Phalcon,分析了它们的特点和优势,帮助开发者选择合适的框架,提高开发效率、保证接口稳定性和安全性。
25 3
|
10天前
|
XML JSON API
【PHP开发专栏】PHP RESTful API设计与开发
随着互联网技术的发展,前后端分离成为Web开发的主流模式。本文介绍RESTful API的基本概念、设计原则及在PHP中的实现方法。RESTful API是一种轻量级、无状态的接口设计风格,通过HTTP方法(GET、POST、PUT、DELETE)操作资源,使用JSON或XML格式传输数据。在PHP中,通过定义路由、创建控制器、处理HTTP请求和响应等步骤实现RESTful API,并强调了安全性的重要性。
17 2
|
11天前
|
SQL 安全 PHP
探索PHP的现代演进:从Web开发到框架创新
PHP是一种流行的服务器端脚本语言,自诞生以来在Web开发领域占据重要地位。从简单的网页脚本到支持面向对象编程的现代语言,PHP经历了多次重大更新。本文探讨PHP的现代演进历程,重点介绍其在Web开发中的应用及框架创新,如Laravel、Symfony等。这些框架不仅简化了开发流程,还提高了开发效率和安全性。
19 3
|
14天前
|
SQL 安全 PHP
探索PHP的现代演进:从Web开发到框架创新
PHP 自发布以来一直在 Web 开发领域占据重要地位,历经多次重大更新,从简单的脚本语言进化为支持面向对象编程的现代语言。本文探讨 PHP 的演进历程,重点介绍其在 Web 开发中的应用及框架创新。自 PHP 5.3 引入命名空间后,PHP 迈向了面向对象编程时代;PHP 7 通过优化内核大幅提升性能;PHP 8 更是带来了属性、刚性类型等新特性。
24 3
|
14天前
|
XML 安全 PHP
PHP与SOAP Web服务开发:基础与进阶教程
本文介绍了PHP与SOAP Web服务的基础和进阶知识,涵盖SOAP的基本概念、PHP中的SoapServer和SoapClient类的使用方法,以及服务端和客户端的开发示例。此外,还探讨了安全性、性能优化等高级主题,帮助开发者掌握更高效的Web服务开发技巧。
|
1月前
|
SQL 关系型数据库 MySQL
PHP与MySQL协同工作的艺术:开发高效动态网站
在这个后端技术迅速迭代的时代,PHP和MySQL的组合仍然是创建动态网站和应用的主流选择之一。本文将带领读者深入理解PHP后端逻辑与MySQL数据库之间的协同工作方式,包括数据的检索、插入、更新和删除操作。文章将通过一系列实用的示例和最佳实践,揭示如何充分利用这两种技术的优势,构建高效、安全且易于维护的动态网站。
|
1月前
|
Java PHP
PHP作为广受青睐的服务器端脚本语言,在Web开发中占据重要地位。理解其垃圾回收机制有助于开发高效稳定的PHP应用。
【10月更文挑战第1天】PHP作为广受青睐的服务器端脚本语言,在Web开发中占据重要地位。其垃圾回收机制包括引用计数与循环垃圾回收,对提升应用性能和稳定性至关重要。本文通过具体案例分析,详细探讨PHP垃圾回收机制的工作原理,特别是如何解决循环引用问题。在PHP 8中,垃圾回收机制得到进一步优化,提高了效率和准确性。理解这些机制有助于开发高效稳定的PHP应用。
43 3
|
1月前
|
前端开发 JavaScript 小程序
前端uni开发后端用PHP的圈子系统该 如何做源码?
圈子系统系统基于TP6+Uni-app框架开发;客户移动端采用uni-app开发,管理后台TH6开发。系统支持微信公众号端、微信小程序端、H5端、PC端多端账号同步,可快速打包生成APP
|
1月前
|
前端开发 JavaScript PHP
Thinkphp在线客服系统源码多语言外贸版_PHP客服系统源码Uniapp开发搭建+论文设计
Thinkphp在线客服系统源码多语言外贸版_PHP客服系统源码Uniapp开发搭建+论文设计