Web学习_SQL注入_联合查询注入

UNION 操作符用于合并两个或多个 SELECT 语句的结果集, UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句 中的列名,并且UNION 内部的 SELECT 语句必须拥有相同数量的 列。 联合查询注入就是利用union操作符,将攻击者希望查询的语句注入 到正常select语句之后,并返回输出结果。 SQL注入的一般流程为:

1. SQL注入点探测。探测SQL注入点是关键的一步,通过适当的分 析应用程序,可以判断什么地方存在SQL注入点。通常只要带有 输入提交的动态网页,并且动态网页访问数据库,就可能存在 SQL注入漏洞。如果程序员信息安全意识不强,采用动态构造 SQL语句访问数据库,并且对用户的输入未进行有效性验证,则 存在SQL注入漏洞的可能性很大。一般通过页面的报错信息来确 定是否存在SQL注入漏洞。

2. 收集后台数据库信息。不同数据库的注入方法、函数都不尽相 同,因此在注入之前,我们先要判断一下数据库的类型。判断数 据库类型的方法很多,可以输入特殊字符,如单引号,让程序返 回错误信息,我们根据错误信息提示进行判断;还可以使用特定 函数来判断,比如输入"select version()",程序返回正常,说明 version()函数被数据库识别并执行,而version()函数是MySQL特 有的函数,因此可以推断后台数据库为MySQL。

3. 猜解数据库字段。数据库中的表和字段命名一般都是有规律的。 通过构造特殊SQL语句在数据库中依次猜解出表名、字段名、字 段数、用户名和密码。

4. 查找Web后台管理入口。WEB后台管理通常不对普通用户开 放,要找到后台管理的登录网址,可以利用Web目录扫描工具 (如:wwwscan、AWVS)快速搜索到可能的登录地址,然后 逐一尝试,便可以找到后台管理平台的登录网址。

5. 入侵和破坏。一般后台管理具有较高权限和较多的功能,使用前 面已破译的用户名、密码成功登录后台管理平台后,就可以任意 进行破坏,比如上传木马、篡改网页、修改和窃取信息等,还可 以进一步提权,入侵Web服务器和数据库服务器。

