第一关
第一关属于单引号注入,很容易尝试出来,但是我有一点不理解的是输入错误的id为什么还可以返回正确的结果,应该是php过滤方面的问题,等学习了再填坑。如图所示:
图中我加了sql语句显示便于初期学习,当id为2as时也可以正确显示。
第二关
这一关是属于整形注入,当我们在id后面添加单引号时,观察报错信息,the right syntax to use near ‘’ LIMIT 0,1’ at line 1,从这里可以看出单引号和后面的语句爆了错,简单猜测,就是sql语句中不包含引号,回显出sql语句SELECT * FROM users WHERE id=2’ LIMIT 0,1 故此关注入可以直接进行union查询。
第三关
在URL后面加上一个斜杠http://localhost/Less-3/?id=2\,观察报错信息,
syntax to use near ’ ‘2’) LIMIT 0,1 ’ at line 1,最外面的一对单引号是mysql报错时加上的,不用看,我们的参数2\是被单引号和一个右括号包括,可以猜测,需要闭合单引号和括号,经实践确实如此,使用–+将后面的单引号和右括号注释掉,
http://localhost/Less-3/?id=2') and 0 union select 1,version(),2 --+
回显出来的sql语句
SELECT * FROM users WHERE id=('2') and 0 union select 1,version(),2 -- ') LIMIT 0,1
第四关
模仿第三关先使用单引号闭合,发现并没有报错,然后换一下双引号,
报了一个这样的错误:
syntax to use near ' "1"") LIMIT 0,1 ' at line 1
可以看出这个是双引号和括号来进行闭合,只要在右边加上双引号和右括号即可。
http://localhost/Less-4/?id=1") and 0 union select 1,version(),3 --+
观察一下回显的sql语句,和猜测的一样。
SELECT * FROM users WHERE id=("1") and 0 union select 1,version(),3 -- ") LIMIT 0,1
至于单引号没有报错的原因是,php中双引号里可以包括单引号,具体等研究了php再详细说明。
总结
通过这四关的基础练习,感觉自己在一些方面还需要深入研究,例如PHP的mysql连接部分,mysql报错源码之类的,这样更有利于分析sql注入。