DAY42WEB 攻防-PHP 应用MYSQL 架构SQL 注入跨库查询文件读写权限操作

news2024/10/10 6:26:32

一、PHP-MYSQL-SQL注入-常规查询

1.PHP-MYSQL-Web组成架构

MySQL(统一管理)

​ root(自带默认)

​ 网站A testA

​ 网站B testB

MySQL(一对一管理)

​ testA用户

​ 网站A testA

​ testB用户

​ 网站B testB

access无数据库用户

mysql里面有内置的管理用户,其中root就是默认数据库管理员用户

网站上面的数据库都在mysql中,由root或一对一用户去管理

服务器安装MYSQL数据库,搭建多个站点,数据库集中存储MYSQL数据库中管理

可以都使用root用户管理也可以创建多个用户进行每个网站对应的数据库管理

1.统一交root用户管理

每个网站的数据库都由root用户统一管理

网站A:192.168.1.4:81 D:/phpstudy_pro/WWW/Z-Blog 数据库root用户 root

网站B:192.168.1.4:82 D:/phpstudy_pro/WWW/demo01 数据库root用户 root

2.一对一用户管理(推荐)

自己的网站单独创建数据库用户去管理自己的数据库

网站A:192.168.1.4:81 D:/phpstudy_pro/WWW/Z-Blog 数据库zblog用户 zblog

网站B:192.168.1.4:82 D:/phpstudy_pro/WWW/demo01 数据库demo用户 demo01

3.SQL注入

**原因:**就是对接收的参数值没有进行过滤,直接查询到了数据库

**攻击手法:**利用SQL语句执行查询你想要的东西(SQL语句能做什么你就能做什么)

**作用:**SQL语句由谁决定 => 数据库类型决定(为什么有MySQL注入、oracle注入叫法的原因)

**不同数据库的原因:**熟悉不同数据库的功能和SQL注入产生的影响

4.SQL注入流程

MYSQL注入:(目的获取当前web权限)

判断常见四个信息(系统,用户,数据库名,版本)

根据四个信息去选择方案

root用户:先测试读写,后测试获取数据

非root用户:直接测试获取数据

2.PHP-MYSQL-SQL常规查询

获取相关数据流程:

数据库版本-看是否符合information_schema查询-version(),版本大于5.0就可以查询到数据库下的数据库名及表名,列名信息的数据库

数据库用户-看是否符合ROOT型注入攻击-user()

当前操作系统-看是否支持大小写或文件路径选择-@@version_compile_os,Linux对大小写敏感

数据库名字-为后期猜解指定数据库下的表,列做准备-database()

MYSQL5.0以上版本:自带的数据库名information_schema

information_schema:存储数据库下的数据库名及表名,列名信息的数据库

information_schema.schemata:记录数据库名信息的表

information_schema.tables:记录表名信息的表

information_schema.columns:记录列名信息表

schema_name:information_schema.schemata记录数据库名信息的列名值

table_schema:information_schema.tables记录数据库名的列名值

table_name:information_schema.tables记录表名的列名值

column_name:information_schema.columns记录列名的列名值

二、PHP-MYSQL-SQL注入-跨库查询

1.跨库查询架构

​ Zblog

​ zbp_member

​ mem_Name,mem_Password

​ 数据

2.跨库查询

数据库统一管理(root用户)

每个网站的数据库都由root用户统一管理

网站A:192.168.1.4:81 D:/phpstudy_pro/WWW/Z-Blog 数据库root用户 zblog

网站B:192.168.1.4:82 D:/phpstudy_pro/WWW/demo01 数据库root用户 demo01

3.跨库注入

通过B网站的注入点获取A网站的账号密码

影响条件:当前数据库ROOT用户权限,只有root用户才能进行跨库查询

**注入流程:**同常规查询

三、PHP-MYSQL-SQL注入-文件读写

1.影响条件

当前数据库用户权限root

secure-file-priv设置

