基于时间的SQL盲注 - 延时注入

知识储备:

sleep(): Sleep 函数可以使计算机程序(进程,任务或线程)进入休眠

if(): i f 是 计算机编程语言一个关键字,分支结构的一种

mid(a,b,c): 从b开始,截取a字符串的c位

substr(a,b,c): 从b开始,截取字符串a的c长度

left(database(),1),database() : left(a,b)从左侧截取a的前b位

length(database())=8 : 判断长度

ord=ascii ascii(x)=100: 判断x的ascii值是否为100

在不使用sleep下查询数据所需要的时间:0.03秒

image.png

使用sleep可以使查询数据休眠指定时间

image.png

if(a,b,c):可以理解在java程序中的三目运算符,a条件成立 执行b, 条件不成立,执行c

image.png

使用if与sleep结合使用:image.png

达到延时数据显示,从而通过数据显示的时间判断数据对错!

使用靶场less-2来实现延时注入:

由于靶场使用的数据库是security,于是会加载五秒钟,这样可以判断出有回显效果。

image.png

可以通过length()来判断数据库的长度

能通过web网页加载时间来判断数据库名的长度是否为8,由于长度是8,所以加载了五秒钟

image.png
image.png

mid()使用:

image.png

substr()函数 Substr()和substring()函数实现的功能是一样的,均为截取字符串。

string substring(string, start, length) string substr(string, start, length) 参数描述同mid()函数,第一个参数为要处理的字符串,start为开始位置,length为截取的长度。

substr()函数使用:

image.png

Left()函数

Left()得到字符串左部指定个数的字符

Left ( string, n ) string为要截取的字符串,n为长度。

image.png

通过以上函数可以来判断数据信息

也可以通过mid去截取当前网页所使用的数据库名的第一个字符是否为t,若不为t,则需要加载五秒钟。

image.png

推荐使用ASCII码

1.防止引号 ‘ “ 转义,防止魔术引号

2.方便以后工具的使用

使用ascii函数()

image.png

结合场景使用:

select * from t1 where id=1 and if(ascii(mid((select table_name from information_schema.tables where table_schema=database() limit 1,1),1,1))=120,sleep(3),0);

该sql对应的sql注入语句

由于查找到当前数据库第一个表是referers,所以第一个字符r的ascii码是120,于是会休眠加载三秒。

image-20240716173210315

这条sql也是同理,因为substr等价mid函数

select * from t1 where id=1 and if(ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))=116,sleep(2),0);

Last updated