隧道代理-应用层内网代理

内网代理技术一般采用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

原理

引用一张图,非常精辟:

img

即将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即可

posted @ 2024-09-17 18:54  Yuy0ung  阅读(46)  评论(0编辑  收藏  举报