测试不同数据库用户:root、demo

union select 1,load_file(‘d:\1.txt’),3,4,5,6

union select 1,‘xiaodi’,3,4,5,6 into outfile ‘d:\2.txt’

2.读写的路径的问题

报错显示获取路径

phpinfo页面泄漏

如果不知道路径思路:

利用常见的默认的中间件,数据库等安装路径读取有价值信息

3.编码绕过

如果限制了utf-8编码查询,可以改成16进制的

解决:单引号过滤绕过方式

SQL注入语句中用单引号就不要编码,编码就不用单引号(路径,表名,数据库名等)

四、环境复现

1.PHP-MYSQL-Web组成架构

2.PHP-MYSQL-SQL常规查询

根据MySQL数据库架构一步步进行查询

mysql

​ demo01

​ admin

​ username,password,id

​ 数据

1.对数据库列数进行爆破

order by 6:这是一个排序语句代表按照第6列进行排序,如果输入的值不是6,都会报错,只有输入6才会回显正确

2.爆出正确的列数之后进行联合查询寻找注入点

1.使用联合查询法看页面爆出的数字,这里爆出页面的4和5还有标签页的2,判断这里有注入点,如果没有爆出数字,那就在id=1这里改成id=-1让数据库进行报错,得到注入点

2.根据之前将的注入思路,对爆出的注入点进行数据库版本查询、数据库名查询、操作系统类型查询

3.知道了数据库名之后对数据库列名进行查询

http://192.168.1.4:82/new.php?id=1 union select 1,2,3,group_concat(column_name),5,6 from information_schema.columns where table_schema='demo01'

4.从字面上理解admin列是最重要的,所以固定admin为接下来查询的内容

http://192.168.1.4:82/new.php?id=1 union select 1,2,3,group_concat(column_name),5,6 from information_schema.columns where table_schema='demo01' and table_name='admin'

5.之前所有的查询都是为了最后一步

http://192.168.1.4:82/new.php?id=1 union select 1,2,3,username,password,6 from admin limit 0,1

这个UNION查询选择了6个列,并从admin表中返回第一行记录的用户名和密码,以此类推可以查询第二行第三行的数据内容

3.PHP-MYSQL-SQL跨库查询

根据MySQL数据库架构一步步进行查询

Zblog

​ zbp_member

​ mem_Name,mem_Password

​ 数据

.获取mysql下所有数据库名

http://192.168.1.4:82/new.php?id=1 union select 1,2,3,group_concat(schema_name),5,6 from information_schema.schemata

2.知道了数据库名之后对数据库列名进行查询

http://192.168.1.4:82/new.php?id=1 union select 1,2,3,group_concat(table_name),5,6 from information_schema.tables where table_schema='zblog'

3.爆出了很多列名,选取关键的zbp_member(像用户列表)进行查询

http://192.168.1.4:82/new.php?id=1 union select 1,2,3,group_concat(column_name),5,6 from information_schema.columns where table_schema='zblog' and table_name='zbp_member'

4.最后的查询注意是跨库查询,所以在zbp_menber表前加上zblog数据库名

4.PHP-MYSQL-SQL文件读写

1.先尝试读取文件内容

2.读取数据库配置文件得到数据库的目录位置,因为服务器是Apache搭建的,有默认的存储位置,网上也能查询到很多默认路径,还有方法就是有些代码执行错误也会爆出路径,还有就是phpinfo文件里也有路径

3.因为文件读写是root权限,同时也可以进行写操作,在能读取的文件中写入一句话木马

4.将写好的payload进行输出,得到webshell权限

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

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

相关文章

使用 Stata 调用本地部署的大语言模型进行文本主要内容提取——历年政府工作报告中的经济增长目标提取

因此今天给大家分享一个新的方法。也就是通过部署在本地的大模型进行文本内容提取。 安装 Ollama 通过 Ollama 可以快速在本地部署一些常用的大模型。可以根据自己的系统从这里安装下载:https://github.com/ollama/ollama MacOS 下载 Ollama 链接: https://ollama…

