shell通过堡垒机传输文件到目标机器

shell通过堡垒机传输文件到目标机器,第1张

除了传统的先将文件传输到堡垒机再从远端网络内部进行传输 *** 作外,可以使用以下两种方法传输文件

一、使用ssh端口转发(隧道)功能

先使用命令在本地打开一个通过堡垒机映射到远端目标机的端口:

此时可以向本地的这个端口传输文件,文件会被自动转发到目标机器

二、直接配置scp的代理参数,实现文件转发

1、可以通过利用IIS溢出漏洞来进行端口扫描,从而发现系统中暴露的端口,从而突破防火墙的限制。

2、可以通过利用IIS溢出漏洞在目标主机上安装反向shell,从而实现远程控制。

3、可以通过利用IIS溢出漏洞绕过防火墙,来实现远程控制和数据泄露。

4、可以通过利用IIS溢出漏洞安装后门,从而控制系统,突破防火墙的限制。

5、可以通过利用IIS溢出漏洞,将端口转发至内网,从而让内网的服务脱离防火墙的限制,实现远程控制和数据泄露。

shell连不上,网络却能正常ping通?为何?

通过抓包,发现发送的ioGlobalStdSet(1,ioGlobalStdGet())\n,分成了三次从目标机端发送回来。

分别是:

而且,每一个包都有PSH标志位,这导致不符合shell客户端的判断条件。

现在的解决方案是,修改判断条件,让它在不完整的返回字符串时,也能通过。但现场的抓包文件也体现出了很多网络问题,现在一一分析一下。

TCP通过肯定的确认应答ack实现可靠的数据传输。当发送端将数据发出之后,会等待对端的确认应答,说明数据已经成功到达对端。反之,则数据丢失的可能性很大。

当确认应答ack延迟达到或达不到时,源发送主机则会重发数据,这对目标机来说是灾难,会反复收到相同的数据。而为了对上层应用提供可靠的传输,必须放弃重复的数据包。为此,得引入一种机制,能够识别是否已经接收数据,也能判断是否需要接收。

于是,有了序列号seq。序列号按顺序给发送数据的每一个字节都标上号码的编号。接收端查询接收数据TCP首部中的序列号和数据长度,将自己下一步应该接收的序号作为确认应答反送回去。这样,通过序列号和确认应答号,TCP可以实现可靠传输。

Wireshark判断TCP out-of-order是基于TCP包中SEQ number并非期望收到的下一个SEQ number,则判断为out-of-order。因此,出现TCP out-of-order时,很大可能是TCP存在乱序或丢包,导致接收端的seq number不连续。

反馈ACK指向了一个未知的TCP片段。

这个意思是说ACK反馈的是一个wireshark上不存在的TCP包。很可能是wireshark漏抓了这个包,但却抓到了对端反馈的该报的ack包。

不太好的TCP堆栈实现,可能会要求保活报文必须携带有1个字节的数据负载

TCP Keepalive应该在服务器端启用,客户端不做任何改动;若单独在客户端启用,若客户端异常崩溃或出现连接故障,存在服务器无限期的为已打开的但已失效的文件描述符消耗资源的严重问题。但在特殊的NFS文件系统环境下,需要客户端和服务器端都要启用TcpKeepalive机制。

按照rfc4138的描述,虚假超时重传指的是实际上没有超时,但看起来超时了(根据rtt估算出的RTO超时了,但实际上只是rtt发生了突变而已),进而引起了协议栈的一系列行为,而这些行为不是最优的。spurious retransmission意味着发送端认为发送的包已经丢失了,然后就重传了,尽管此时接收端已经发送了对这些包的确认(确认还没收到或者已经丢失了)。这是需要在发送端抓包,分析原因。如果接收端以前收到过相同的包,接收端就会报spurious retransmission,但是发送端是不会报spurious retransmission的。

导致虚假超时重传的原因有很多种:(1)对于部分移动网络,当网络发生切换时会导致网络延时突增(2)当网络的可用带宽突然变小时,网络rtt会出现突增的情况,这会导致虚假超时重传(3)网络丢包(原始和重传的包都有可能丢包)会导致虚假重传超时。

TCP 模块什么时候将数据发送出去(从发送缓冲区中取数据),以及 read 函数什么时候将数据从接收缓冲区读取都是未知的。

如果使用 PSH 标志,上面这件事就确认下来了:

发送端

对于发送方来说,由 TCP 模块自行决定,何时将接收缓冲区中的数据打包成 TCP报文,并加上 PSH 标志(在图 1 中,为了演示,我们假设人为的干涉了 PSH 标志位)。一般来说,每一次 write,都会将这一次的数据打包成一个或多个 TCP 报文段(如果数据量大于 MSS 的话,就会被打包成多个 TCP 段),并将最后一个 TCP 报文段标记为 PSH。

