DAY45(DAY46拓展):SOCKS 代理技术

1、代理技术

1.1、概述

​ 在进行渗透测试过程中会遇到到内网中的其他机器是不允许外网机器访问的,因此需要通过端口转发(隧道)或将得到的外网服务器设置为代理,使得攻击机可以直接访问并操作内网中的其他机器。

​ 代理 (Proxy) 也称网络代理,是一种特殊的网络服务,允许一个网络终端(一般为客户端)通过这个服务与另一个网络终端(一般为服务器)进行非直接的连接。一些网关、路由器等网络设备具备网络代理功能。一般认为代理服务有利于保障网络终端的隐私或安全,防止攻击。

​ 代理服务器既是服务器又是客户端。客户端向代理发送请求报文,代理服务器必须向服务器一样,正确的处理请求和连接,然后返回响应。同时,代理自身要向服务器发送请求,这样,其行为必须像正确的客户端一-样,要发送请求并接收响应。

1.2、代理服务器的特点

(1)客户端不知道真正的服务器是谁,服务器也不知道客户端是什么样的。

(2)客户端同代理服务器,代理服务器同服务器,这两者之间使用的通讯协议是一样的。

(3)代理服务器会对接收的请求进行解析,重新封装后再发送给服务器;在服务器响应后,对响应进行解析,重新封装后再发送给客户端。

1.3、代理场景

2、SOCKS 代理

2.1、概述

​ Socks 是一种代理服务,通过 Socks 代理可以将两端的计算机连接起来,Socks 支持多种协议,包括SSH协议、DNS协议、HTTP协议和FTP协议等,Socks 代理分为Socks4Socks5两种,Socks4只支持TCP协议,而Socks5支持TCP/UDP协议,还支持各种身份验证机制等协议,其标准端口为1080。Socks代理在内网渗透测试中应用非常广泛,能够帮助我们更加便捷的访问内网中的各种服务和资源。

2.2、SOCKS5 代理

​ SOCKS5是一个代理协议,它在使用TCP/IP协议通讯的前端机器和服务器机器之间扮演一个中介角色,使得内部网中的前端机器变得能够访问 Internet 网中的服务器,让通讯更加安全。

​ S0CKS5服务器通过将前端发来的请求转发给真正的目标服务器,模拟了一个前端的行为。在这里,前端和 SOCKS5 之间也是通过TCP/IP协议进行通讯,前端将原本要发送给真正服务器的请求发送给 SOCKS5 服务器,然后SOCKS5服务器将请求转发给真正的服务器。

​ SOCKS5服务器在将通讯请求发送给真正服务器的过程中,对于请求数据包本身不加任何改变。

​ SOCKS5服务器接收到真正服务器的响应后,也原样转发给前端。由于SOCKS作用在会话层上,因此它是一个提供会话层到会话层间安全服务的方案,不受高层应用程序变更的影响。

​ SOCKS5代理,是采用SOCKS协议的代理服务器,是一种通用的代理服务器,默认端口是1080。

​ SOCKS5代理工作在会话层,不要求应用程序遵循特定的操作系统平台,SOCKS5 代理只是简单地传递数据包,而不关心是何种应用协议(比如FTP、HTTP和NNTP请求)。

2.3、SOCKS5 代理工作原理

(1)向代理方服务器发出请求信息。

(2)代理方应答。

(3)需要代理方接到应答后,才向代理方发送目的ip和端口。

(4)代理方与目的连接。

(5)代理方将需要将被代理方发出的信息传到目的方,将目的方发出的信息传到被代理方,代理完成。

​ Socks 5 协议的第一步是与代理服务器握手,首先客户端向代理服务器发起握手请求,其数据包格式如下所示:

(1)VER: socks 版本(在 socks5 中是 0x05 )

(2)NMETHODS:在METHODS字段中出现的方法的数目

(3)METHODS:客户端支持的认证方式列表,每个方法占1字节

​ 代理服务器在收到客户端发起的请求之后,向客户端发回握手响应,其数据包格式如下:

(1)VER:socks 版本(在 socks5 中是 0x05)

(2)METHOD:服务端选中的方法(若返回 0xFF 表示没有方法被选中,客户端需要关闭连接)

