GBK字符编码(字符集)缺陷导致web安全漏洞(2)

GBK字符编码(字符集)缺陷攻击(注入)原理

上一节,我们分析了。选择不同编码可能会导致程序带来本身潜在的漏洞。这次我们以GBK编码为例,看看怎么样通过该编码注入到系统中。目前很多开源系统都存在类似的注入问题。我们先来,从一个Demo开始!

GBK字符集漏洞注入原理

<?php
$u=isset($_GET['u'])? $_GET['u']:'';
$u=addslashes($u);
$sql = "select * from user where user='$u'";

以上是我们写的一个测试例子(GBK编码),现在很多开源系统,比较少的进行统一参数过滤,有时候为了防止注入,就直接对参数进行转义处理。我们看看,这样一个例子,我们怎么样注入进系统!

步骤 备注
1.传入值%D5%27 or 1=1# u参数参入上面值 (%27 对应是“'” 单引号字符)
2.GET获取的值 0xD50x27 or 1=1#
3.Addslashes后值 0xD50x5C0x27 or 1=1 (意思是:誠' or 1=1#') #字符后面被注释掉
4.sql值 将变成 select * from user where user='誠' or 1=1#'
#号是sql注释符号,后面字符将截取掉

GPC转义打开,或者是通过addslashes函数,会自动在字符是单引号(‘)、双引号(")、反斜线(\)与 NUL(NULL 字符)等字符前面增加“\”字符(0x5c),例子里面,我们采用一个特殊前面字节0xD5,它将与该字节组合变成:0xD50x5c ,刚好是gbk字符集中字符:”誠“ 了。 后面的0×27这个单引号被保留下来了!

GBK字符集漏洞注入总结

呵呵,这个很有意思吧,好了。我们来总结下,这类注入是2个条件的。第一是:gbk编码,第二是:程序采用了转义方法,转义了输入。 这2个条件不苛刻,目前大部分开源系统都有gbk,utf-8编码的源码,剩下的就去看看,源码里面有没有用类似转义方法,过滤字符串了。如果有,那么这个系统某个功能,你可以去渗透下了。这个编码漏洞,网上面提的很多,不过很多时候,没有引起开发人员的足够重视,还是在不断的重现!

那么我们如果要注入一个参数,我们该选择什么样的入参参数呢?其实这种转义字符是单引号(‘)、双引号(")、反斜线(\)与 NUL(NULL 字符),我们这些字符往往在程序中有特殊作用,我们只需要在前面加一个在>7F字符,后面接一个%27(‘)、%22(")、%5C(\)、%00(NULL 字符),就可以自己让这4个字符,可以逃脱转义了。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/1735.html