访问id=1',发现页面报出MySQL错误,当访问id=1 and 1=1时,页面返回“no hack”,显然是被拦截了,说明有关键词被过滤。使用关键字大小写的方式尝试绕过,如And 1=1(任意字母大小写都可以,如aNd 1=1,AND 1=1等),可以看到访问id=1 And 1=1时页面返回与id=1相同的结果,访问id=1 And 1=2时页面返回与id=1不同的结果,得出存在SQL注入漏洞的结论,如图1和图2所示。
图1 访问id=1 And 1=1的结果
图2 访问id=1 And 1=2的结果
使用order by查询字段数量,发现还是被拦截了,如图3所示,还是利用修改关键字大小写来绕过它,尝试只改order这个单词,结果发现当order改成Order后,页面显示正常,说明by并没有被拦截,如图4所示,最终通过尝试,发现数据库表中存在3个字段。
图3 order by被拦截
访问id=1',发现页面报出MySQL错误,接着访问id=1 and 1=1和id=1 and 1=2时,发现页面提示“no hack”,即关键字被拦截。尝试使用内联注释绕过。访问id=1/*!and*/1=1时,页面返回与id=1相同的结果;访问id=1/*!and*/1=2时,页面返回与id=1不同的结果,如图12和图13所示。
图12 访问id=1 /*!and*/1=1时的结果