​ 当认证过程通过后,Socks 握手正式完成,此时客户端向代理服务器发起正式请求以指示所要访问的目标进程地址,端口等信息,其数据包格式如下所示:

VER字段表征Socks版本,固定为0x05

CMD字段指示连接的类型,占1个字节,共有3个取值,分别为0x01(CONNECT)0x02 (BIND)0x03 (UDP ASSOCIATE)

RSV字段为保留字段,占1个字节,固定为 0x00

ATYP字段指示地址类型(DST. ADDR字段的类型),0x01 为 IPv4 地址,0x03 为域名,0x04为 IPv6 地址

DST. ADDR字段指示客户端所要访问的目的地址,这是一 -个变长字段,其长度由一个字段的值来决定

DST. PORT字段指示客户端所要访问的目的端口

​ 代理服务器在收到以上请求后,其返回的数据包格式如下:

VER字段占1字节,表征协议版本

REP字段占1字节,可以理解为状态码,它的值表征了此次连接的状态

RSV字段占1字节,为保留字段,固定为 0x00

ATYP字段表示地址类型

BND. ADDRBND. PORT的含义随请求中的 CMD 的不同而不同

​ 当客户端发往代理服务器的数据包的 CMD 字段的值为 0x01 时,代表连接CONNECT,此时DST. ADDR和DST. PORT指示客户端所想要访问的目标主机的地址和端口,代理服务器在收到该请求后建立 “代理服务器到目标主机” 的 TCP 连接,并将代理服务器分配的 IP 地址和端口在返回的数据包中的BIND. ADDR和BIND. PORT字段中告诉客户端。

​ 当客户端发往代理服务器的数据包的 CMD 字段的值为 0x02 时,代表绑定 BIND, BIND 主要用在双向连接场景中,在 Socks 5 协议中,客户端只有首先发送 CONNECT 连接之后,才允许发送 BIND 连接,客户端在向代理服务器发送 BIND 请求之后,代理服务器将会向客户端发起两次回复,其中第一次回复发生在代理服务器建立并绑定用于接收目标主机→代理服务器连接的套接字时后(此时只是代理服务器自己创建套接字,目标主机到代理服务器的连接还没有建立),代理服务器在BIND. ADDR和BIND. PORT字段指示其用于监听目标主机连接的地址和端口,当目标主机→代理服务器连接建立完成后,代理服务器会向客户端发送第二次回复,其中BIND. ADDR和BIND. PORT指示目标主机的地址和端口。

3、Socks 代理工具

3.1、Earthworm

​ EW 是一套便携式的网络穿透工具,具有SOCKS v5服务架设和端口转发两大核心功能,可在复杂网络环境下完成网络穿透。该工具能够以 “正向”、“反向”、“多级级联” 等方式打通一条网络隧道,直达网络深处,用蚯蚓独有的手段突破网络限制,给防火墙松土。工具包中提供了多种可执行文件,以适用不同的操作系统,Linux、 Windows、 MacOS、 Arm-Linux 均被包括其内。

项目地址:http://rootkiter.com/EarthWorm/

该工具共有 6 种命令格式

