代码审计-8 ThinkPHP框架代码审计 2

news2024/12/29 16:25:52

文章目录

  • 熟悉网站结构
  • 确定网站的路由
        • 1.通过分析url直接得出路由
        • 2.查看app/route.php
  • 了解参数过滤情况
  • SQL注入举例
  • 任意文件下载与删除
        • 任意文件下载
        • 代码分析
        • 任意文件删除
        • 代码分析

熟悉网站结构

首先对系统的功能点进行大致的了解,对系统的目录情况进行大致了解,确定ThinkPHP版本
在这里插入图片描述

确定网站的路由

在这里插入图片描述

1.通过分析url直接得出路由

安装页面的urlindex.php/install/index/comolete.html

对应的为appinstall文件下的controller下的index.php中的comolete方法

index.php对应app目录
install对应install目录
index对应controller下的index.php
comolete.html对应controller下的index.phpcomolete方法

在这里插入图片描述

2.查看app/route.php

首先通过install.lock是否存在判断是否安装
查询数据库中的内容赋值给数组$routeNav$routeCate
通过循环遍历数组$routeNav$routeCate中的内容来绑定路由

没带id参数时路由为index/Article/index,带id参数时路由为index/Show/index

在这里插入图片描述

在这里插入图片描述

此处news的路由为index/Article/index,进入对应的文件Article.php下执行index方法
index方法通过getNID函数获取url上的news字符串,然后根据获取的字符串不同的值展示页面

在这里插入图片描述

了解参数过滤情况

查看GETPOST等方式的全局过滤情况
THINKPHP全局过滤设置在目录libs/libray/think/Request.php
Request.php中查看GETPOST函数内容

在这里插入图片描述

解析过滤器函数getFilter,当没有给default设置过滤方式时就会默认使用thinkphp的过滤器

在这里插入图片描述

SQL注入举例

此处find函数进行select查询操作

在这里插入图片描述
跟踪find函数,可以看到find函数所在的文件位置在Query.php

在这里插入图片描述
Query.php文件中查找连接操作数据库的方式
此处用的PDO预编译来执行sql语句
所以当使用的是参数绑定的形式时是不会产生sql注入的

在这里插入图片描述

类似这种,将$id进行绑定的方式执行sql语句,是不会产生注入的

在这里插入图片描述

此处虽然采用的是PDO预编译,但是$id并没有通过参数绑定的方式传递,而是直接拼接到字符串中
所以还是会产生sql注入的

在这里插入图片描述

任意文件下载与删除

任意文件下载

下载文件处存在目录遍历,可通过../../对任意文件进行下载
THINKPHP中因为很多文件格式名称都是固定的,所以说可以通过猜解去下载重要文件

在这里插入图片描述

代码分析

通过input获取url中的参数赋值给$name,将当前url地址和$name的值拼接赋值给$file
file_exists函数判断文件是否存在,如果文件存在则进行下载操作
因为此处并没有对特殊符号../进行过滤所以存在目录遍历
在这里插入图片描述

任意文件删除

与任意文件下载同理
在这里插入图片描述

代码分析

与任意文件下载同理,没有对参数进行过滤,导致可通过../对目录进行回溯
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/172783.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

9. 列表list类型详解

