简单注入(MOCTF)

  1. 表面分析

进入题目后没有发现明显的注入点,f12查看源码后得到提示。
简单注入(MOCTF)
id=1时
简单注入(MOCTF)
id=2时
简单注入(MOCTF)
id=3时
简单注入(MOCTF)
id=4时则不再有提示了,由上述几个提示我们可以总结出来,flag就存在于database()当中,而且flag存在于一个长度大于20的表当中。

  1. sql注入
    经过简单的测试,union,or,substr和空格都被过滤了,union被过滤了表示我们无法使用联合查询了,or和||被过滤了我们也无法使用报错注入,排除下来我们常用的只有布尔类型和基于时间的盲注了,我们采取较为简单的第一种方法,substr被过滤我们可以用mid来进行代替,其作用和substr相似。空格被过滤了我们就采取()的方式进行绕过。
    在进行语句最后的闭合时,本以为#没有被过滤,但使用#闭合时并没有起到作用,查阅了资料后发现可能是由于#无法被转义的原因,故采取and(1)='1的方式进行闭合。
    经过测试后,最终的payload为
    ?id=1’and(ascii(mid((select(group_concat(table_name))from(information_schema.tables)where(table_schema=database())),1,1))=100)and(1)='1
    实现情况和脚本如下:
    简单注入(MOCTF)
    简单注入(MOCTF)
    简单注入(MOCTF)