[NCTF2019]SQLi

[NCTF2019]SQLi

考点

  • PHP版本小于5.3存在%00截断

  • regexp进行盲注

wp

直接给了提示

用户名输入admin' or 1=1 #会提示hacker

发现只要存在'就会弹出hacker,再看一下给的语句,如果过滤了',那可以用的方式就剩下转义,但是转义之后无法把最后面的单引号取掉

一时没有头绪。试了一下/robots.txt,提示访问/hint.txt

基本上全过滤了,还剩下\,regexp,/**/&^|

在返回包中可以看到PHP版本为5.2,在版本小于5.3是可以进行字符串截断的,再用;就可以进行语句闭合

前半句查询username肯定是空,接着就要看怎么构造payload了。虽然过滤了or,但是可以用||替代

最后payload应该是这样子

但是过滤了select,最终payload

exp

结果是yoU_Will_neVer_knoW7788990,再全转成小写you_will_never_know7788990

flag条件是输入的password和数据库中的相同,在提示中写了

小结

  1. 反斜杠结合PHP的%00截断bypass对'的过滤

  2. ||绕过or

  3. /**/绕过空格

  4. regex进行盲注

最后更新于