SSH会话劫持实现端口转发

SSH会话劫持实现端口转发

在进行渗透测试时,我们有时候会碰到搭建的测试环境、产品服务器、DMZ或者其他类似的机器群的情况,这时我们完全可以把它们看作跳板。这些系统被设计成对外交互的接口,这时候我们考虑对其他域里的用户进行SSH会话劫持是个不错的选择。

那么如果你拥有了某一个跳板的控制权限,想要通过另一个域的用户对远程域进行访问会怎么办呢?当然,这时候你是没有密码、密钥的,你不能抛弃二进制手段,而且SSH登录使用的是双因子认证。这下怎么办?让我们撸起袖子,练练命令行的功夫吧。

这篇文章涵盖了SSH会话劫持的两个方法。我们不需要认证,就可以直接实现动态端口转发。当我们需要劫持会话时,需要完成以下两个条件:

1.创建会话
2.存在一个活跃的SSH会话

我们的最终目标是通过另一个用户的活跃会话,创建一个通道来获取远程SSH主机的访问权限。

建立SSH会话劫持

为了劫持一个新近创建的会话,我们可以利用一项叫SSH复用的技术。黑客可以利用它在某用户的原始socket里创建自己的会话,不用再次进行认证。这个名为ControlMaster的技术在OpenSSH4里面提出过,著名黑客H D Moore和Val Smith的文章里也曾提到。我本人在某次交流会中,也谈到过这种攻击手法–The Poor Man’s Rootkit。这篇文章里我讲展示两种强制建立master socket的方法,然后会演示如何将端口转发给它们,第一个方法与ControlMaster有关

SSH客户端上的ControlMaster配置:

打开ControlMaster之后,一个ssh连接在后台运行,创建一个本地套接字(controlpath就是这个套接字的名字),以后本地再有
ssh需要连接到远端同样的主机的时候,直接使用这个已经创建好的socket文件进行连接,不用再创建连接了,同理,也不需要再进行用户身份验证。

最常见的对ControlMaster的socket的利用方式,就是对计算机里SSH客户端的配置做特殊的调整。

SSH会话劫持实现端口转发

这些配置能让所有新的会话建立持久性的中间人master socket。我在控制socket的命令中,使用了%h代表目标主机,%h可以是任何字符串。

SSH会话劫持实现端口转发

连接socket:
这个socket可以被用来在以后创建会话。即使原主人退出了会话,我们再次创建会话时也不需要认证。

SSH会话劫持实现端口转发

增加一个动态通道:
你得知道,我们的最终目标是到达其他域。下面的命令能让我们在现有的master socket之上,建立一个动态的通道。

SSH会话劫持实现端口转发

结束后移除socket:
如果我们只是简单地退出复用的会话,是不会关闭master socket的。想要真正地关闭它,你需要发送一个退出请求。

SSH会话劫持实现端口转发

利用SHELL指令使用SSH ControlMaster

另一个利用这类劫持技术的方法,我以前并没有公布过:master socket可以通过SSH客户端选项的flag进行创建。因为这个原因,我们可以使用shell指令截获某用户的通过SSH客户端发出的指令,从而注入我们自己的ControlMaster参数。

ssh () 
{ 
    /usr/bin/ssh -o "ControlMaster=auto" -o "ControlPath=/tmp/%r@%h:%p" -o "ControlPersist=yes" "$@";
}

这个截获函数会创建相应的socket,与使用ssh_config创建的效果类似。

SSH会话劫持实现端口转发

本次攻击流程图:

SSH会话劫持实现端口转发

利用SSH ControlMaster的socket和相应的socket选项,我们可以劫持SSH会话,注入实现端口转发。这些都不需要任何认证,现在让我们继续看另一个方法

劫持活跃SSH会话

普通用户可以创建screen会话,使用screen非常简易.只需在SHELL键入screen命令,便可打开一个screen session。然而随便这样创建出来的screen会话,用来控制通往其他有权限的机器的SSH连接,这是不太符合安全逻辑的。大多数用户没有意识到这些会话可能会被劫持,然后被用于端口转发。
找出screen会话的方法:
寻找screen会话的方法,当然要在/var/run/screen目录下翻找。当然,你也可以使用不完整的screen -r命令进行枚举,猜出某个用户来。


SSH会话劫持实现端口转发

绕过screen pts/tty的限制:
取得另一个域用户的screen会话权限没有看起来那么简单,不是su命令就行了,许多黑客就困在这里。我们使用su切换到与screen会话对应的用户,可能会发现屏幕上出现以下的错误信息:

“Cannot open your terminal '/dev/pts/#' - please check.”
“Must be connected to a terminal.”

SSH会话劫持实现端口转发

其中一个绕过该限制的方法,即用script的二进制流绕过su过的用户会话。

SSH会话劫持实现端口转发

