DVWA(Damn Vulnerable Web Application)的用户数据全部存放在MySQL数据库的dvwa库users表中,查看用户就是登录数据库执行查询,没有比这更直接的路径了。作为安全演练平台,DVWA本身不提供图形化的“用户管理”页面,这一点和普通CMS系统差异很大,搞懂它的用户存储机制,你才能真正掌握靶场环境,也能顺带摸清SQL注入漏洞的攻击原理。
先搞清你指的“用户”是哪个世界的人
很多人一上来就查数据库,结果发现表里只有几个测试账号,就开始疑惑“怎么这么少”,这里有个关键认知要先建立:DVWA场景里有两类“用户”,搞混了,方向就错了。
- 应用层用户:指存储在
users表里的虚拟账号,就是你在登录页用admin/password、gordonb/abc123这些组合登录进去的测试身份。 - 系统层账户:指搭建DVWA这台服务器本身的Linux用户或Windows账户,比如
root、www-data,以及你为了装环境自己创建的运维账号。
如果你的目标是安全测试,那你要查的当然是应用层用户,也就是数据库里那张用户表,如果你是想知道这台机器上被创建了多少个Linux系统账号,那得去看/etc/passwd文件,和DVWA程序本身没有直接关系,下面的内容,我重点讲第一种,顺带会说一句第二种的查看方法,免得你绕路。
怎么看dvwa有多少用户:从数据库源头说起
DVWA的前端做得很有欺骗性它故意不给你做“用户管理”的界面,就是为了逼你直接面对数据库,想查用户,最稳妥的办法就是去MySQL里翻dvwa库的users表,根据你的实际环境,下面两条路任选一条。
在phpMyAdmin里数人头(最快最直观)
绝大多数人用的都是phpMyAdmin图形界面装DVWA,查用户基本就是鼠标点几下。
- 打开浏览器,访问
http://你的IP/phpmyadmin/,用MySQL的root账号登录进去。 - 左侧数据库列表里,找到名为
dvwa的库,展开它,找到users表。 - 点击
users表右侧的“浏览”按钮,你会看到所有用户记录按行排列,每一行就是一个用户。 - 页面底部会直接显示“行数:5”或者类似的数字,这个数字就是当前DVWA里的用户总量。
在users表里,你会看到几个熟悉的面孔:admin、gordonb、1337、pablo、smithy,这就是DVWA自带的五个基础测试用户,每个用户都带着user_id、avatar、password等字段,其中password是MD5加密后的哈希值,别指望直接看到明文,顺带提一句,登录DVWA的密码就是靠这张表验证的,你在登录页面输什么账号,本质上就是在和这张表里的记录做比对,有关dvwa默认用户名是什么这个疑问,答案也在其中,五个用户名,密码在官方文档的README里写得清清楚楚。
在命令行里直接数(适合无图形界面环境)
如果你用的是云服务器或者纯命令行LAMP环境,没有装phpMyAdmin,那就用MySQL自带的命令行客户端,一样能看。
- SSH登录到服务器,输入
mysql -u root -p回车,然后输入你的数据库密码。 - 进入MySQL交互界面后,先切换库:
use dvwa; - 然后执行这条查询:
SELECT user_id, user, avatar FROM users; - 屏幕会打印出所有用户的清单,最后一行的
5 rows in set就是答案。
如果你想数得更精确,比如看看有没有人偷偷往里插了后门账号,可以换个计数方式:
SELECT COUNT() AS 用户总数 FROM dvwa.users;
这条命令会直接返回一个数字,比如5,这时候你就能拍着胸脯说:“我看了,DVWA服务器当前有5个用户。”
Docker容器环境下的特殊操作(查容器账号才是关键)
现在很多新手图省事用Docker拉DVWA镜像,这时候情况稍微有点不同。Docker容器里的MySQL通常不会把3306端口暴露给宿主机,你在外面直接连数据库是连不上的,但只要你能进容器,办法总比困难多。
- 先看容器列表:
docker ps,找到DVWA对应的容器ID(通常是CONTAINER ID那一列)。 - 进入容器内部:
docker exec -it 容器ID bash。 - 在容器里登录MySQL:
mysql -u root -p,密码一般是dvwa或p@ssw0rd,具体看镜像的启动日志。 - 最后执行
use dvwa; SELECT COUNT() FROM users;,照猫画虎就行。
这里有个容易踩的坑:有些Docker镜像把MySQL数据存到了外挂卷里,你在容器里看到的数据量可能和宿主机的数据卷不一致,所以用Docker查用户的时候,尽量用docker inspect看一下挂载情况再动手,别查完就急着下结论,要说dvwa的数据库在哪里这个问题,Docker容器的答案就是“在容器内部的数据卷里”。
钻进数据库内部:users表的结构里藏着什么门道
你光数了人数还不够,DVWA里的用户数据远不止“几个账号”这么简单,它的users表设计得很有门道,是专门给SQL注入靶子留的。
| 字段名 | 类型 | 含义说明 | 攻击视角 |
|---|---|---|---|
| user_id | int(11) | 自增主键,用户唯一ID | 注入时常用1 OR 1=1撞这个字段 |
| first_name | varchar(15) | 名 | 存储型XSS的常用测试点 |
| last_name | varchar(15) | 姓 | 同上 |
| user | varchar(15) | 登录用户名 | 你真正想拖库拿的东西 |
| password | varchar(32) | MD5加密后的密码 | 拖库后拿去彩虹表跑 |
| avatar | varchar(70) | 头像路径 | 文件上传漏洞的线索 |
这张表的设计,本身就透露了DVWA的核心教学意图:它故意留下一堆看起来人畜无害的字段,让你在注入的时候试个痛快,学SQL注入,第一课就教你拖库;拖库拖什么?就是拖这张users表的全部内容,你看一下这张表的结构,再看一眼互联网上的SQL注入攻击Payload,会发现攻击者用的语法和你想查用户数量的语法一模一样都是SELECT ... FROM users。
也正因为如此,你在本地查看这些用户时,同时就该意识到:这种查询方式本身,就是一个低危的SQL注入漏洞的“正常”形态,你不会真的去攻击自己的靶场,但你得能看懂这条查询在现实中意味着什么。
忘了数据库也没事:通过前端页面反向推断用户量
除了直接进数据库查看,还有一个取巧的办法,就是利用DVWA前端的“用户信息”页面,这招在你是初学时尤其好使,因为它不需要任何数据库工具,而且能让你直观体会到“前端展示的数据来自哪里”。
- 登录DVWA,把安全级别调成
low。 - 点击左侧导航栏的
SQL Injection模块。 - 在输入框里随便填一个用户ID,比如
1,点击提交。 - 页面上会回显
ID: 1、First name: admin、Surname: admin,说明用户ID=1确实存在。
接着你可以手动改ID数字,试2、3、4、5,一直试到页面不再显示结果为止,比如你试到ID=6时页面空白,那就能确定这个DVWA环境里至少有5个用户,最多不超过6个,这种办法虽然笨,但能让你切身体会“后端数据如何被前端查询”这也是DVWA存在的最大价值。
顺带一提,如果你在这个输入框里填1' OR '1'='1,它会直接爆出该级别下的全部用户数据,这绝不是让你去干坏事,而是让你明白:一旦应用程序把用户输入拼进SQL语句,所有用户信息就会像纸糊的窗户一样一捅就破,行业共识认为,SQL注入是整个Web安全里最容易上手、也最容易被忽视的威胁,而DVWA正是理解它的最佳入门道具。
多方法快速对比:记不住就保存这张表
与其背命令,不如把几种查看方式放在一起对比,以后实战时按需选路。
| 查看方式 | 难度 | 前置条件 | 精确度 | 适用场景 |
|---|---|---|---|---|
| phpMyAdmin浏览表 | 简单 | 已配置phpMyAdmin | 直接显示行数,精确 | 本地学习、有图形界面的环境 |
| MySQL命令行查询 | 中等 | 能联系到数据库端口或Socket | 精确到行数 | 云服务器、无GUI环境 |
| 前端SQL注入模块回显 | 较难 | 登录DVWA且级别为low | 间接推断,存在误差 | 学习使用,体验手动注入流程 |
| Docker exec进容器 | 中等 | 容器运行中 | 精确,但注意数据卷 | 所有Docker部署方式 |
从实操来看,对大多数人最省事的是第一种,对进阶学习者最推荐的是第二种,第三种则适合用来验证“前端展示即数据来源”的理解,算是一种趣味玩法。
关于dvwa怎么添加用户这个绕不开的问题,不建账号也能变出更多记录来,你直接往users表里插一行数据,
INSERT INTO dvwa.users (user_id, first_name, last_name, user, password, avatar) VALUES ('6', 'test', 'test', 'testuser', MD5('123456'), 'test.jpg');
然后你再执行SELECT COUNT(),总数就从5变成6了,这种操作虽然简单,但它帮你把数据库的增删改查串起来了,也能让你明白“多用户系统”的底层逻辑其实就是一行行数据的增删。
和真实网站用户体系的分水岭
弄懂DVWA之后,你可能会觉得“这太简单了”,确实简单,但这恰恰是它作为教学工具的价值所在,真实网站的users表必然比这个复杂得多:
- 真实表会有几十上百个字段,包含邮箱、手机号、盐值、登录日志、支付信息等,不会像DVWA这样光秃秃的。
- 真实表的密码绝不会是裸MD5哈希,必然是加盐哈希或专门的密码哈希算法(比如bcrypt),更不会一剑封喉地用
MD5这种已知可破解的算法。 - 真实表会被权限系统、防火墙、参数化查询层层保护,不会让你用
1' OR '1'='1就能全量拖走。
但你掌握的原理是一样的:任何用户数据,最终都存储在数据库的某个具体表中,查它就是一条SELECT语句的事,DVWA帮你把这层窗户纸捅破了,剩下的,就是你把这条语句练习到条件反射的程度。
如果你还关心dvwa能看到注册用户吗这类延伸问题,答案是肯定的,DVWA极度透明,你不仅能看能数,还能随意插拔数据,这也构成了它的核心价值一个没有秘密的靶场,把数据库的底裤扒给你看,教你怎么在真实系统里守住这条底线。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/787762.html