ssocksd、rcsocks、rssocks、lcx_slave、lcx_listen、lcx_tran
【使用场景】普通网络环境:1.目标网络边界存在公网IP且可任意开监听端口:+---------+     +-------------------+  |HackTools| ->> | 8888->  1.1.1.1   |+---------+     +-------------------+a)./ew -s ssocksd -l 8888// 在 1.1.1.1 主机上通过这个命令开启 8888 端口的 socks 代理b) HackTools 可通过访问 1.1.1.1:8888 端口使用 1.1.1.1 主机提供的代理2.目标网络边界不存在公网 IP,需要通过反弹方式创建 socks 代理一台可控公网IP主机                  可控内网主机+---------+     +--------------------------+    |     +---------------+|HackTools| ->> | 1080 ->  1.1.1.1 -> 8888 |  防火墙  | <--  2.2.2.2  |+---------+     +--------------------------+    |     +---------------+a) ./ew -s rcsocks -l 1080 -e 8888// 在 1.1.1.1 的公网主机添加转接隧道,将 1080 收到的代理请求转交给反连 8888 端口的主机b) ./ew -s rssocks -d 1.1.1.1 -e 8888          // 将目标网络的可控边界主机反向连接公网主机c) HackTools 可通过访问 1.1.1.1:1080 端口使用 rssocks 主机提供的 socks5 代理服务对于二重网络环境:        1.获得目标网络内两台主机 A、B 的权限,情况描述如下:A 主机:  存在公网 IP,且自由监听任意端口,无法访问特定资源B 主机:  目标网络内部主机,可访问特定资源,但无法访问公网A 主机可直连 B 主机可控边界主机A             可访问指定资源的主机B+---------+     +-----------------------+      +-----------------+|HackTools| ->> | 1080 -->  2.2.2.2 --> | ->>  | 9999 -> 2.2.2.3 |+---------+     +-----------------------+      +-----------------+a)  ./ew -s ssocksd -l 9999// 在 2.2.2.3 主机上利用 ssocksd 方式启动 9999 端口的 socks 代理b)  ./ew -s lcx_tran -l 1080 -f 2.2.2.3 -g 9999 // 将 1080 端口收到的 socks 代理请求转交给 2.2.2.3 的主机。c)  HackTools 可通过访问 2.2.2.2:1080 来使用 2.2.2.3 主机提供的 socks5 代理。2.获得目标网络内两台主机 A、B 的权限,情况描述如下:A 主机:  目标网络的边界主机,无公网 IP,无法访问特定资源。B 主机:  目标网络内部主机,可访问特定资源,却无法回连公网。A 主机可直连 B 主机一台可控公网IP主机                    可控内网主机A         可访问指定资源的主机B+---------+     +--------------------------+    |    +-----------------+      +-----------------+|HackTools| ->> | 1080 ->  1.1.1.1 -> 8888 |  防火墙  | <--  2.2.2.2 --> | ->> | 9999 -> 2.2.2.3 |+---------+     +--------------------------+    |    +-----------------+      +-----------------+a)  ./ew -s lcx_listen -l 1080 -e 8888// 在 1.1.1.1 公网主机添加转接隧道,将 1080 收到的代理请求// 转交给反连 8888 端口的主机b)  ./ew -s ssocksd -l 9999// 在 2.2.2.3 主机上利用 ssocksd 方式启动 9999 端口的 socks 代理c)  ./ew -s lcx_slave -d 1.1.1.1 -e 8888 -f 2.2.2.3 -g 9999// 在 2.2.2.2 上,通过工具的 lcx_slave 方式,打通1.1.1.1:8888 和 2.2.2.3:9999 之间的通讯隧道d)  HackTools 可通过访问 1.1.1.1:1080 来使用 2.2.2.3 主机提供的 socks5 代理【参数说明】目前工具提供六种链路状态,可通过 -s 参数进行选定,分别为:ssocksd   rcsocks   rssocks   lcx_slave lcx_tran  lcx_listen其中 SOCKS5 服务的核心逻辑支持由 ssocksd 和 rssocks 提供,分别对应正向与反向socks代理。其余的 lcx 链路状态用于打通测试主机同 socks 服务器之间的通路。lcx 类别管道:lcx_slave  该管道一侧通过反弹方式连接代理请求方,另一侧连接代理提供主机。lcx_tran   该管道,通过监听本地端口接收代理请求,并转交给代理提供主机。lcx_listen 该管道,通过监听本地端口接收数据,并将其转交给目标网络回连的代理提供主机。通过组合lcx类别管道的特性,可以实现多层内网环境下的渗透测试。下面是一个三级跳的本地测试例子。。。./ew -s rcsocks -l 1080 -e 8888./ew -s lcx_slave -d 127.0.0.1 -e 8888 -f 127.0.0.1 -g 9999./ew -s lcx_listen -l 9999 -e 7777./ew -s rssocks -d 127.0.0.1 -e 7777数据流向为   IE -> 1080 -> 8888 -> 9999 -> 7777 -> rssocks