计算机的错误计算(一百一十八)

摘要 探讨一个不动点的计算精度问题。 不动点是一类特殊的循环迭代。它有形式 例1. 已知迭代[1] 计算 显然&#xff0c;每个 均为 0.5 . 不妨在Visual Studio 2010 下用下列C语言代码计算&#xff1a; #include <stdio.h> #include <math.h>int main() {do…

Mac上功能全面,免费好用的解压缩工具

在日常使用Mac的过程中&#xff0c;相信不少朋友都有解压缩需求&#xff0c;目前存在的解压缩软件可以说各种各样&#xff0c;但是有的收费&#xff0c;有的解压速度慢&#xff0c;有的解压类型不全&#xff0c;各有优缺点&#xff0c;挑选起来眼花缭乱&#xff0c;挑来挑去也没…

西安凭借入驻企业展示科技“硬”实力的数字媒体产业园

在古城西安的怀抱中&#xff0c;一座以科技“硬”实力为核心竞争力的数字媒体产业园——西安国际数字影像产业园&#xff0c;正以其独特的魅力和无限的潜力&#xff0c;吸引着全球的目光。这里&#xff0c;不仅是数字创意的孵化场&#xff0c;更是科技创新的策源地。 西安国际数…

STM32 HAL库

1. 相关概念 1.1. 回调函数 Callback()回调函数与普通函数的本质区别在于调用者不同&#xff1a;普通函数由用户代码调用&#xff0c;而回调函数则是由系统在适当的条件下调用。回调函数用于对各种事件的响应和处理&#xff0c;如当指定的EXTI线上发生中断或事件时&#xff0…

windows基于MediaPipe 和 TensorFlow.js的3D手势检测

目录 流程总结 第一步&#xff1a;安装 Node.js 和 Yarn 1.安装 Node.js&#xff1a; 1.1 如果安装了其他版本不合适&#xff0c;可以安装调整nvm-setup.exe来调整 2.安装 Yarn&#xff1a; 第二步&#xff1a;克隆项目仓库 第三步&#xff1a;替换共享文件 1.删除旧的…

Java基本数据类型和String类型的转换

1.基本介绍 在程序开发中&#xff0c;我们经常需要将基本数据类型转换成String类型。或者将String类型转为基本数据类型。 2.基本类型转String类型 语法&#xff1a;将 基本数据类型的值 “” 即可 3.String类型转基本数据类型 语法&#xff1a;通过基本类型的包装类调用…

Web3与传统互联网的比较:机遇与挑战

随着科技的不断进步&#xff0c;Web3作为新一代互联网的概念逐渐浮出水面&#xff0c;改变了我们对网络的认知。相较于传统互联网&#xff0c;Web3在许多方面展现出不同的特征与潜力。本文将对Web3与传统互联网进行比较&#xff0c;探讨其带来的机遇与挑战。 一、核心概念的差异…

MySQL启动失败解决方案

目录 引言 一、查看/启动mysql服务的两种方式 方法一&#xff1a; 方法二&#xff1a; 二、修改mysql服务启动路径的地址 三、"my.ini"文件的使用 设置my.ini文件的路径 给出一个使用my.ini文件的小例子 引言 造成启动闪退\失败的原因我仅仅以个人查询的一下博…

Note24100901_Portal_V18_Advanced5_Modscan的Modbus仿真

Note24100901_Portal_V18_Advanced5_Modscan 的Modbus TCP/IP仿真 具体过程详见如下图片&#xff1a;![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/8d85098268484044b2816d8a78c031f4.png#pic_center 以上~

搭建企业域名服务器案例

任务要求&#xff1a; 某企业要建立一台应用于以下情况的主域名服务器 拥有一个C类网段地址&#xff0c;为202.101.55.0。企业域名注册为company.com。域名服务器的IP地址定位为202.101.55.55&#xff0c;主机名为dns.company.com。企业网通过路由器与Internet连接。要解析的…

