沙漏安全团队
欢迎真正热爱技术的你!
DNS劫持的原理:
前言
联合查询:
一:按照注入语法分为:联合查询注入Union/报错查询注入error/布尔型注入Boolean/延时注入Time/堆叠查询注入
二:联合查询注入是最简单的一种注入方式,但是要求页面必须有显示位.否则无法注入.
显示位:可以理解为从数据库提取的数据被显示在前端. 如果没有显示位,我们无法查看注入的结果.
三:联合查询一般步骤:
1、判断注入点还是整形或字符型
2、判断查询列数
3、判断显示位
4、获取所有数据库名
5、获取数据库所有表名
6、获取字段名
7、获取字段中的数据
在这里我们通过举例第一关来讲解
开始前我们需要掌握Mysql必会查询的语句:
select database(); #查看当前库名;
select table_name from information_schema.tables where table_schema=database() ; #查看当前库下的表名
select column_name from information_schema.columns where table_schema=database() and table_name=‘user’; #查询列名
select name,password from user; #获取用户名和密码列
一、判断注入点还是整形或字符型
在sql变量后添加以下内容来判断类型:
1
1
1
1
注:加号‘+’在URL中有特殊含义,因此在需要对其进行URL编码为%2b
先判断是否存在注入,如果存在(正常和异常页面显示不同则存在注入)是字符型还是整型注入。
这里是显示正常的,添加and1=1
以及and1=2
(1=2为假)来判断是否为整形注入
可以看出页面均显示正常因此不是整形注入
加’
以及--+
注释说明来判断是否为字符型
1
显示页面异常
1
显示页面错误,故可判断为字符注入
二、判断列数
order by (用来查询列数)用来对表里的数据进行排序,order by 1 表示按照第一列进行排序.依次类推.?id=1' order by 1
从1到3:均显示正常
1
显示异常,说明没有第4列,只存在前3列
三.找到显示位
UNION的作用是将两个select查询结果合并,为了爆出第一位后面的显示位需要隐藏正常结果,比如将?id=1
改为?id=-1
,使union前面的语句报错,执行后面的,爆出显示位
1
可以看出只有当id=-1时才可以爆出笑显示位,显示位:2和3,可以插入查询语句
四.获取库名
group_concat()一次性显示:
1
显示当前数据库:databas()
1
得到库名:security
五.获取表名
从获取库名的讲解,在这里使用group_concat()函数加一个数据表名table_name,然后指定一个来源得到库中的表名
1
得到表名:emails,referers,uagents,users
六.获取列名
1
从users中获取
七.获取字段信息
1
这里是username,password的信息,3是该表中有三列,from 为从users中获取的
获取成功了!
总结
union注入是最简单方便的,但是要求页面必须有显示位,没有就没法利用,在学习sql注入的道路上我们才刚刚起步,加油吧少年!
平顶山学院· 沙漏安全团队
本文始发于微信公众号(网络安全攻防训练营):SQL注入-联合查询
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论