选项 :例如:./xxx -s ssocksd -h-s state 设置函数。你可以从以下选项:ssocksd , rcsocks , rssocks ,lcx_listen , lcx_tran , lcx_slave-l listenport 为服务启动打开一个端口。-d refhost 设置反射主机地址。-e refport 设置反射端口。-f connhost 设置连接主机地址。-g connport 设置连接端口。-h help 显示帮助文本,通过添加 -s 参数,您还可以查看更详细的帮助。-a about 显示关于页面-v version 显示版本。-t usectime 设置超时的毫秒数。 默认值为 1000

3.2、proxychains-ng

项目地址:https://github.com/rofl0r/proxychains-ng

或者直接: apt install proxychains  //安装proxychains

将压缩包放入虚拟机,解压

unzip proxychains-ng
cd proxychains-ng
./configure --prefix=/usr --sysconfdir=/etc
make clean && make

即可正常使用

使用示例:
$ proxychains telnet targethost.com
在本例中,它将通过代理(或链式代理)运行 telnet
由 proxychains.conf 指定使用示例:
$ proxychains -f /etc/proxychains-other.conf telnet targethost2.com
在这个例子中,它将使用不同的配置文件然后 proxychains.conf
连接到 targethost2.com 主机。使用示例:
$ proxyresolv targethost.com
在本例中,它将通过代理(或链式代理)解析 targethost.com
由 proxychains.conf 指定

3.3、reGeorg

​ reGeorg 是 reDuh 的升级版,主要是把内网服务器的端口通过http/https隧道转发到本机,形成一个回路。用于目标服务器在内网或做了端口策略的情况下连接目标服务器内部开放端口。它利用 webshell 建立一个 socks 代理进行内网穿透,服务器必须支持aspx、php或jsp这些 web 程序中的一种 。

reGeorg 的功能

​ reGeorg 主要功能是将内网服务器端口的数据通过 HTTP(S) 隧道转发到本机,实现基于 HTTP 协议的通信。可以将JSP/PHP/ASP/ASPX等页面上传到对应语言的目标服务器,便可以访问该服务器后面的主机。

项目下载地址:https://github.com/L-codes/Neo-reGeorg

$ reGeorgSocksProxy.py [-h] [-l] [-p] [-r] -u [-v]
用于 reGeorg HTTP(s) 隧道程序的 Socks 服务器可选参数:-h, --help 显示此帮助信息并退出-l , --listen-on 默认监听地址-p , --listen-port 默认监听端口-r , --read-buff 本地读取缓冲区,每次 POST 发送的最大数据-u , --url 包含隧道脚本的 url-v , --verbose 详细输出[INFO|DEBUG]

示例:

$ python reGeorgSocksProxy.py -p 8080 -u http://upload.sensepost.net:8080/tunnel/tunnel.jsp

3.4、proxifiler

项目地址:https://www.nite07.com/proxifier/#%E6%B7%BB%E5%8A%A0%E4%BB%A3%E7%90%86%E6%9C%8D%E5%8A%A1%E5%99%A8

因为是图形化界面,所以就不写具体说明了

4、使用ew实现socks代理(1)

​ 以下所有样例,如无特殊说明代理端口均为1080,服务均为SOCKSv5代理服务

攻击者连接跳板机,再访问目标机

这里我们使用:目标机win7(打开web服务80端口)、kali 攻击机、跳板机(也可以开web服务)、winserver2012来进行使用

使用场景:web 服务器存在公网 IP 地址可 ping 通,并且可以开放任意端口

(1)跳板机操作

​ 攻击者以某种手段控制了跳板机后,将相应版本的ew传到跳板机,我们的代理服务器为 windows 所以传ew_for_Win.exe

​ 在代理服务器上运行

./ew_for_Win.exe -s ssocksd -l 8888      //在8888端口上开启socks代理,ssocksd提供正向代理功能

​ ew 开始监听端口了。监听 1024 以上的端口无需 root 权限,普通用户即可。攻击者连接到跳板机的 8888 端口之后,跳板机根据本机的路由表配置,将访问者的数据包从适当的网口转发出去。转发之后,包的源地址会被修改为这个出口的IP地址

注意:在linux跳板机上转发数据包,内核的IP转发功能是需要开启的)

(2)攻击者本地运行全局代理

以 proxychains 为例,说明全局代理的用法

