Privilege Escalation特权提升及防御思路

前言

这是 tryhackme 渗透测试章节的最后一个房间。原本想谷歌机翻然后我手工看一下,但是感觉这样练习不了英文,所以全部手工翻译,实在翻不出来再交给谷歌。

shell

权限提升,简称提权。在讲提权之前,先说说常见的 shell 以及它们的加固。

shell 是什么?

在我们深入了解发送和接收 shell 的复杂性之前,理解 shell 是什么很重要。

简单来说,shell 就是我们与命令行环境 (CLI) 交互时使用的工具。例如,Linux 中常见的 bash 或 sh 程序都是 shell 的示例。Windows 中的 cmd.exe 和 Powershell 也是如此。

有时我们可在目标机上进行 RCE,在这种情况下我们希望利用此漏洞来获取在目标机的 shell。

简单来说,我们可以强制远程机器向我们发送对其的命令行访问(reverse shell),或是我们主动连接到该机器上并获得该机器的 shell。

reverse shell 就是反向/反弹 shell 的意思 bind shell 就是正向 shell

工具篇

我们将使用多种工具来接收 reverse shell 和发送 bind shell。

通常我们需要恶意的 shell code 以及和生成的 shell 交互的方法。我们可通过以下几个工具实现这一点:

网络安全入门笔记,需要的小伙伴可以自取!

1. Netcat:

Netcat 号称网络的 “瑞士军刀” 。它用于执行各种网络交互,包括在枚举期间抓取 banner 等。

然而对于我们来说更重要的是它可以用于接收反弹 shell 或者连接到目标机上的 bind shell 的远程端口。

注:默认情况下,Netcat shell 非常不稳定(容易丢失),所以后文会介绍改进的技术。

2. Socat:

Socat 就像 steroids(英文原意是类固醇) 上的 netcat。它可以做所有相同的事情,甚至更多。Socat shell 通常比 netcat shell 更稳定,从这个意义上说它远远优于 netcat。然而 socat 相比于 netcat 有以下两个问题:

1. Socat 语法比 Netcat 难

  1. Socat 普及性不如 Netcat。默认情况下,几乎每个 Linux 发行版都安装了 Netcat。但它们默认情况下很少安装 Socat。

这两个问题都有解决方法,我们将在后面介绍。

Socat 和 Netcat 都有用于 Windows 的 .exe 版本。

3. Metasploit – multi/handler:

注意,以下有效载荷、有效负载等指的是 payload 的意思。

Metasploit 框架的 auxiliary/multi/handler 模块与 socat 和 netcat 一样,提供了用于接收反弹 shell 的功能。由于是 Metasploit 框架的一部分,所以 multi/handler 提供了一种成熟的方式来获取稳定的 shell,并提供了多种进一步的选项来改进捕获到的 shell。它也是与 meterpreter shell 交互的唯一方式,也是处理 staged payload (分阶段 payload?)的最简单方式。

4. Msfvenom:

与 multi/handler 一样,msfvenom 在技术上是 Metasploit 框架的一部分,但是,它作为独立工具提供。Msfvenom 用于动态生成 payload 。虽然 msfvenom 可以生成除 reverse 和 bind shell 之外的 payload,但这不是本文的重点。

Msfvenom 是一个非常强大的工具,因此我们将在专门的任务中更详细地介绍它。

除了我们已经介绍过的工具之外,还有许多不同语言的一些 shell 存储库。其中最突出的一个是 Payloads all the Things。此外,PentestMonkey Reverse Shell Cheatsheet 也很常用。

除了这些在线资源,Kali Linux 还预装了位于 /usr/share/webshells 的各种 webshell。 SecLists repo 虽然主要用于单词列表,但也包含一些用于获取 shell 的非常有用的代码。

Shell 的类型

我们主要对两种 shell 感兴趣:Reverse shell 和 bind shell。

• Reverse shell(反弹/向 shell) 是指目标被迫连接到您的计算机。在您自己的计算机上,您可以使用上一个任务中提到的工具之一来设置用于接收连接的侦听器。

反向 shell 是绕过防火墙规则的好方法,因为防火墙规则可能会阻止您连接到目标上的任意端口。

反向 shell 的缺点是当通过 Internet 从一台机器接收 shell 时,您需要配置自己的网络以便接受它。(最经典的例子就是使用阿里的云服务器接收反弹的 shell 时要修改安全组规则)

• bind shell(正向 shell) 是指在目标上执行代码时,我们直接让其打开一个附加到 shell 上的监听器(即端口)。端口将会向互联网开放,这意味着您可以连接到代码打开的端口并以这种方式获得 RCE 的能力。这具有不需要在您自己的网络上进行任何配置的优点,但可能会被保护目标的防火墙阻止。

