前期准备:
首先,需要搭建 Sqli-Labs 靶场环境。可以从相关网站下载靶场源代码,并按照说明进行安装和配置。
注入点判断:
1. 通常通过在输入字段中尝试添加单引号、双引号、括号等特殊字符,观察页面返回的结果来判断是否存在注入点。
2. 不同的关卡可能具有不同的特征,例如有的是 GET 请求,有的是 POST 请求。
确定注入类型:
根据报错信息或其他特征,确定是字符型注入还是整型注入,或者其他特定类型的注入。
判断列数和回显位置:
1. 使用 order by 语句加上数字,递增地测试,直到出现报错,从而确定列数。
2. 通过构造特定的联合查询语句,如 union select 1,2,3,来判断回显位置,即确定数据会显示在结果中的哪个位置。
获取数据库信息:
1. 利用合适的函数和语句来获取数据库名、表名、列名等信息。例如,使用 information_schema 库中的相关表来查询。
2. 常用的函数有 group_concat() 用于拼接查询结果,select group_concat(schema_name) from information_schema.schemata 可获取所有库名。
报错注入:
某些情况下,使用报错注入技术。例如,构造特定的语句使数据库报错,同时将想要获取的信息显示在报错中。
布尔型盲注:
当没有明显回显时,可采用布尔型盲注。通过发送不同的请求,根据页面响应的差异来推断信息。
其他技术和注意事项:
1. 对于一些过滤了特定字符的情况,可能需要使用十六进制转码等方法来绕过过滤。
2. 注意不同关卡的特殊要求和限制条件,针对性地构造注入语句。
3. 学习和了解各种数据库函数的用法,以及它们在注入中的应用。
例如,在 Sqli-Labs 的某一关中,假设确定是字符型注入且列数为 3,回显位置在第 2 列,要获取数据库名,可以构造如下语句:id=-1' union select 1,(select group_concat(schema_name) from information_schema.schemata),3--+。
sqli-labs是一个用于学习和实践SQL注入技术的开源平台。它提供了多个不同的漏洞场景,每个场景都代表了一个特定类型的SQL注入漏洞。用户可以通过攻击这些场景来学习和掌握SQL注入技术,同时了解如何修复和防范这些漏洞。
解题步骤:
判断注入类型:
通过输入不同的参数值,观察页面的响应,判断是字符型注入还是数字型注入。
输入?id=1 正常
输入?id=1' 报错 ' .0 '
输入?id=1'--+ 正常
判断是字符型注入,闭合方式是'
?id=1 正常
?id=1" 正常
?id=2" 正常
?id=1"--+ 正常
?id=;/';[]' 报错 ' ;/';[]'') LIMIT 0,1 '
判断是字符型注入,闭合方式是')