vi /etc/proxychains.conf  //配置proxychains将最后一行的socks4注释掉,添加下面的行,端口为跳板机上的ew监听的8888:
socks5 跳板机公网IP  8888
保存退出
proxychains curl 目标机IP  //通过socks代理访问目标机

成功,使用如下指令看是否能成功访问

proxychains curl 目标机IP

5、使用ew实现socks代理(2)

​ 与上文相同,但这里我们需要4台主机:攻击机kali、跳板机win10(存在公网IP)、代理服务器 winserver2012、web服务器 win7,当然跳板机可以直连 web 服务器

(1)内网跳板机(winserver2012)利用 ssocksd 方式启动8888端口的 socks 代理

ew_for_Win.exe -s ssocksd -l 8888

(2)跳板机(win7)将本机1080端口收到的 socks 代理请求转交给内网的跳板机,也就是win10

ew_for_Win.exe -s lcx_tran -l 1080 -f win10的IP -g 8888

(3)在攻击机 kali 中编辑proxychain.conf文件配置

vim /etc/proxychains.conf

(4)使用proxychains代理访问目标机

proxychains curl 目标机

注意:如果访问不到,考虑更换端口号,有可能端口已经被占用!

6、reGeorg + proxychains 代理工具(1)

这里我们使用3台主机:攻击机kali、web服务器(跳板机) winserver2012、目标机 win7

这里我们将用到 proxychains-ng,以及 reGeorg 工具

前提条件:跳板机---- web 服务器为 php 环境有内外网

(1)将 php 文件通过 webshell 上传到跳板机网站根目录

(2)访问跳板机的网站路径中的这个文件,当页面显示如下,表示代理工具能够正常解析

(3)在攻击机中使用 python2 运行 reGeorgSocks.py 脚本配置代理,当郑旭执行结果显示如下,表示该代理工具能正常运行

python2 reGeorgSocksProxy.py -u http://跳板机公网IP/tunnel.nosocket.php -p port

(4)在建立好的 reGeorg 代理工具以后,需要配置proxychains.conf文件,添加socks5 IP port,也就是上面圈出的部分,如下所示:

vim /etc/proxychains.conf

(5)通过 reGeorg 代理工具,使用 nmap 对目标内网进行扫描等操作

proxychains nmap -sP 跳板机内网IP段/24

端口扫描

proxychains nmap -sV -A -p- 目标机

7、reGeorg + proxychains + proxifiler 代理工具(2)

这里是4台主机:攻击机win10、web服务器(跳板机)winserver2012、目标机 win7

这里我们将用到 proxychains-ng、proxifiler,以及 reGeorg 工具

前提条件:跳板机---- web 服务器为 php 环境有内外网(当然,只要符合类型即可)

(1)老样子,通过 webshell 上传文件

(2)访问跳板机路径下的上传的文件,出现下图所示表示正常解析运行。

(3)在攻击机中使用 python 运行脚本,出现如下所示表示正常执行

python2 reGeorgSocksProxy.py -u http://跳板机公网IP/tunnel.nosocket.php -p port

(4)在攻击机中打开 proxifier 中选择配置文件,代理服务器,添加,地址为


点击检查

成功

(5)接着配置代理规则

添加一个规则名proxy将应用程序 python.exe 与浏览器进程添加

(6)使用代理进行访问目标地址

成功