Ultralytics YOLO V11 初体验—训练COCO数据集—全流程记录

Utralytics YOLO V11&#x1f680; 之后做项目要用到YOLO&#xff0c;然后也是趁着这个机会捡一下YOLO的相关的知识&#xff0c;这篇博客记录一下&#xff0c;配置Utralytics建立一个训练YOLO的环境&#xff0c;然后使用官方提供的COCO.yaml文件进行自动下载和训练的完整过程&a…

springboot简单案例

必答[简答题]从页面输入年龄&#xff0c;输入的年龄在1-200之间为正常&#xff0c;其余定义为异常&#xff0c;并把年龄结果显示在页面上&#xff0c;同时给出判断(正常输出“年龄是XX岁“;若年龄大于200或小于0&#xff0c;输出自定义异常”年龄输入不正确“;其他显示异常情况…

从0到1:多服务厅预约小程序开发笔记(上)

需求调研 多服务厅预约小程序&#xff1a;随着信息技术的快速发展和移动互联网的普及&#xff0c;越来越多的服务行业开始向线上转型, 传统的预约方式往往效率低下&#xff0c;用户需耗费大量时间进行电话预约或现场排队&#xff0c;服务厅预约小程序集多种服务于一体&#xf…

嵌入式学习-线性表-Day04-队列

嵌入式学习-线性表-Day04-队列 队列 循环队列&#xff08;顺序队列&#xff09; 1&#xff09;创建一个空的队列 2&#xff09;入列 3&#xff09;求长度 链式队列 (1)创建一个空的队列 (2)入列 (3)出列 队列 1 什么是队列&#xff1f; 只允许在两端进行插入和删除操作的线性表…

深度学习——线性神经网络(二、线性回归的从零开始实现)

目录 2.1 生成数据集2.2 读取数据集2.3 初始化模型参数2.4 定义模型2.5 定义损失函数2.6 定义优化算法2.7 训练 2.1 生成数据集 为简单展示&#xff0c;将根据带有噪声的线性模型构造一个数据集。生成一个包含1000个样本的数据集。每个样本包含从标准正态分布中的抽样的两个特征…

RocketMq-秒杀应用场景

1、介绍mq 2、秒杀介绍 -----redis配置 3、生产者-消费者搭建 1、介绍mq 消息存储架构图中主要有下面三个跟消息存储相关的文件构成。 (1) CommitLog&#xff1a;消息主体以及元数据的存储主体&#xff0c;存储Producer端写入的消息主体内容,消息内容不是定长的。单个文件大…

微服务实战——登录(普通登录、社交登录、SSO单点登录)

登录 1.1. 用户密码 PostMapping("/login")public String login(UserLoginVo vo, RedirectAttributes redirectAttributes, HttpSession session){R r memberFeignService.login(vo);if(r.getCode() 0){MemberRespVo data r.getData("data", new Type…

价值5000元完整版GOD引擎手机客户端三端引擎源码 编译完整版

5000元完整版GOD引擎手机客户端三端引擎源码 支持三端互通&#xff1a;电脑端&#xff0c;安卓端&#xff0c;苹果端 GOD引擎全套源码及手游客户端源码&#xff08;苍穹引擎源码及修改教程&#xff09; 服务端代码为Delphir&#xff0c;手游客户端代码为cocos2dx的&#xff08;…

DAMA数据管理知识体系(第14章 大数据和数据科学)

课本内容 14.1 引言 概要 从数据中探究、研发预测模型、机器学习模型、规范性模型和分析方法并将研发结果进行部署供相关方分析的人&#xff0c;被称为数据科学家业务驱动 期望抓住从多种流程生成的数据集中发现的商机&#xff0c;是提升一个组织大数据和数据科学能力的最大业务…