说在开头:文章是我通过查询资料后按照自己的理解总结出来的,所以如果有说法不对的地方,欢迎大佬指正~
宽字节注入攻击可以说是SQL注入的进阶攻击方式,在我之前列出的学习计划体系中,前面的union联合查询注入攻击、布尔盲注、报错注入、时间盲注这几种常见的SQL注入方式,在我之前的博客中已经分析过了,那么今天在下面这些进阶的SQL注入方式中,要翻牌的就是宽字节注入。
原理讲解
接下来的讲解,将以问答的方式来呈现我对宽字节注入的理解,希望读我这篇文章的朋友也有所收获。
1.什么叫宽字节注入?
先不忙着深入分析,我们先从整体上知道宽字节注入到底是指什么。按我的理解来总体概述一下:
【MySQL是用的PHP语言,然后PHP有addslashes()等函数,这类函数会自动过滤 ’ ‘’ null 等这些敏感字符,将它们转义成’ ‘’ \null;然后宽字节字符集比如GBK它会自动把两个字节的字符识别为一个汉字,所以我们在单引号前面加一个%df,从而使单引号逃逸。】
2.什么情况下存在宽字节注入?
宽字节的注入条件有两个:
1.数据库编码设置成GB系列
- 这里说的GB系列编码,不是指PHP页面的编码,而是连接数据库使用的编码。
2.使用了转义函数,将GET、POST、cookie传递的参数进行过滤,将单引号、双引号、null等敏感字符用转义符 \ 进行转义。
- 常见的包括addslashes()、mysql_real_escape_string()函数。
- 转义函数的转义作用,就是我们常说的“过滤机制”。
当两个条件都满足时,才会存在宽字节注入。
3.具体原理:
1.通过前面的SQL注入实验可以发现,字符型的注入点我们都是用单引号来判断的,但是当遇到addslashes()时,单引号会被转义成 ’ ,导致我们用来判断注入点的单引号失效。
所以我们的目的就是使转义符 \ 失效、使单引号逃逸。
2.我们通过URL编码来分析&#x