原理
通过CONNECT在客户端与代理服务端建立隧道,然后通过隧道发送数据给代理,数据中包含了请求URL以及真实数据,代理根据请求RUL发送真实数据获取内容
特点
基于http/https协议建立隧道
基于HTTP CONNECT方法封装信息
环境
内网仅使用HTTP代理服务器访问外部网络
实验
环境A
linux-A --> linux-B --> firewall-C --> kali-D
A 1.1.1.101
B 1.1.1.102
C 1.1.1.100 192.168.1.100
D 192.168.1.101
A 客户端,通过proxytunnel以及浏览器代理访问Dweb资源
B squid代理服务器
C 只允许访问外部80端口
D web服务器
目的
对比proxytunnel代理和浏览器代理区别
配置
D
service apache2 start
C
rule配置
B
vi /etc/squid3/squid.conf
/^http_port
/^http_access
/^acl
A
proxytunnle -a 80 -p 1.1.1.102:3128 -d 192.168.1.101:80
分析
使用浏览器代理
通过wireshark抓包,A->B的发送的包中指定了HTTP REQUEST URL,B在根据指定的URL转发数据,A通过ger方法请求数据
D主机的数据包中x-forwarded-for字段包含了真实的请求IP,需要注意
通过proxytunnel代理
0x0 A->B发送HTTP CONNECT请求,请求中含有目标主机地址
0x1 B主机与CONNCET请求中的目标主机地址建立TCP三次握手,握手完成后响应CONNECT->A
0X2 后续A->B通过CONNECT载荷传递信息,B通过GET方法向D主机请求数据,在通过CONNCET载荷信息响应给A
环境B
linux-A --> linux-B --> firewall-C --> linux-D --> linux-E
A 1.1.1.101
B 1.1.1.102
C 1.1.1.100 192.168.1.100
D 192.168.1.101
E 192.168.1.102
A 客户端,通过proxytunnel以及浏览器代理访问Dweb资源
B squid代理服务器
C 只允许访问外部80端口
D squid代理服务器
E web服务器
配置
E
service apache2 start
D
vi /etc/squid3/squid.conf
/^http_port
/^http_access
/^acl
C
rule配置
B
vi /etc/squid3/squid.conf
/^http_port
/^http_access
/^acl
A
proxytunnle -a 80 -p 1.1.1.102:3128 -r 192.168.1.101:80 -d 192.168.1.102:80
A:A->B CONNECT请求,request url == D
B:接收A数据,B三次握手D,B->A CONNECT响应
A:A->B CONNECT载荷,载荷内容:CONNECT请求,request url==E
B:接收A数据,程序解封装 B->D CONNECT请求,request url==E
D:接收B数据,D三次握手E,D->B CONNECT响应
后续到达D的数据直接发送到目的
总结
通过http connect方法,与代理服务器建立连接,后续请求通过CONNECT载荷发送到代理服务器,代理将载荷内容进行转发到二级代理
A->B | CONNECT隧道,REQUEST URL==> D,内容:ONNECT隧道,REQUEST URL==> E,http请求
B 接收
B->D | ONNECT隧道,REQUEST URL==> E,http请求
E接受
D | HTTP请求 -> E
D收到响应,原隧道返回