一般情况下,反向 shell 更容易执行和调试。以下会给出反弹 shell 和 正向 shell 的示例,请注意它们间的区别。

bind shell 的例子:

bind shell 不太常见,但仍然非常有用。以下图为例,在左侧同样是攻击者的计算机,而右侧依然是我们的模拟目标。但是为了稍微调整一下,这次我们将使用 Windows 目标。首先,我们在目标上启动一个侦听器——这次我们告诉它连接完毕后执行 cmd.exe。然后,在侦听器启动并运行的情况下,我们从自己的机器连接到新打开的端口。

在目标机上: nc -lvnp <port> -e "cmd.exe"

在攻击机上: nc <目标机ip> <port>

请在此添加图片描述

如您所见,这再次让我们在目标机上执行代码。请注意,这并非特定于 Windows。这里要理解的重要一点是目标在监听特定端口,然后我们主动连接到目标的这个端口。

与此任务相关的最后一个概念是交互性。shell 可以是交互式的,也可以是非交互式的。

• 交互式:如果您使用过 Powershell、Bash、Zsh、sh 或任何其他标准 CLI 环境,那么您将习惯于交互式 shell。交互式的 shell 允许您在执行程序后与程序进行交互。例如,采用 SSH 登录的提示:

请在此添加图片描述

在这里您可以看到它以交互方式询问用户键入 yes 或 no 以继续连接。这是一个交互式程序,需要交互式 shell 才能运行。

• 非交互式 shell 不会给你那种 “奢侈” 。在非交互式 shell 中,您只能使用不需要用户交互即可正常运行的程序。不幸的是,大多数简单的反向 shell 和正向 shell 都是非交互式的,这会使进一步的利用变得更加棘手。让我们看看当我们尝试在非交互式 shell 中运行 SSH 时会发生什么:

请在此添加图片描述

请注意,whoami 命令(非交互式)执行地很好,但 ssh 命令(交互式)根本没有给我们任何输出。

注:交互式命令的输出确实会出现在某个地方,但是,弄清楚在哪里是您自己尝试的练习。可以说交互式程序在非交互式 shell 中不起作用。此外, 上图的 listener 命令是用于演示的攻击机独有的别名,是 sudo rlwrap nc -lvnp 443 命令的简写方式,将在后续任务中介绍。除非已在本地配置别名,否则它将无法在任何其他计算机上运行。

回答下列问题:

  1. 哪种类型的 shell 会回连到您计算机上的侦听端口,反向 ® 或绑定 (B)?

  2. 您已将恶意 shell 代码注入网站。您收到的 shell 可能是交互式的吗?(是或否)

  3. 使用 bind shell 时,您会在攻击者 (A) 还是目标 (T) 上执行侦听器?

Netcat

如前所述,Netcat 是渗透测试人员工具包中最基本的工具之一,涉及任何类型的网络。有了它,我们可以做各种各样有趣的事情,但现在让我们关注和 netcat 相关的 shell。

++Reverse Shells++

在前面的任务中,我们看到反弹 shell 需要 shellcode 和一个侦听器。执行 shell 的方法有很多种,因此我们将从查看侦听器开始。

使用 Linux 启动 netcat 侦听器的语法如下:

nc -lvnp <端口号>

• -l 用于告诉 netcat 这将是一个监听器

• -v 用于请求详细输出

• -n 告诉 netcat 不解析主机名及DNS,在此不过多阐述。

• -p 表示要监听的端口。

上一个任务中的示例使用 443 端口。实际上,您可以使用任何您喜欢的端口,只要还没有服务使用它即可。

请注意,如果您选择使用小于 1024 的端口,则在启动侦听器时需要加上 sudo

使用众所周知的端口号(80、443 或 53 是不错的选择)通常是个好主意,因为这更有可能通过目标上的出站防火墙规则。比如以下命令在 443 端口上打开一个侦听器:

sudo nc -lvnp 443

然后,我们可以使用任意数量的 payload 连接到以上侦听器,具体取决于目标上的环境。

++Bind Shells++

如果我们希望在目标上获得 bind shell,那么我们可以假设已经有一个侦听器在目标的特定端口上等待我们,我们需要做的就是连接到它。其语法相对简单:

nc <目标IP> <目标上的特定端口>

在这里,我们使用 netcat 在我们选择的端口上建立到目标的出站连接。

加固 Netcat shell

在得到一个 Netcat shell 之后,我们首先应该做什么?

答案是加固我们得到的 shell!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值