说在开头:文章是我通过查询资料后按照自己的理解总结出来的,所以如果有说法不对的地方,欢迎大佬指正~
1.进入less-1的题目以后,我们可以看到这道题的提示“请输入ID作为带数值的参数”:
2.我们根据题目提示,尝试在URL中加上“?id=1”、“?id=2”,可以看到看到从数据库中查询到的用于login登录的用户名和密码:
- 我们要找的是网站后台管理员的用户名和密码,目的是拿到网站的权限,从而去拿到服务器权限。
- 但在这个靶场中,它的主要目的是让你学会使用SQL注入去拿数据库中的数据,所以我们最终得到的是所有用于login登录的用户名和密码。
3.判断是否为注入点。
- 首先先试一下最经典的“and 1=2”,可以看到,我们在后面添了“and
1=2”这个错误的条件,但是页面没有报错依然保持原样,所以可知这个方法测试不出来:
- 我们接下来尝试在参数后面加括号、单引号、双引号之类的,来构造错误的查询语句,从而触发数据库报错。
经过测试,发现用单引号能触发错误,使页面报错。
- 在这里,我们所说的“报错”是指页面发生变化,不管它回显的页面是什么、不管页面出现了什么提示,只要页面发生了变化,就算是触发了数据库报错。
- 还有一些进阶的情况,即出现“不要搞后台”之类的警告,则说明设置了关键字的过滤规则,可以视情况而定选择修改大小写、用/**/代替空格等等。方法不固定,根据情况灵活变化,反正只要能绕过规则就行了。
- 报错后,在其后添加注释符,如果回显恢复正常,那么就是注入点。
注释符可以是#、–+、–空格。
经过测试,–+能使页面恢复正常。
至此,注入点判断成功。
4.判断字段数量。我们找到注入点以后,首先用order by来猜解字段数量。
- 这里需要注意的一点是,当猜的字段数>真实字段数时,页面会报错;但猜的字段数<=真实字段数时,都不会报错。所以一定要找到那个临界的值才行,那才是真实的字段数。
通过测试可知,字段数为3。
5.接下来就是判断可显字段。
- 这里遇到一个问题,当id为1时,输入查询语句以后并没有看到回显的数字,这是因为id为1时在数据库中是存在数据的,在存在数据的情况下,会优先输出数据库中的内容:
- 一般情况下,我们可以在参数前加一个负号。
(如果加负号会报错的话,就换一个数据库里没数据的id参数)
可以看到,可显字段是第2个和第3个。
6.爆出当前用户名和数据库名:
union select 1,user(),database()
7.根据数据库名爆出数据表名:
union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=”security”
- 通过group_concat()函数可以显示字段中的所有内容,否则只显示第一个。
8.根据数据表名爆出字段名:
union select 1,group_concat(column_name),3 from information_schema.columns where table_name=’users’
9.爆出所有用户名和密码:
union select 1,group_concat(username),group_concat(password) from users
less-1过关!