当然上面说的只是一般的情况,如果发送缓冲区满了,TCP 同样会将发送缓冲区中的所有数据打包发送。

接收端

如果接收方接收到了某个 TCP 报文段包含了 PSH 标志,则立即将缓冲区中的所有数据推送给应用进程(read 函数返回)。

当然有时候接收缓冲区满了,也会推送。

当前的解决方案是,只判断返回的第一个字符。比如:ioGlobalStdSet(1,ioGlobalStdGet())\n,则只需要有i就算返回成功。

另一种的解决办法,通过查看包,可以知道,每次命令的返回都有0a,也就是\n转义字符的十六进制。

所以,可以在主机端获取,直到获取到0a,则表明一个完整的命令接收成功,然后再判断,即可。

买火车票、高铁票、机票,订酒店都打9折的出行工具TRIP, 点击注册

在 Shell 中命令中,通常会使用通配符表达式来匹配一些文件,如以下命令可以查找当前目录下所有后缀为 xml 的文件

Shell 中可以使用的通配符如下:

有的时候,我们匹配的内容里面会存在 , , [ 等通配符中的符号。为了表示他们原来的意思,我们需要使用转义字符 \ ,如 a\[ac\]c 表示匹配 a[a]c 或 a[c]c 。 \ 本身用 \\ 表示。

有时,我们需要对当前目录中的所有文件进行 *** 作,比如用 tar 命令将当前目录下的所有文件打包,又如用 scp 命令将当前目录下的所有文件传输到另一台主机上。以 scp 的使用为例,我们可能会这么写这个命令:

但是,有的时候会发现一些奇怪的问题。比如说,我在本机开着 vim 编辑着一个文件,编辑完了之后 w 保存,然后用上面的命令把当前目录下的文件传到另一台主机。如果你在另一台主机上用 vim 打开这个文件,vim 会报错,

这是因为 vim 在打开一个文件编辑时,会产生一个 Swap file,这个 file 里面存的是编辑时对文档产生的改变,当 Vim 崩溃了之类的问题发生时,可以从这个 Swap file 恢复。Swap file 会在退出该文档时被移除。如果用户试图打开一个已存在 Swap file 的文档时,vim 就会报错,防止多个用户同时编辑同个文件的情况的发生。

由于之前只保存了文档而没有退出,所以这个暂时性的 Swap file 还存在当前目录中,随着 scp 命令一起被传送到了目标主机中。

在我们的期望中,是不希望这个暂时性的文件被传输的。由于 Swap file 的格式为 filenameswp。我们可在开头的 做文章,让 scp 不传输以 开头的文件。

以 开头的文件一般为配置文件,缓存之类,通常都是不希望被传输的。(有时候传输了之后,发现有问题,但是 ls 了半天也没找出问题,因为他们默认是隐藏的,用 ls -a 才能查看)。

通配符看起来和正则表达式很像,但他们并不是同一种东西。 正则表达式中的那些量词的匹配规则和这里提到的几个通配符的匹配规则并不相同。 如正则表达式中 表示重复前一个字符任意次, 而通配符表达式中 表示 0 或多个任意字符。在正则表达式中, ab 表示的是那些 a 后面跟 0 个或多个 b 的字符串,而通配符表达式中 ab 表示的是那些 ab 后面跟任意个字符的字符串。

而且 正则表达式一般是部分匹配的 ,用来匹配内容中的一部分,如用正则表达式 a 去匹配 bac 这段字符串时,匹配是成功的,匹配到的内容是 a 。但是 通配符表达式的话是全部匹配的 ,表达式要匹配整个字符串才算匹配成功,如用通配符表达式 a 取匹配 bac 这段字符串时,匹配是失败的。

在 Shell 命令中,通常 用通配符表达式来匹配文件名 ,而 用正则表达式来匹配一段文本内容 。以 grep 命令为例, grep 命令可以在指定的文件中,挑选出和表达式匹配的那些行,其中指定文件是用的通配符表达式,而文本内容的匹配用的是正则表达式。

今天使用 grep 时,就因为没分清楚他们,忙活了半天。情况是这样的,我想看一个 jar 包里是不是有 pom 相关的文件,所以就输入了下面命令

结果输入了一堆文件,而且很多文件都没有 pom 这串字符串的。输出内容是这样的:

这就是因为我把通配符表达式和正则表达式搞混了,后来知道原因后,用下面的命令才得到想要的内容。

使用 Shell 命令时,要分清楚哪里用的是通配符表达式,哪里用的是正则表达式。

本文讲解在一类专网中,XSHELL登录linux服务器系统时,通过配置信息,可以实现跳转堡垒机直接登录服务器的方法。

出于安全考虑,专网中的应用服务器一般仅允许特定IP远程SSH访问,带来安全防护的同时也增加了进行SSH登录记录密码和SFTP上传维护的繁琐。

(1)配置堡垒机IP和端口:

(2)配置登录用户名和密码

例如选择第一台服务器,点击回车确认。

然后输入对应的密码就可以登录了。

在"221 登录堡垒机" 堡垒机的基础上,增加配置登录服务器的用户名密码。

其中的等待字符:USER,password是“222 登录目标服务器”的关键字。

配置后,点击连接就可以一次登录目标服务器了。

(1)SFTP协议运维

>

shell是渗透中常用的名词,像getshell,webshell,反dshell等等,都和shell相关。

百度百科解释的shell:

在计算机科学中,Shell俗称壳(用来区别于核),是指“为使用者提供 *** 作界面”的软件(命令解析器)。它类似于DOS下的commandcom和后来的cmdexe。它接收用户命令,然后调用相应的应用程序。

简单说用户通过壳访问 *** 作系统内核的服务,也就是由壳到内核,执行系统命令。

getshell:获取到目标的命令执行权限

webshell:指网站后门,通过web服务进行命令执行

反dshell:把命令行的输入输出转移到其它主机

1、webshell下执行命令不交互,为了方便提权或其它 *** 作必须要反dshell。

2、反dshell相当于新增一个后门,当webshell被发现删除后权限不会丢失。

使用whereis命令去确定目标支持的反d方法。

bash反d是实战中用的最多的方法

把命令拆开分析:

1、bash -i代表在本地打开一个bash

2、/dev/tcp/是Linux中的一个特殊设备,打开这个文件就相当于发出了一个socket调用,建立一个socket连接

3、>&后面跟上/dev/tcp/ip/port这个文件代表将标准输出和标准错误输出重定向到这个文件,也就是传递到远程vps

4、远程vps开启对应的端口去监听,就会接收到这个bash的标准输出和标准错误输出。

需要目标主机安装了nc

使用其他版本的 nc

配合命名管道进行反d:

首先使用socket与远程建立起连接,接下来使用到了os库的dup2方法将标准输入、标准输出、标准错误输出重定向到远程,dup2这个方法有两个参数,分别为文件描述符fd1和fd2,当fd2参数存在时,就关闭fd2,然后将fd1代表的那个文件强行复制给fd2,在这里可以把fd1和fd2看作是C语言里的指针,将fd1赋值给fd2,就相当于将fd2指向于sfileno(),fileno()返回的是一个文件描述符,在这里也就是建立socket连接返回的文件描述符,打印出来数值为3

0代表标准输入、1代表标准输出、2代表标准错误输出、3代表重定向到远程

接下来使用os的subprocess在本地开启一个子进程,传入参数“-i”使bash以交互模式启动,标准输入、标准输出、标准错误输出又被重定向到了远程,这样的话就可以在远程执行输入命令了。

需要php关闭safe_mode选项,才可以使用exec函数。

使用php的exec函数执行方法1反dshell的命令

使用php的fsockopen去反dshell

exec反d

perl反d

ruby反d

lua反d

通过上述命令反dshell得到的shell并不能称为完全交互的shell,通常称之为'哑'shell。

通常存在以下缺点

因此有必要去获取一个完全交互的shell。

1、在哑 shell 中执行python,使用pty模块,创建一个原生的终端,命令如下:

运行完后

2、键入 Ctrl-Z暂停任务,切回到 VPS 的命令行中;在 VPS 中执行:

3、在哑 shell 中执行,得到一个完全交互的shell,支持命令补全、历史命令查看、语法高亮、vim编辑等功能。

部分防护设备会对内外网传输流量进行审查,反dshell执行命令都是以明文进行传输的,很容易被查杀。

因此需要将原始流量使用 openssl 加密,绕过流量审计设备。

1、首先vps上生成SSL证书的公钥/私钥对,信息懒得填,一直回车即可。

2、vps使用 OpenSSL 监听一个端口

3、目标主机执行反d加密shell

反d成功,成功接收到ssl流量加密的shell。

>

以上就是关于shell通过堡垒机传输文件到目标机器全部的内容,包括:shell通过堡垒机传输文件到目标机器、如果该主机存在IIS溢出漏洞,如何通过溢出后的端口突破其放火墙、shell连接不上的解决方案等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9334808.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存