赞
踩
目录
真实的注入环境中一般无法通过网站的源代码进行安全审计的,那么在注入过程中我们就需要使用常见的SQL注入绕过技巧来帮助我们进行绕过WAF。
首先需要判断网页的注入类型,输入参数?id=1%0Aand%0A1=2,测试URL为:
http://www.sqli.com/Less-27/?id=1%0Aand%0A1=2
页面返回的结果如下:
当我们输入id=1 and 1=2时,页面还是正常返回,说明这是一个字符型注入。
然后判断字符型注入的闭合方式,在前面的学习中说过,如果页面是字符型注入的话,需要考虑以下几种情况:
- 单引号闭合需要在后面增加一个单引号即可
- 双引号闭合需要在后面注入语句后面增加一个双引号
- ('')单引号加括号这种需要多加一个or ('')=('1
- ("")双引号加括号这种需要多加一个or ("")=("1
直接输入id=1',判断注入类型:
从mysql报错信息来看,Less-27是使用的“ ’ ”单引号闭合的,红色部分代表我们输入的参数,蓝色的单引号代表后台使用单引号来闭合的。
输入参数id=1''进行闭合:
页面返回正常,除了以上这种方式,输入id=1'%0Aor%0A'1'='1这种方式同样也能闭合成功。
接下来判断列数,前面我们说过判断列数方法可以通过group by或order by语句,还有union select语句来做到。
在当前web页面汇使用group by或order by无法看到任何报错信息,因此这里就只能使用union select语句了:
id=1'%0Aunion%0Aselect%0A1,2,3,4%0Aor%0A'1'='1
后台把union select关键字过滤掉了。
回忆一下之前学过的绕过方式:使用大小写和复写单词,构造sql注入语句如下:
?id=1'%0AUUNIONNION%0ASSELECTELECT%0A1,2,3,4%0Aor%0A'1'='1
页面返回了数据库报错信息,说明select和union成功绕过WAF,使用这种方式同样也能绕过waf:
?id=1'%0AUnioN%0ASeLeCt%0A1,2,3,4%0Aor%0A'1'='1
确定了注入点,注入类型,显示位后,就可以获取当前数据库,和数据库下所有表名,列名,以及用户名和密码,这里就不再演示了,交给你们去完成(其实我就是想偷个懒,逃......)。
当SQL注入环境中,如果页面不返回任何的信息和数据库,怎么确定当前网站的注入类型:
直接输入参数?id=1' and '1'='1,页面能正常显示返回结果,初步看起来当前网站是使用“ ' ”单引号闭合的。但输入?id=1' and '1'='2的话,页面就不能正常显示返回结果了,也就是说当前网站并不是使用单引号闭合的,但也不可能是数字型注入。
那换一种思路:输入参数?id=3' and '1'='1 ,web页面的变化如下
按理说,如果当前页面是使用单引号闭合的话,页面应该返回id为3的用户名和密码,但页面仍然是返回的id=1的用户名和密码,因此这里我们猜测是使用了单引号加括号的闭合方式。
分析Less-28源码:
也就是说,之前输入的id=3' and '1'='1,在后台中实际上被替换成这样了(红色部分为替换的$id):
真实的注入环境中如果页面不反馈数据库报错信息,那么就可以通过这种方式进一步判断当前网站的闭合方式。
在注入的时候我们可能会碰到这样一个问题:就是凡事出现union select关键字的地方会被绕过,这种情况下可以尝试使用URL编码绕过:
输入的SQL命令中使用了大小写方式,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.
- //对于出现的union select,不区分大小写,一律过滤
- $id= preg_replace('/union\s+select/i',"", $id); //Strip out spaces.
- return $id;
- }
这种情况下可以使用URL编码过滤方式进行绕过,将%0A替换成%A0进行绕过:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。