python3 list类型的使用 1. 基本知识 List(列表) 是 Python 中使用最频繁的数据类型。 列表可以完成大多数集合类的数据结构实现。列表中元素的类型可以不相同,它支持数字,字符串甚至可以包含列表(所谓嵌套&#xff…

全球化商家平台技术探索与演进

作者:马金金 阿里全球化业务平台团队 全球化业务高速发展给平台技术带来了极大的挑战。如何差异化支撑全局业务的高效迭代?如何轻量化支撑创新业务的快速建站?本文将聚焦全球化商家平台技术架构演进,为大家分享背后的技术思考。 一…

Understanding LSTM Networks

文章目录Recurrent Neural NetworksThe Problem of Long-Term DependenciesLSTM NetworksThe Core Idea Behind LSTMs.Step-by-Step LSTM Walk Through本篇文章记述了自己对“Understanding LSTM Networks”的理解 Recurrent Neural Networks Humans don’t start their thin…

springmvc统一日志打印request和response内容

在web项目中,有不少场景需要统一处理一些和实际业务基本不相关的逻辑,比如rest接口的监控、出入参日志、操作记录、统一异常处理(避免将错误堆栈等信息直接打到web端)。如果你觉得日志打印rest接口出入参非常简单,直接getParameter()就好了&a…

Redis6学习笔记【part4】Jedis-API与手机验证码功能实现

1.连接 Jedis 第一步&#xff0c;修改 redis 的配置&#xff0c;以允许外网 ip 访问 redis。 在 redis.conf 中注释掉 bind 127.0.0.1 &#xff0c;并修改 protected-mode no 。 第二步&#xff0c;导入依赖。 <dependency><groupId>redis.clients</groupId…

Unity 进阶 之 资源文件夹下资源名的重名检查,并简单生产资源表的方法整理

Unity 进阶 之 资源文件夹下资源名的重名检查,并简单生产资源表的方法整理 目录 Unity 进阶 之 资源文件夹下资源名的重名检查,并简单生产资源表的方法整理 一、简单介绍 二、简单实现过程 三、关键代码 一、简单介绍 Unity中的一些知识点整理。 本节简单介绍在Unity开发…

python使用sentinelsat库下载sentinel影像数据

GIS遥感不分家&#xff0c;最近开始找一些影像的下载脚本了&#xff0c;这两天搞定了哨兵和modis的&#xff0c;分别贴一下 鉴于《Python中使用sentinelsat包自动下载Sentinel系列数据》这篇文章已经写得非常全乎&#xff0c;这里就简单补充一下&#xff0c;放个最简单的下载脚…

Vue CLI(Vue.js 开发的标准工具)

Vue CLI&#xff08;Vue.js 开发的标准工具&#xff09;参考描述Vue CLI获取检测项目创建项目Please pick a presetCheck the features needed for your projectChoose a version of Vue.jsPrefer placing configSave this as a preset for future projects?Save preset asFin…

[MRCTF2020]Ezaudit(随机数的安全)

目录 信息收集 代码审计 相关函数 前提知识 思路分析 补充知识 信息收集 查看源代码没有发现有用信息&#xff0c;尝试dirmap扫下目录 python3 dirmap.py -i 网址 -lcf 扫描时发现一个www.zip目录 下载到一份index.php文件&#xff0c;找到一个login.html <?php h…

docker安装pg数据库及pg数据库基本操作

一、首先准备pg数据库的docker镜像二、先创建一个文件作为pg数据库数据文件、配置文件等的外部挂载文件三、创建镜像docker run -it -d --name postgres14 --restartalways --privilegedtrue -p 5432:5432 -e POSTGRES_PASSWORDpostgres -v /home/fengyang/pg_data:/var/lib/po…

SpringBoot+VUE前后端分离项目学习笔记 - 【25 SpringBoot实现1对1、1对多、多对多关联查询】

新增课程Course页面&#xff0c;实现学生选课功能、课程教授老师选择等功能 1. 课程与授课老师是一对一关系 因为course表仅记录了teacherid&#xff0c;而页面需要的是老师的名字 select course.*,sys_user.id from course left join sys_user **on ** course.teacher_id sys…

第六章SpringFramework之声明事务

文章目录JdbcTemplate准备工作导入依赖创建jdbc.properties配置Spring的配置文件配置测试类的环境实例声明式事务概念先看看对应的编程式事务声明式事务通过一个案例了解声明式事务前提准备三层架构的构建模拟场景的情况添加事务Spring声明式事务的属性事务注解标识的位置事务属…

手把手教你学51单片机-点亮你的LED

单片机内部资源 Flash——程序存储空间。对于单片机来说 Flash 最大的意义是断电后数据 不丢失。 RAM——数据存储空间。RAM 是单片机的数据存储空间,用来存储程序运行过程中产生的和需要的数据,关电后数据丢失 SFR——特殊功能寄存器。通过对特殊工程寄存器读写操作,可以…

循环语句(循环结构)——“C”

各位CSDN的uu们好呀&#xff0c;我又来啦&#xff0c;今天&#xff0c;小雅兰给大家介绍的是一个知识点&#xff0c;就是循环语句啦&#xff0c;包括while循环、do-while循环、for循环&#xff0c;话不多说&#xff0c;让我们一起进入循环结构的世界吧 首先&#xff0c;我们先来…

利用Python暴力破解邻居家WiFi密码

如觉得博主文章写的不错或对你有所帮助的话&#xff0c;还望大家多多支持呀&#xff01;关注、点赞、收藏、评论。 文章目录一、编写代码二、展示测试结果三、测试四、生成密码本&#xff08;建议自己找一个密码本&#xff09;一、编写代码 在桌面新建一个文件 如果你新建的文…

如何实现everything的http外网访问

Everything是voidtools开发的一款文件搜索工具&#xff0c;官网描述为“基于名称快速定位文件和文件夹。”可以实现快速文件索引、快速搜索、最小资源使用、便于文件分享等功能。 everything部署本地后&#xff0c;可以开启配置Http访问功能&#xff0c;这样在局域网内就可以直…

【自用】Git日常开发教程

因为经常容易忘记指令&#xff08;年纪大了&#xff09;&#xff0c;所以打算记录一下将一堆文件从vscode上传到GitHub仓库 目录软件下载初始化状态过程可能出现的错误其他操作参考资料软件下载 https://gitforwindows.org/ https://code.visualstudio.com/ 初始化状态 过程 …

上海亚商投顾:两市缩量微涨,数字经济概念全线走强

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。市场情绪三大指数今日缩量震荡&#xff0c;黄白二线有所分化&#xff0c;题材概念表现活跃。数字经济概念全线走强&#xff0…

8、MariaDB11数据库安装初始化密码

MariaDB11安装 安装前准备 下载安装包 点我去MariaDB官网下载安装包 查看相关文档 Mariadb Server官方文档 使用zip安装 解压缩zip 将下载到的zip解压缩到想安装的位置。 生成data目录 打开cmd并进入到刚才解压后的bin目录&#xff0c; 执行mysql_install_db.exe程序生…

Flowable进阶学习(二)流程部署的深入解析

文章目录一、流程部署涉及表及其结构1. 部署流程代码示例&#xff1a;2. 流程部署所涉及表&#xff1a;3. 流程部署涉及表的结构、字段解析二、流程部署中数据的存储的过程一、流程部署涉及表及其结构 1. 部署流程代码示例&#xff1a; 设计俩个流程&#xff0c;并压缩成zip包…