判断漏洞是否存在

 根据客户端返回的结果来判断提交的测试语句是否成功被数据库引擎执行,如果测试语句被执行了,说明存在注入漏洞。 一般利用单引号(')或者双引号(")来判断是否存在漏洞,如果出 现SQL语句错误说明有很大的可能会存在漏洞。

比如,访问dvwa靶场: http://127.0.0.1/dvwa/vulnerabilities/sqli/? id=1&Submit=Submit#,此时URL实际向服务器传递了值为1的变量id,此时服务器就会从users表中把满足user_id=1这个条件的行(记 录)的first_name, last_name查询出来:

后端 (phpstudy\PHPTutorial\WWW\DVWA\vulnerabilities\sqli\source\lo w.php)向数据库获取数据的SQL语句为:

SELECT first_name, last_name FROM users WHERE user_id = '$id';

 

再SQL-Font里显示为:

这里我们加了一个   ‘,http://www.dvwa.test/vulnerabilities/sqli/?id=1'&Submit=Submit#

SQL语句就变为了

SELECT first_name, last_name FROM users WHERE user_id = '$id'';

可以看到多了一个单引号,因为单引号不匹配,则会报错。如果能 引起数据库的报错,说明用户是可以对查询语句进行修改的,说明存在漏洞。

判断注入类型

判断注入类型是数字型还是字符型,这涉及到在注入的过程中是否需要添加单引号,可以使用and( 逻辑与)进行判断,,当条件表 达式两边都为真才是真,有一边为假则是假

1 and 1=1

1 and 1=2

如果输入1 and 1=1和1 and 1=2页面的查询结果都返回相同的内容,说明不是数字型注入。既然不是数字型,那就有很大的可能是字符型注入了。

如果是字符型则需要对单引号(')进行闭合,因为MySQL中的引号 都是成双成对出现的。

思考:为什么从以上方法中可以判断出注入的类型呢?

首先回到数字型注入和字符型注入的定义,当用户输入上方的判断语句时,

如果是数字型注入,则SQL语句变成了

SELECT first_name, last_name FROM users WHERE user_id = 1 and 1=1;

SELECT first_name, last_name FROM users WHERE user_id = 1 and 1=2;

如果是字符型注入,则变成了

SELECT first_name, last_name FROM users WHERE user_id = '1 and 1=1';

SELECT first_name, last_name FROM users WHERE user_id = '1 and 1=2';

数据库会把用户输入的内容当成了一体进行查询,大家可以将以上四条语句拿到数据库里执行,前两条语句会返回不一样的内容,后 两条语句会返回相同的内容。

 思考:为什么后两条语句同样是用and,但是输出的内容是相同的?

这个涉及到了MySQL的隐式类型转换。隐式转换隐式转换是自动调用的, 用于实现自动将某种类型的数据转换为另外一种类型的数 据。上面的例子中,user_id是int型,传入的'1 and 1=1'是字符串, 会触发隐式类型转换:

'1 and 1=1'==>1

'2admin' ==>2

'admin'==>0

'33admin'==>33 

所以两条语句都通过转换变为了1。

判断表中列数

 为了方便后续获取数据,需要先知道查询的表中显示的字段数,可以使用order by来进行判断。ORDER BY*语句用于根据指定的列对结果集进行排序。

用法:order by 列名或者order by 列编号。

特性:当order by的数字大于当前的列数时候就会报错,SQL注入利用这个特性来判断列数。

这里我们猜3,发现抱错

 这里我们猜对了列数

图中URL的%23为井号(#)进行了url编码,是为了将SQL语句中多余的单引号注释掉,GET型注入可以使用#号的url编码%23或者--+进行注释

 SELECT first_name, last_name FROM users WHERE user_id = '1' order by 2#';

 确定显示位

 显示位:在一个网站的正常页面,服务端执行SQL语句查询数据库 中的数据,客户端将数据展示在页面中,这个展示数据的位置就叫显示位。

这里我们输入

http://127.0.0.1/test/vulnerabilities/sqli/? id=1'+union+select+1%2C2%23&Submit=Submit#

但我们一般都要把1改为-1,

在实战中,一般不查询union左边的内容,这是因为程序在展示 数据的时候通常只会取结果集的第一行数据,所以,只要让第一行查询的结果是空集,即union左边的select子句查询结果为 空,那么union右边的查询结果自然就成为了第一行,打印在网页上了。所以让union左边查询不到,可以将其改为负数或者改 为比较大的数字。

 获取数据

 以DVWA靶场为例,演示如何获取数据库中的数据

获取数据库名、版本

1' union select version(),database()#

获取数据库表名

-1' union select 1,table_name from information_schema.tables where table_schema='dvwa'#

很多网站只显示1条结果,为了能够输出所有结果,可以使用 group_concat()函数,将多行合并成一行:

-1' union select 1,group_concat(table_name) from information_schema.tables where table_schema='dvwa'#-1' union select 1,table_name from information_schema.tables where table_schema='dvwa' limit 0,1

#group_concat()函数被过滤时,可以使用limit n,1 来逐个输出查询内容

 

 这里的数据库名、表名等的字符串表示,需要用单引号、双引号包裹住,或者可以使用对应的十六进制的形式。

获取某个表中的字段名 

-1' union select 1,group_concat(column_name) from information_schema.columns where table_name='guestbook'#

 

获取字段中的记录 

-1' union select 1,group_concat(comment_id,comment,name) from guestbook#

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

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

相关文章

VS2019+QT5.15调用动态库dll带有命名空间

VS2019QT5.15调用动态库dll带有命名空间 vs创建动态库 参考: QT调用vs2019生成的c动态库-CSDN博客 demo的dll头文件: // 下列 ifdef 块是创建使从 DLL 导出更简单的 // 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 DLL3_EXPORTS // 符号…

CST软件眼图工具Eye Diagram Tools (中)--- Classical流程

距离上次眼图介绍快两年了,由于上期已经将重点推荐的方法(statistical流程)介绍了,所以一直没急着涉及这个话题。 仿真实例011:眼图工具Eye Diagram Tools(上) 先总结一下之前介绍过的内容&am…

Java对象的序列化与反序列化

序列化和反序列化是什么 当两个进程远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。比如:我们可以通过http协议发生字符串信息;我们也可以在网络上直接发生Java对象。发送方…

佐西卡在美国InfoComm 2024展会上亮相投影镜头系列

6月12日至14日,2024美国视听显示与系统集成展览会将在拉斯维加斯会议中心盛大开幕。这场北美最具影响力的视听技术盛会,将汇集全球顶尖的视听解决方案,展现专业视听电子系统集成、灯光音响等领域的最新技术动态。 在这场科技盛宴中&#xff0…

数据可视化后起之秀——pyecharts

题目一:绘制折线图,展示商家A与商家B各类饮品的销售额 题目描述: 编写程序。根据第9.3.1,绘制折线图,展示商家A与商家B各类饮品的销售额。 运行代码: #绘制折线图,展示商家A与商家B各类饮品的…

油气管道可视化:推动行业智慧化发展

图扑油气管道可视化系统集成多源数据,提供全景监控与预警功能,增强管道管理的安全性和响应速度,驱动行业智慧升级。

PS系统教程16

图案图章工具-印象派效果 另一种用法-印象派效果 新建图层选择图案进行绘画 如果绘画效果不强 进行画笔设置 选择复位所有锁定位置 将画笔改为硬边缘 为什么没有出来雨点效果 因为我们选择了印象派 新建图层取消勾选印象派 基本用法:可以去做图案和背景 使用…

充电宝哪个牌子最耐用最值得入手?多维度实测三款充电宝

在如今这个手机不离手的时代,充电宝已然成为我们生活中不可或缺的伙伴。但面对市场上琳琅满目的充电宝品牌和产品,我们常常陷入纠结:充电宝哪个牌子最耐用最值得入手呢?为了给大家提供最真实、最实用的参考,我们精心挑…

政安晨【零基础玩转各类开源AI项目】解析开源:gradio:在Python中构建机器学习Web应用

目录 下载项目 快速开始 Gradio能做什么? Hello, World Interface 类 组件属性 多输入和输出组件 一个图像示例 Blocks: 更加灵活且可控 你好, Blocks 更多复杂性 尝试 政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 收录专栏…

Stable Diffusion 改变光线的能力简直太强大了!

在没有 Stable Diffusion 的年代,对照片的光线进行后期处理,基本要依靠 Photoshop。比如添加一个曝光图层。这个技术对于形状简单的物体来说很方便,因为光线效果很好模拟。但对于形状复杂的主体,比如人来说,要想实现自…

革新内容创作:AI生成工具的力量

作为一名AI爱好者,我积累了许多实用的AI生成工具。今天,我想分享一些我经常使用的工具,这些工具不仅能帮助提升工作效率,还能激发创意思维。 我们都知道,随着技术的进步,AI生成工具已经变得越来越智能&…

游戏试玩站打码zq平台系统可运营的任务网源码

安装说明 1.恢复数据; 2.数据连接库配置路径:protected\config\mail.php 文件中修改第60行 (记得不要用记事本修改,否则可能会出现验证码显示不了问题,建议用Notepad) 3.浏览器访问输入 127.0.0.2 显示界…

NOSQL -- MOGODB

Mogodb简介: 是一个开源的, 高性能, 无模式的文档型数据库. NoSql数据库产品当中的一种, 也是最像关系型数据库的非关系型数据库 使用场景: 针对不同的应用场景, 以及其对应的修改对应数据的频率, 我们可以以此选择需要哪一种类型的数据库 Mongo的使用: 启动: 在解压完成之后…

使引用作为函数参数将变量i和j的值互换

C之所以增加引用机制,主要是把它作为函数参数,以扩充函数传递数据的功能。 解题思路: 传递变量的地址。形参是指针变量,实参是一个变量的地址,调用函数时,形参(指针变量)得到实参变…

【计算机毕业设计】258基于微信小程序的课堂点名系统

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

聚焦新版综合编程能力面试考查汇总

目录 一、业务性编程和广度能力考查 (一)基本定义 (二)必要性分析 二、高频考查样题(编程扩展问法) 考题1: 用java 代码实现一个死锁用例,说说怎么解决死锁问题?(高…

测试开发面经分享,面试七天速成 DAY 1

1. get、post、put、delete的区别 a. get请求: i. 用于从服务器获取资源。请求参数附加在URL的查询字符串中。 ii. 对服务器的请求是幂等的,即多次相同的GET请求应该返回相同的结果。 iii. 可以被缓存,可以被收藏为书签。 iv. 对于敏感数据不…

第26讲:Ceph集群OSD扩缩容中Reblanceing数据重分布

文章目录 1.Reblanceing数据重分布的概念2.验证Reblanceing触发的过程3.Reblanceing细节4.临时关闭Reblanceing机制 1.Reblanceing数据重分布的概念 当集群中OSD进行扩缩容操作后,会触发一个Reblanceing数据重分布的机制,简单的理解就是将扩缩容前后OSD…

AI大模型探索之路-实战篇:智能化IT领域搜索引擎的构建与初步实践

系列篇章💥 No.文章1AI大模型探索之路-实战篇:智能化IT领域搜索引擎的构建与初步实践2AI大模型探索之路-实战篇:智能化IT领域搜索引擎之GLM-4大模型技术的实践探索3AI大模型探索之路-实战篇:智能化IT领域搜索引擎之知乎网站数据获…

基本元器件 - 晶体三级管

目录 区分极性 不同封装引脚辨认 基本电流关系 输出伏安特性 阻容耦合放大电路 晶体管的工作状态 三极管的主要参数 判断三极管的工作状态 估算法 图解法 基本放大电路 晶体三极管是一种 电流控电流 的元器件。 区分极性 除基极外,带箭头是发射极&…