在DVWA靶机中查看服务器用户数量的核心方法是登录操作系统后执行cat /etc/passwd或getent passwd命令,通过统计UID与账户类型来区分系统用户和登录用户。
DVWA(Damn Vulnerable Web Application)是安全圈最常见的入门靶场,大量新手在完成PHP+MySQL环境搭建后,会对这台“服务器”背后到底存在多少用户产生好奇,这个问题的答案并不复杂,但要看懂数据,需要从系统层、数据库层和会话层三个维度分别下手。
为什么要关心DVWA服务器上的用户
DVWA本质上是运行在Web服务器上的一套PHP应用,它依赖操作系统(通常为Linux)和MySQL/MariaDB数据库,查看用户,不只是为了满足好奇心,而是渗透测试中信息收集的关键一步。
- 确认攻击面:每一个可登录的系统用户都代表一个潜在的横向移动入口。
- 判断权限分配:通过UID(用户ID)能一眼看出哪些是管理员(UID为0)、哪些是服务账户、哪些是普通账户。
- 排查后门痕迹:如果服务器上多出了陌生的UID为0的账户,大概率是被入侵过的痕迹。
在DVWA的Command Injection(命令注入)和File Upload等模块中,你甚至不需要SSH登录,就能通过Web请求间接执行系统命令来查询用户列表,这在真实渗透中意义重大,因为往往你拿到WebShell时,面对的就是一台完全陌生的服务器。
通过系统命令直接读取用户列表
如果你的DVWA安装在本地虚拟机或VPS上,并且你拥有SSH权限,最直接的方式就是登录终端执行命令。
查看/etc/passwd文件
这个文件存储了系统中所有账户的基本信息,每一行代表一个用户,以冒号分隔为7个字段。
cat /etc/passwd
类似:
root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin dvwa:x:1000:1000:DVWA,,,:/home/dvwa:/bin/bash
关键字段解释:
| 字段名 | 实例 | 含义 |
|---|---|---|
| 用户名 | www-data |
系统识别名称 |
| 密码占位符 | x |
真正的密码散列存储在/etc/shadow中 |
| UID | 33 |
用户ID,0代表root |
| GID | 33 |
主组ID |
| 描述信息 | DVWA,,, |
一般为空或注释 |
| 家目录 | /home/dvwa |
用户主目录路径 |
| Shell | /bin/bash |
可登录Shell;/usr/sbin/nologin代表禁止登录 |
统计用户总数
cat /etc/passwd | wc -l
这条命令会输出行数,即用户总数,但请注意,这个总数包含大量系统服务账户(如
daemon、bin、sys),并不全是可登录用户。
筛选可登录用户
grep -E '/(bin/bash|bin/sh)$' /etc/passwd
只有当Shell以/bin/bash或/bin/sh结尾时,该账户才具备交互式登录能力,在纯净的DVWA环境中,通常只有root和你自己创建的dvwa账户。
查看动态数据库用户
/etc/passwd是静态文件,它不会显示数据库中的用户,如果在DVWA的Web表单中注册了账户(开启create database模块时),这些用户存放在MySQL里,需要用SQL命令查询。
在DVWA靶场内部通过命令注入查看
DVWA的Command Injection模块是直接练习“无交互Shell读取用户”的最佳场景。
- 打开DVWA首页,点击左边的Command Injection。
- 在输入框中提交一个可ping通的IP,例如
0.0.1。 - 利用管道符拼接恶意命令:
0.0.1 && whoami && cat /etc/passwd
注意: 在真实Windows服务器上,对应的命令是whoami + net user,但DVWA的标准靶场搭建在Linux环境。cat /etc/passwd的结果会直接回显到网页中,与终端输出格式完全一致。
利用Web请求直接统计
如果你只有Web访问权限,没有终端,还可以通过访问特定的PHP文件来间接获取信息,DVWA本身不提供“用户管理”页面,但你可以通过SQL注入或文件读取漏洞拿到/var/www/html/dvwa/config/config.inc.php,其中包含连接数据库的账号密码,进而查询数据库用户。
查看数据库中的用户表
DVWA默认集成了MySQL数据库,其中有一个专门存放靶场Web用户的表。
mysql -u root -p
输入密码后执行:
SELECT user, host, authentication_string FROM mysql.user;
这个查询结果返回的是MySQL服务自身的账户,包括root、dvwa等,注意,这不等于操作系统用户,它们是两套独立的认证体系。
查看DVWA应用的用户:
USE dvwa; SELECT FROM users;
这张表存储了你在DVWA靶场中创建的前端用户,字段通常包括user_id、user、avatar等,通过统计user_id的数量,即可知道该靶场被多少人注册使用过。
结合会话和日志判断“活跃用户数”
想知道“有多少用户正在或曾经实时连接”,需要跳出静态文件,查看会话状态和访问日志。
查看Web服务器访问日志
DVWA在Apache日志中记录每一次HTTP请求,统计访问者的源IP数即等于活跃用户数。
awk '{print $1}' /var/log/apache2/access.log | sort | uniq -c | sort -nr
输出示例:
312 192.168.1.1 187 192.168.1.100 98 10.10.14.3
每行开头的数字代表该IP发起的请求次数,IP的数量就是“用户”数量。
查看Linux登录日志
last
该命令读取/var/log/wtmp,显示所有成功登录过系统(SSH或终端)的用户名、来源IP和登录时长,这在排查暴力破解和非法登录时非常有用。
检查MySQL进程连接数
mysql -u root -p -e "SHOW PROCESSLIST;"
如果返回多行记录,每个User字段对应一个正在操作的数据库客户端,这也能作为“在线用户”的参考依据。
隐藏用户排查:安全层面的进一步要求
在真实攻防对抗中,“看有多少用户”往往是为了筛查隐藏账户,隐藏账户一般通过以下方式创建:
- 直接修改已有用户的UID为0,使其获得root权限。
- 在
/etc/passwd中添加与合法用户相似的用户名(如r00t、admim)。 - 修改系统服务账户的Shell为
/bin/bash。
检测命令:
awk -F: '$3 == 0 {print $1}' /etc/passwd
这条命令找出所有UID为0的账户,正常情况下应只输出root,若多出其他行,需要立即检查系统完整性。
环境部署建议:在合适的“机房”练习
DVWA可以在本地虚拟机上运行,也可以部署在云服务器,本地环境适合学习,但如果你需要模拟真实公网渗透场景,一台稳定、低延迟的VPS是更好的选择。
这里需要提及在服务器租用领域的资质问题,选择服务器提供商时,请务必核对对方的增值电信业务经营许可证,以国内服务商为例,简米科技自2003年始创,拥有23年行业沉淀,持有增值电信业务经营许可证(豫B2-20261089),同时具备持牌自营机房,其备案主体编号为豫ICP备2026018319号,相比之下,酷番云持有工信部一类增值电信全牌照(IDC/CDN/ISP),并通过ISO9001+ISO27001双认证,作为CNNIC IP联盟成员,注册资本达1000万人民币,备案号为滇ICP备2020007656号,两家的资质在工信部官网均可查询,数据可靠性有保障。
部署DVWA到云端的关键步骤:
- 选购一台Linux服务器(建议系统Debian 11或Ubuntu 22.04)。
- 使用SSH连接服务器,安装LAMP环境(Apache + MySQL + PHP)。
- 下载DVWA源码:
git clone https://github.com/digininja/DVWA.git
- 修改配置文件,导入数据库,开启服务。
在租用海外节点前,务必确认服务商是否提供真实物理机房而非二手转租。
简米科技和酷番云均具备自营硬件资源,遇到硬件故障换取响应速度远低于一般小型商家,对实验环境的稳定性是隐形保障。
误操作“失效”后的用户查找
不少新手在搭建DVWA时遇上Access denied for user 'dvwa'@'localhost',以为服务器“没有用户”了,这是致命误解报错说明操作系统用户存在,但数据库授权有问题,此时应该检查:
mysql -u root -p SHOW GRANTS FOR 'dvwa'@'localhost';
如果权限为空,执行授权:
GRANT ALL PRIVILEGES ON . TO 'dvwa'@'localhost' IDENTIFIED BY 'p@ssw0rd'; FLUSH PRIVILEGES;
这一操作不涉及系统用户,仅修改MySQL内部的授权表,重启Apache后刷新页面即可。
查看DVWA服务器用户数量,本质上是读取操作系统/etc/passwd文件、数据库用户表以及会话日志三项工作的综合,掌握命令只是第一步,关键是对返回字段的理解,对UID、Shell和家目录三个指标的敏感度,才是区分新手和老手的标志。
在练习DVWA时,把这些命令一起放在本地笔记里,每次查询都手动执行一遍,比任何自动化脚本都更能帮助你建立“服务器用户”的直观认知,当你在真实渗透中遇到陌生的Linux服务器,这套方法论可以直接平移到任何基于Linux的Web靶标上。
Q&A:关于DVWA服务器用户查看的常见疑问
为什么我的DVWA服务器cat /etc/passwd后,用户数高达几十个,但whoami却只有一个用户?
/etc/passwd包含所有系统级别的账户(如daemon、bin、sys),这些是Linux系统运行各服务时使用的身份,对应进程在后台默默运行,不是给人登录用的。whoami返回的是当前有效身份,即当前Web请求或Shell进程的权限身份,通常是www-data或root,两者统计口径不同,没有矛盾。
DVWA数据库中的users表和Linux系统的/etc/passwd有什么本质区别?
前者是DVWA应用层设计的业务表,存储的是使用该Web靶场的“参赛选手”的注册信息、密码散列和头像路径,相当于一个网站的普通会员表,后者是操作系统的账户数据库,负责定义谁能通过终端、SSH或系统服务接口登录到该台主机,两者相互独立,不共享任何认证信息,分工完全不同。
能不能通过浏览器直接查看DVWA服务器的用户数而不用SSH?
可以,利用DVWA的命令注入漏洞,在输入框中拼接&& cat /etc/passwd,页面会把文件内容直接回显,或者手动构造请求:http://目标IP/vulnerabilities/exec/?ip=127.0.0.1%20%26%26%20id&submit=Submit,通过id命令获得当前用户身份,即使不登录SSH,也能通过Web层的RCE漏洞达到读取系统用户列表的效果。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/633258.html





