前言:
此刻大家对“mysql联合查询union”可能比较关注,看官们都想要分析一些“mysql联合查询union”的相关资讯。那么小编在网上搜集了一些关于“mysql联合查询union””的相关内容,希望我们能喜欢,各位老铁们快快来学习一下吧!前一篇我们讲了SQL注入的原理,分类,这一篇我们以DVWA漏洞演示环境讲解union联合查询
DVWA简介
DVWA(Damn Vulnerable Web Application)是一个用来进行安全脆弱性鉴定的PHP/MySQL Web应用,旨在为安全专业人员测试自己的专业技能和工具提供合法的环境,帮助web开发者更好的理解web应用安全防范的过程。
需要注意的是,
DVWA的搭建这里就不在赘述,网上有相关教程
我总结了下手工注入的思路,大致步骤如下:
1.判断是否存在注入,注入是字符型还是数字型
2.猜解SQL查询语句中的字段数
3.确定显示的字段顺序
4.获取当前数据库
5.获取数据库中的表
6.获取表中的字段名
7.下载数据
下面我们对四种级别的代码进行分析:
1.判断是否存在注入,注入是字符型还是数字型
输入1,查询成功:
上一篇我们讲了
我们在输入框中输入1,点击submit,页面返回如上图页面。是web应用查询了数据库,获取了useid为1的数据。SQL语句是:
select Firstname, sunname from XXX where userid= 我们输入的ID
where有三种形式,如下图所示
POC(全称: Proof of Concept),意思是:漏洞验证代码
我们上一节讲到了SQL注入的分类:
如果where语句是图中第一行,我们称为数字型注入点。
如果where语句是图中第二、三行,我们称为字符型注入点。
图中红色部分为我们渗透测试所要用到的代码
a.我们先验证这里是否存在漏洞
输入1,查询成功:
接着我们输入1',然后点submit
报错,说明这里存在注入。
b.接着,我们判断是字符型注入还是数字型注入
我们依次输入三种POC
输入1 or 1024=1024
返回结果是userid =1的结果并没有注入成功
输入 1' or '1024'='1024'
这里返回这么多结果,表明where语句被成功的or条件处理
输入 1" or "1024"="1024"
返回结果是userid =1的结果并没有注入成功
由此我们判断这里使用的变量时用单引号闭合的,注入类型为字符型注入。
2.猜解SQL查询语句中的字段数
输入1′ order by 1 #,显示正常:
(这里我们解释下 order by 1的意思,order by 1是sql语句,意思是按照查询的第一个字段排序)
(这里我们解释下#的意思,#是sql语句中的注释符,sql语句是需要闭合的,我们用注释符号来闭合)
输入1′ order by 2 #,显示正常:
输入1′ order by 3 #,查询失败
说明执行的SQL查询语句中只有两个字段,即这里的First name、Surname。
这里我们讨论下,为甚么要猜解SQL查询语句中的字段数呢?
我们这节的题目是union联合查询,比如我想查找一下别的表的数据,比如admin表,要想查找别的表的数据,咱们就需要一个联合查询。
联合查询就是将多张表合在一条sql语句一块查询,比如:selectid,news,date from adout where id = 3 union select id ,username,password from admin,联合查询需要注意一个问题,那就是前后select 中字段数目必须一样,而且前面每个字段类型必须和后面每个字段的类型相兼容。
所以我们要构造union后面的查询语句,就需要知道union前面的查询语句的字段数。
3.确定显示的字段
输入1′ union select 1,2 #,查询成功:
这节我们讲的是union联合查询注入,属于回显注入,我们就根据回显的类容看到数据库中的信息,所以我们这里确定回显的字段。这里第一个字段和第二个都回显
4.获取当前数据库
输入1′ union select 1,database() #,查询成功:
说明当前的数据库为dvwa。
5.获取数据库中的表
输入xx' union select 1,table_name from information_schema.tables where table_schema='dvwa'-- 查询成功:
6.获取表中的字段名
输入xx' union select 1,column_name from information_schema.columns where table_name='users'-- ,查询成功
说明users表中有8个字段,分别是user_id,first_name,last_name,user,password,avatar,last_login,failed_login。
其中user,password字段就是我们想要得到的账号密码
7.下载数据
输入xx' union select user,password from users--,查询成功:
这里我们就得到了登录用的账号和密码。
至于为什么输入这些语句就能得到想要的数据我们下节内容在解释。
标签: #mysql联合查询union #mysql联合查询注入