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#

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

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

相关文章

jmeter性能优化之mysql监控sql慢查询语句分析

接上次博客:基础配置 多用户登录并退出jmx文件:百度网盘 提取码:0000 一、练习jmeter脚本检测mysql慢查询 随意找一个脚本(多用户登录并退出),并发数设置300、500后分别查看mysql监控平台 启动后查看,主要查看mysql…

406. 根据身高重建队列(中等)

406. 根据身高重建队列 1. 题目描述2.详细题解3.代码实现3.1 Python3.2 Java 1. 题目描述 题目中转:406. 根据身高重建队列 2.详细题解 做一道题之前先静心,默念三遍一切反动派都是纸老虎。已知一个队列,队列中每个数据表示一个属性&#xf…

【qt】启动窗口的玩法

启动窗口的玩法 一.应用场景二.界面类设计窗口三.main中创建四.窗口显示标识五.功能实现1.读取注册表2.md5加密3.登录实现4.保存注册表5.功能演示 六.鼠标事件拖动窗口1.找到鼠标事件的函数2.点击事件3.移动事件4.释放事件 七.总结 一.应用场景 一般我们的软件和应用都会一个登…

实战项目《负载均衡在线OJ系统》

一、项目灵感来源 在日常做题的过程中,我们总会去力扣和牛客网上去做题,但是从来没有想过网站是如何加载给用户的,以及在提交代码时,是如何得知我们的代码是否正确。基于这样的原因,也是学习到一定程度的知识后&#x…

python中的循环语句

while循环 基本语法格式 while 条件: 循环体 条件为真,则执行循环体代码 条件为假,则结束循环 打印 1-10的整数 死循环有时候也是必须的, while语句的语法: (1)变量的初始化,…

你知道又美又飒的英歌队头槌女孩吗?无标题

今天是文化和自然遗产日,本“ 人民体验官 ”推广人民日报官方微博文化产品《 16岁英歌队头槌女孩又美又飒》。 截图:来源“ 人民体验官 ”推广平台 郑梓欣是汕头潮阳西门女子英歌队的“头槌”。在2024年春节英歌舞展演巡游活动中,汕头潮阳西…

MySQL第二种实现方式:现在有一个生产计划,甲乙丙3个品类共16个产品,生产时间6天,每天甲品类可以生产1张单,乙3张,丙1张,请用MySQL写出H列的效果

接上篇:链接: 现在有一个生产计划,甲乙丙3个品类共16个产品,生产时间6天,每天甲品类可以生产1张单,乙3张,丙1张,请用MySQL写出H列的效果 第二种写法: -- 使用WITH子句创建CTE WITH…

Spark参数配置不合理的情况

1.1 内存设置 💾 常见的内存设置有两类:堆内和堆外 💡 我们作业中大量的设置 driver 和 executor 的堆外内存为 4g,造成资源浪费 📉。 通常 executor 堆外内存在 executor.cores1 的时候,1g 足够了&…

UltraEditUEStudio软件最新版下载及详细安装教程

UEStudio简介: UEStudio建立在上文本编辑器UltraEdit的功能基础上,并为团队和开发人员提供了其他功能,例如深度Git集成。您可以直接在UEStudio中克隆,签出,更新,提交,推入/拉入等操作&#xff…

再回首:我的创作纪念日3周年回顾

机缘 我与CSDN三周年博客纪念 大家好!今天,我非常高兴地在这里向大家分享我与CSDN三周年博客纪念的喜悦和成果。在这三年里,我坚持不懈地在CSDN上分享了我的技术成果和心得,积累了超过2000篇的博客文章。这一路上,我…

Invalid JSON text:“Invalid value.“ at position 0 in value for column ‘user.info

你们好,我是金金金。 场景 我正在练习mybatis-plus,在插入一条数据的时候报错了,错误信息如上图 排查 排查之前我先贴一下代码 以下为数据库字段类型 在插入的过程中报错:Data truncation: Invalid JSON text: "Invalid val…

python中的函数递归

函数递归,就是一个函数,自己调用自己。 如上图所示,是一段通过定义函数,编写函数体来实现for循环。实现的是从1到n的累乘。即求n的阶乘, 如上图所示,是一段函数的递归来实现1到n的累乘操作,将1*…

opencv快速安装以及各种查看版本命令

安装opencv并查看其版本,直接通过一个可执行文件实现。 #!/bin/bashwget https://codeload.github.com/opencv/opencv/zip/3.4 -O opencv-3.4.zip && unzip opencv-3.4.zip && cd opencv-3.4 && \mkdir build && cd build &&a…

Sentinel不使用控制台基于注解限流,热点参数限流

目录 一、maven依赖 二、控制台 三、基于注解限流 四、热点参数限流 五、使用JMeter验证 一、maven依赖 需要注意,使用的版本需要和你的SpringBoot版本匹配!! Spring-Cloud直接添加如下依赖即可,baba已经帮你指定好版本了。…

海洋日特别活动—深海来客——可燃冰

深海中有一种神奇的物质,似冰又不是冰。 别看它其貌不扬,但本领不小,遇火即燃,能量巨大,可谓是能源家族的新宠。它就是被国务院正式批准列为我国第173个矿种的“可燃冰”! 可燃冰到底是个啥?它…

把chatgpt当实习生,进行matlab gui程序编程

最近朋友有个项目需要整点matlab代码,无奈自己对matlab这种工科的软件完全是外行,无奈只有求助gpt这种AI助手了。大神们告诉我们,chatgpt等的助手已经是大学实习生水平啦,通过多轮指令交互就可以让他帮你完成工作啦!所…

时隔很久运行苍穹外卖项目,出现很多错误

中途运行了很多其他项目,maven的配置文件还被我修改了一次。导致再次运行苍穹外卖项目出现很多错误。 发现没有办法,把本地的仓库删了个干干净净。然后点击clean发现报错: Cannot access alimaven (http://mavejavascript:void(0);n.aliyun.…

k8s学习--kubernetes服务自动伸缩之垂直伸缩(资源伸缩)VPA详细解释与安装

文章目录 前言VPA简介简单理解详细解释VPA的优缺点优点1.自动化资源管理2.资源优化3.性能和稳定性提升5.成本节约6.集成性和灵活性 缺点1.Pod 重启影响可用性2.与 HPA 冲突3.资源监控和推荐滞后:4.实现复杂度: 核心概念Resource Requests 和 Limits自动调…

学会python——九九乘法表+斐波那契数列(python实例一)

目录 1、认识Python 2、环境与工具 2.1 python环境 2.2 pycharm编译 2、九九乘法表 2.1 代码构思 2.2 代码示例 2.3 运行结果 3、斐波那契数列 3.1 代码构思 3.2 代码示例 3.3 运行结果 1、认识Python Python 是一个高层次的结合了解释性、编译性、互动性和面向对…

Nginx部署多web进程

1、nginx介绍 Nginx是一个高性能的、开源的、跨平台的Web服务器和反向代理服务器。它是由俄罗斯的程序员Igor Sysoev开发的,并于2004年首次公开发布。 Nginx的特点包括: 高性能:Nginx使用事件驱动的架构,能够处理大量的并发连接…