宽字节注入(学习笔记)
魔术引号
PHP防御函数 maginc_quotes_gpc
maginc_quotes_gpc函数在php中的作用是判断解析用户提交的数据,如:post, get cookie过来的数据增加转义字符“\”,以确保这些数据不会引起程序,特别是数据库语句因为特殊字符引起的致命错误
maginc_quotes_gpc的作用
当php的传参中有特殊字符就会在前面加转义字符“\”,来做一定的过滤,如:
’ " \ 前面加一个\就会变成一个字符串
单引号和双引号内的一切都是字符串,如果我们输入的东西不能闭合掉单引号和双引号,输入的数据就不会当作代码执行,就无法产生sql注入
GBK编码
GBK是一种多字符编码,它使用了双字节编码方案,gbk编码汉字占用2个字节,一个utf-8编码的汉字占用3个字节。
列如:
0xD50×5c对应了汉字"诚",url编码使用百分号加字符的16进制编码表示字符,于是%d5%5c经过URL解码后变成了"诚"php产生的魔术引号,最后是要放到mysql执行,如果用了GBK编码就可以绕过
select *from news where id=’%df’’
反斜杠是一个字符,前面在加一个字符就会拼凑成一个汉字,%df加%5c,就是一个運字,就把\号给吃掉了,这样就可以进行注入了
宽字节靶场
可以看到加入的单引号被魔术引号转义掉了加了个%df成功绕出
后面的做法就跟显错注入一样
宽字节注入第二题输入%df,看看能不能绕过
发现不能绕过,应为这是post传参,没有经过URL解码,可以进行抓包修改对应的hex值
成功登录
还有更简单的方法,使用“汉”字
也可以成功绕过
因为没有回信,最后就可以通过盲注查询库名表名字段名了。