SQL注入之盲注

SQL注入之盲注

简介

盲注就是在服务器没有错误回显的时候完成的注入攻击。这样,攻击者就缺少了非常重要的调试信息。盲注又分为布尔盲注,时间盲注。

布尔盲注

介绍

布尔盲注,有很明显的True或False,也就是说它只会根据你的注入信息返回Ture或False,没有之前返回的错误信息,也可根据页面是否正常显示来判断

函数掌握

  • length()函数:返回括号内相应字符串长度

  • substr()函数:substr(string string,num start,num length)第一个参数是字符串,第二个参数是起始位置,第三个参数是长度。作用为字符串裁剪,选出相应的子字符串。

  • ASCII()函数:返回的数据是相应字符的ASCII码。

手工注入

当然首先还得先判断是否有注入点,是字符型还是数字型注入。

1.判断当前页面字段总数,也就是当前表的列数

order by n(1,2,3,4...)

通过界面是否显示正常来判断返回的是true或false

2.判断回显位(如果要回显数据的话才判断)

不必特地通过盲注来判断。

3.猜解当前数据库名称长度


and (length(database()))>n(1,2,3,4...)

通过界面是否显示正常来判断返回的是true或false

4.用ASCII码猜解当前数据库名称

and ascii(substr(database(),1,1))=115 //s->115
and ascii(substr(database(),2,1))=101 //e->101

通过界面是否显示正常来判断返回的是true或false。

该名称的每一个字符都是需要去判断的,而且是一个一个地判断。而在分别判断每一个字符时可同步配合<>符号来确定其范围

5.猜表名称

用上面查出来的数据库名称进行这一步


and ascii(substr((select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security'),n,1))=n

6.猜字段,列名称

用上面查出来的表名称进行这一步


and ascii(substr((select 1,group_concat(column_name),3 from information_schema.columns where table_schema='users'),n,1))=n

7.猜内容

跟上面类似

burp suite跑盲注

显然,上面一个一个地去判断,去猜测实在有点耗费时间和精力,不过我们还好有burp suite中地intruder模块。使用教程见我下面这篇文章。

具体使用步骤就是用相应符号标记get请求方法中参数的数字部分设置为payload,也就是上面部分语句中n的那个位置。并对我们的payload进行相应的设置,即设置字典。

在数据包的response中,我们观察其信息是true的特征还是false的特征即可。

sqlmap跑盲注

学习部分暂时不涉及自动化注入工具sqlmap,暂时不去了解

时间盲注

介绍

界面返回值只有一种,无论输入什么值,返回情况都会按正常情况处理。所以需要加入特定的时间函数,通过查看web页面的返回时间差来判断注入的语句是否正确。

函数掌握

除了上面介绍的那些,还需要:

  • sleep() :将程序挂起一段时间n为n秒

  • if(expr1,expr2,expr3) :判断语句 如果第一个语句正确就执行第二个语句如果错误执行第三个语句

手工注入

1.猜当前数据库长度

and if((length(database()))<12,sleep(5),1)
(length(database()))<22

当然时间可以设置长一点。如果正确就会延迟,不正确就不延迟。

2.猜当前数据库名称

......

基本与布尔盲注相似,只是多了if判断语句和判断方法是看页面是否延迟。当然也可以用burp suite和sqlmap。

posted @ 2022-01-25 20:39  三木森林  阅读(307)  评论(0编辑  收藏  举报