宽字节注入(知识点)

知识点梳理:

1.php的防御函数

magic_quotes_gpc函数在php中的作用是判断解析用户提交的数据,如包括有:post、get、cookie过来的数据增加转义字符“\”,以确保这些数据不会引起程序,特别是数据库语句因为特殊字符引起的污染而出现致命的错误。

单引号(’)、双引号(”)、反斜线(\)等字符都会被加上反斜线

2. 宽字节注入的题目中的单引号后为什么出现反斜杠?

是PHP的一种防护手段,叫做魔术引号,因为出现反斜杠等于转义了单引号变为字符串。

3.宽字节注入过滤原理

PHP发送请求到mysql时经过一次gbk编码,PHP会将获取到的数据进行魔术引号的处理,因为GBK是双字节编码,所以我们提交的%df这个字符和转译的反斜杠组成了新的汉字,然后数据库处理的时候是根据GBK去处理的,然后单引号就逃逸了出来。

4.宽字节注入绕过原理

已知我们的提交数据会被加入\,\的编码为%5c,我们在后面加上%df后变为了%df%5c,变成一个繁体汉字運,变成了一个有多个字节的字符

因为用了gbk编码,使这个为一个两字节,绕过了单引号闭合,逃逸了转义

5.为什么最后的所查询表名要用16进制编码

因为要用到单引号,会对查询产生影响,单引号会被加上反斜杠

6. 'admin'处除了16进制绕过外还有什么方法

还可以通过子查询的方式绕过,将原来查询的'admin'换成(select table_schema from information_schema.tables where table_schema=database() limit 0,1)

 7.宽字节注入是报错注入吗?

不是,所有场景都可以使用

 8.宽字节注入只能用%df吗

还可以用汉字绕过,因为一个汉字PHP接受的时候是UTF-8编码,然后是个三字节编码,这个汉字和反斜杠两两配对组成两个汉字然后使单引号逃逸

 9.汉字绕过的原理是什么

和%df类似,一些汉字的编码为一个三个字节的编码,当代替%df时,可以将三个字节拆开来看,前两个为一个组,后面那个和\相编码为一个两字节绕过,从而单引号逃逸

 10.当程序员设置数据库和php编码相同还会有宽字节注入

不会,宽字节要基于这两个不同才能实现,PHP utf-8编码 数据库GBK编码

 11.宽字节只发生在GBK编码上面吗?

并不是的,只要PHP的编码格式和数据库的编码格式不同,特别是字符不同的编码就可能会造成

12. 魔术引号防护常见吗?

非常的常见,虽然魔术引号PHP5.3.0后就被废除,5.4.0后就被移除,但是一般的CMS全部都有使用,他们写了专门的魔术引号函数

13.魔术引号会处理所有提交数据吗?

不,常见的魔术引号magic_quotes_gpc他只会处理GET POST COOKIE传参

 14.如果存在魔术引号,但是没有宽字节注入,还有方法吗?

当然有方法,如果是Header注入就不受到影响

 15.魔术引号为什么要转译反斜杠妮?

例如:select *from admin where username=’admin’ and password=’123456’ 

这是最典型的登陆判断语句,如果没有转译反斜杠,那么我们这样写

select *from admin where username=’admin/’ and password=’ union select 1,2,3 #’

因为我写了反斜杠单引号被转译了,

Username的值就变为了admin’ and password=

 16.如何开启魔术引号

需要打开php.ini这个配置文件

魔术引号默认开启吗?

默认开启,但是高版本被废除了

低版本 修改配置文件然后强行执行
magic_quotes_gpc
高版本 删除掉了这个配置,通过特定函数使用
addslashes()

你可能感兴趣的:(php,web安全,开发语言)