DAY45(DAY46拓展):SOCKS 代理技术相关推荐

  1. 内网安全:Socks 代理 || 本地代理 技术.

    内网安全:Socks 代理 || 本地代理 技术. Socks 代理又称全能代理,就像有很多跳线的转接板,它只是简单地将一端的系统连接到另外一端.支持多种协议,包括http.ftp请求及其它类型的请求 ...

  2. 红蓝对抗之隧道技术第二篇(reGeorg内网穿透、SSH隧道本地Socks代理、SSH远程转发、Earthworm Socks5代理、Tunna正向代理、ICMP隧道、DNS隧道、Frp穿透)

    文章目录 隧道应用 reGeorg内网穿透 SSH本地转发(正向) 场景一 场景二 SSH远程转发(反向) Earthworm Socks5代理 正向代理 反向代理 Tunna正向代理 ICMP隧道 ...

  3. 【内网安全】域横向内网漫游Socks代理隧道技术

    代理技术和隧道技术都属于内网穿透,代理主要解决内网里面通信的问题(比如对方在内网,你也在内网,这时候两个内网实现通信就必须要经过代理才能实现,常见工具有frp.ngrok和ew等,ew(earthwo ...

  4. rust 局域网联机_分享自己用 Rust 写的可以直接利用 SOCKS 代理的游戏加速器

    之前分享了一款自己用 Go 写的游戏加速器 IkaGo,但是我也在文章中多次提到,加速器最重要的是线路而不是技术.为了能更好的利用好手上的一些优质的众所周知的 SOCKS 代理,我又开发了一款加速器( ...

  5. 代理是什么?(HTTP代理,SOCKS代理)

    本来打算通过UDP53来绕过认证,在准备实现DNS隧道的时候,发现所涉及的内容实在是太多了-(DNS解析原理,域名的原理,隧道技术,代理技术 and so on),每一个知识点都能让我深入去研究一段时 ...

  6. 内网安全学习(六)—域横向-内网漫游: Socks 代理

    内网安全-域横向内网漫游 Socks 代理隧道技术 1.前置知识: 1)正向与反向连接: 正向就是你去连接被控主机,但由于机器处于内网内,分配的内网ip,无法直接找到,所以需要方向连接,即让主机连接我 ...

  7. http隧道、https、SSL层、http代理、在线代理、socks代理区别

    以前听到这几个名词时,总是搞混淆,今天花点时间来记录这几个名词的大概区别,方便以后自己查看. http隧道:"HTTP隧道技术"就是把所有要传送的数据全部封装到HTTP协议里进行传 ...

  8. MSF开启socks代理内网渗透

    简介 当我们通过MSF拿到一个机器的权限后,想通过MSF搭建socks代理,然后通内网. MSF中有三个代理模块,分别是socks4a.socks5.socks_unc.一般用 socks4a和soc ...

  9. SOCKS代理工具EarthWorm、sSoks

    SOCKS代理 常见的网络场景: 服务器在内网中,可以任意访问外部网络 服务器在内网中,可以访问外部用网络,但服务器安装了防火墙来拒绝敏感端口的连接 服务器在内网中,只对外开放了部分端口(例如80端口 ...

最新文章

  1. ORA-00904: 标识符无效——解决方案
  2. wireshark无权限
  3. 无监督学习 k-means_监督学习-它意味着什么?
  4. tr闭包_嵌套函数及闭包
  5. linux中的文件,文件夹,链接的权限划分
  6. platform_driver_register()--如何match之后调用probe
  7. 想要拥有自己的jar包吗?------超级简单的打jar包教程~~~
  8. 模板题——图论相关(2)
  9. “高校”行业智能运维解决方案解析(含落地实践)
  10. mysql的三表查询语句_求三表联合查询的SQL查询语句
  11. 自动驾驶决策规划研究综述
  12. 召回和粗排负样本构造问题
  13. ProxmoxVE6.2 VLAN配置
  14. 我是没有志气的程序员
  15. CG cosh, exp, sinh, smoothstep, tanh, perlin_easeCurve1/2 曲线
  16. iOS 利用openCV拼接照片实现拍摄全景照片
  17. CM+CDH构建企业大数据平台系列(一)
  18. [转载]初学者入门:Tomcat在Win2000下的安装
  19. 大话设计模式之爱你一万年:第七章 结构型模式:装饰器模式:爱你就要让你更美丽:为爱找份工作:1.装饰器模式概念
  20. 【定位】无线电测向相关知识(1)

热门文章

  1. OSChina 程序员节乱弹 ——看程序员如何优雅地生活
  2. linux课程设计 点菜,餐馆点餐系统专业课程设计.doc
  3. android移动点餐系统内容和要求,基于Android云计算的移动点餐系统
  4. 转:彼得·德鲁克:如何发挥人的长处?
  5. bastion host - 堡垒主机 / 跳板机
  6. kali linux nmap扫描(二)_商洛学院司徒荆_新浪博客
  7. AquaCrop_原理学习笔记01:AquaCrop模型简介
  8. html h5 php 语音录入,H5添加语音输入功能-
  9. 记录一个有关QT生成PDF的过程
  10. 51单片机(1)单片机概述