增加一个通道:

SSH中有个很少被使用的特性,即转义sub-shell。如果你正在使用其他手段来控制通往跳板的权限,你可以利用转码序列向其他用户建立的会话中增加端口转发。按下ctrl+c回退到SSH的sub-shell,然后输入-D:<port>会增加一个动态端口转发。想要移除这个端口转发,可以在输入-KD:<port>后,再按下ctrl+c。

SSH会话劫持实现端口转发

如果你正在使用的是原始shell里的SSH,上面给的建议不会对你有用。这是因为你的SSH客户端在初始就会捕获转义字符。但是别担心,我会教你如何绕过它。
使用screen填充创建通道:
screen有一个特性,它允许你向输入队列里填充一个缓冲区的内容。这里填充的文本会被认为是screen内部输入的。所以我们可以通过它绕过外部SSH会话,输入转义字符。

SSH会话劫持实现端口转发

SSH会话劫持实现端口转发

在你小心进行填充的需要注意的是,填充的文本在screen会话回退时是可见的,但你可以通过改变回退的长度来阻止它出现。只要你把回退值改为0行,就可以清空screen,将其设置回原:

screen -S 18323.my_ssh_session -X scrollback 0
screen -S 18323.my_ssh_session -p 0 -X stuff $'~C'
screen -S 18323.my_ssh_session -p 0 -X stuff $'-D:9090\nclear\n'
screen -S 18323.my_ssh_session -X scrollback 15000

下面是一个screen会话劫持攻击的流程图:

SSH会话劫持实现端口转发

解决了SSH转义问题并利用screen的填充特性,我们才能劫持建立好的会话,并且注入产生新的通道!
通往远程域的通道:
最后一步是绑定一个本地端口,用来连接我们在hop_1注入的通道。现在我们就完全掌控了一个动态的通道,通往远程域不需要认证喔。

SSH会话劫持实现端口转发

[参考来源0xthem,由FreeBuf小编dawner翻译整理,转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)]

原创文章,作者:stanley,如若转载,请注明出处:http://www.178linux.com/1362

(1)
上一篇 2015-03-23 15:49
下一篇 2015-03-23 17:02

相关推荐

  • LVM详解

    目录:  一、概述  二、LVM的相关概念  三、概念图  四、LVM基本操作    1.创建PV    2.查看PV信息    3.创建VG    4.查看VG信息    5.创建LV    6.查…

    Linux干货 2015-09-22
  • OpenSSH的应用和利用OpenSSL创建私有CA签证给httpd服务器开起https

    一、OpenSSH     OpenSSH与SSH协议是远程登录的首选连接工具。它加密所有流量,以消除窃听,连接劫持和其它攻击。OpenSSH常常被误认以为与OpenSSL有关系,但实际上这两个项目的有不同的目的,不同的发展团队,名称相近只是因为两者有同样的软件发展目标──提供开放源代码的加密通讯软件。  &…

    Linux干货 2016-04-24
  • Linux网络管理之网卡别名及网卡绑定配置

    在日常的运维工作当中,有时候需要在一块物理网卡上配置多个IP地址,这就是网卡子接口的概念,以及多块网卡实现网卡的绑定,通俗来讲就是多块网卡使用的一个IP地址,下面我来详细说明实现的过程。 &创建网卡子接口 在CentOS系统当中网络是由NetworkManager这个服务来管理的,它提供了一个图形的界面,但此服务不支持物理网卡子接口的设置,所以在配置网卡子接…

    系统运维 2016-09-02
  • 【linux】正则表达式之grep、egrep、元字符

    正则表达式:     又称正规表示法、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。是一类字符所书写的模式,其中许多字符(元字符)不表示其字面意义,而是表达控制或通配等功能。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符…

    Linux干货 2015-04-01
  • 优云automation实践技巧:简单4步完成自动化构建发布

    前言:本文介绍了优云是如何将运维自动化产品应用到日常工作实践中,并通过内部用户的大量使用来不断改进产品的用户体验。 各位看官,这不是一个揭发单身有为青年因同事们天天秀恩爱而受到一万点暴击伤害的故事。这里指的狗粮,不是真正的“狗粮”——当然,也不是你们认为的狗粮。 事实上,现在很多涉足产品开发的互联网公司,都会提到“吃狗粮”这一概念(出自“Eating you…

    系统运维 2017-01-09
  • 使用mysql-mmm实现高可用mysql读写分离

    MMM介绍:  MMM全称为Multi-Master Replication Manager for MySQL,即为主主复制管理器;根据MMM官网介绍,其工作原理类似于lvs,都是利用vip地址;但lvs只有一个组件便可以正常工作,而MMM则使用三个组件,分别是mysql-mmm、mysql-mmm-agent、mysql-mmm-monitor…

    Linux干货 2015-08-04