代理の小记

自刷了云境之后,众多师傅纷纷向我询问有关云境或者域的各类问题,其中不乏零基础的ctfer。而询问频率最高的当属代理搭建问题。代理的搭建是进行内网渗透至关重要的一环.。所以有意写一篇文章,来介绍一下当下主流的代理及其使用方法。以下的讲解仅代表个人见解,若存在错误之处,还望师傅们能够不吝指正。球球:2161992897

环境介绍

image-20240824011349252

我这里准备了三台机器,win1有两张网卡,1张是18,可以与win2通讯,一张是10(仅主机模式)与PC机通讯,此时的PC机是无法与18网段机器进行通讯的,这里我们可以用个人PC机器来ping一下这两台机器。

PC ping 18网段

image-20240824000239161

可以发现PC ping 18网段的两台机器都是不通的

PC ping 139网段

image-20240824000319145

可以发现139网段是完全可通的此处的win1就是用来模拟我们渗透过程所拿下的跳板机,想要对跳板机内网进行渗透,就需要搭建代理来访问内网主机

代理工具简介

先简单说下,所有的代理连接工具的共同特点都是去连接一对或者多对ip和端口,此时师傅们只需要知道我们要连接一对ip和端口即可。

proxifier

此工具为windows代理工具,我最喜欢用的代理连接工具,没有之一。打开软件后,点击配置文件的代理服务器选项

image-20240824002544429

点击添加

image-20240824002649601

在这里我们可以填入对应的ip和端口,然后选择对应的协议(一般为socks5),然后一路点击确定退回到工具初始界面即可。简单提一下这里的检查选项

image-20240824002902215

点开后,其右上角有一个测试设置选项,点击访问后,他会根据设置里面的配置去访问对应网址,通过是否可达来判断代理是否搭建成功,比如我这里配置的是百度,它就会去访问百度来判断代理是否搭建成功。需要注意的是线下赛是无网络状态,所以目标主机这里如果设置的是网络上的地址,则其会一直返回失败,但这并不意味着代理也搭建失败。

返回初始界面后,点击代理规则

image-20240824003210008

这里根据自己的需求设置,由于我是懒b,所以我直接全部选上(将动作那部分全部选成自己刚刚所设置的代理),避免出现某些工具走不上代理的情况

image-20240824003318957

另外,这里还可以设置目标主机,例如此代理是用来访问18网段的,则可以设置为

1
192.168.18.*

这样所有走向18网段的流量都会走上代理了。

proxychains4

此工具为linux代理工具,其用法也很简单,当我们拿到对应的ip和端口后,我们编辑一下这个文件

1
/etc/proxychains4.conf

滑到最下面

image-20240824003752973

在这里按照如下格式将代理的ip和端口填写进去,无用的ip和port需要注释掉

1
socks5 ip 端口

使用的时候在命令前面加上一条proxychains4即可,例如

1
proxychains4 curl http://192.168.18.129

这样流量就可以走上我们搭建好的sock5代理了,但是某些底层流量是走不上proxychains4,需要单独解决一下。如果配置文件冲突,可以使用-f 参数指定配置文件

1
proxychains4 -f /etc/proxychains4.conf curl http://192.168.18.129

正向 & 反向代理

正向代理和反向代理的选择和靶机的防火墙配置其实有着密切的关系。当防火墙的入站规则配置的相对严格时,我们通常选择反向搭建代理,即让靶机主动出来。当防火墙的出站规则相对严格时,我们通常选择正向搭建代理,即我们主动寻找靶机。通常入站规则会比出站规则严格很多。

代理搭建

Gost

项目介绍

正向代理工具

项目地址:https://github.com/ginuerzh/gost

gost是我最常用的一款代理软件,对于靶场而言,文件落地不再是一个棘手的问题,gost可以以一种方便且快捷的方式搭建代理,且其使用方法也异常的简单,对于linux而言,我们可以使用如下命令快速的开启一个标准的HTTP/SOCKS5代理,他会开启跳板机的10000端口作为代理端口,后面使用代理工具连接跳板机的ip及10000端口即可

1
./gost -L=:10000 &

windows同理

1
gost.exe -L=:10000 &

gost演示

将gost上传到被控靶机,执行下面的命令即可

1
gost.exe -L=:10000 &

image-20240824012855007

出现下面那一串json文件就是启动成功了,如果端口被占用,则json会返回端口已被占用的提示。代理搭建结束后我们就需要使用代理工具来连接此代理进而访问跳板机内网(即18网段),利用proxifier填写好ip和端口(proxychains4同理)

1
10.10.10.129 10000

访问18.129,结果如下

image-20240824013011885

Frp

项目介绍

反向代理工具

工具地址:https://github.com/fatedier/frp

相对于gost,frp就显得比较臃肿,它分为客户端和服务端两部分,此处仅介绍一层代理情况下的frp搭建过程。

image-20240824014814131

先给出基于此拓补图的frp配置

frpc.ini(客户端,即靶机)

1
2
3
4
5
6
7
8
[common]
server_addr = 8.8.8.8 //服务端的ip
server_port = 7000 //服务端监听的端口

[plugin_socks6]
type = tcp
remote_port = 10000 //让服务端开启的端口,提供socks5代理
plugin = socks5 //指明协议类型是socks5

frps.ini(服务端,即VPS)

1
2
[common]
bind_port = 7000 //监听一个端口,供服务端和客户端通讯

frp演示

先将frps上传vps,执行命令开启监听

1
./frps -c frps.ini

再将frpc上传到win1,执行命令主动连接写好的服务端ip和端口

1
./frpc -c frpc.ini

连接成功后,使用代理工具连接8.8.8.8 10000即可访问win2(即win1内网)

端口映射

个人frp再比较常用的功能就是frp的端口映射了,适用于一些及其特殊的情况。

例如你想将本地的25565端口映射到VPS的7779端口,达成访问VPS的7779端口就是访问本地的25565端口,那你可以这样操作

frps.ini

1
2
3
4
5
6
7
8
[common]
bind_port = 7000

[tcp_1200]
type = tcp
local_ip = 127.0.0.1
local_port = 7779
remote_port = 25565

frpc.ini

1
2
3
4
5
6
7
8
9
[common]
server_addr = 8.8.8.8
server_port = 7000

[plugin_socks6]
type = tcp
remote_port = 7779
local_port = 25565
local_ip = 127.0.0.1

按照上面的方法将客户端和服务端启动后即可完成映射操作。此外,还有一种低权限的端口转发操作顺道提一嘴,适用于某些特殊情况。

1
socat tcp-listen:8080,reuseaddr,fork tcp:8.8.8.8:80

此命令可以将本地的8080端口的流量全部转发到VPS的80端口上

代理链

对于多层内网的情况,通常需要搭建代理链进行操作,所谓代理链其实就是多搭建几层代理罢了。新的网络状况如下

image-20240824021306765

搭建代理链

gost

这个简单,之前搭建一层代理的时候已经在win1上运行了一个gost,此时我们只需要在win2再上传一个gost,利用上面的操作再执行一次即可搭建好第二层代理

frp

frp相对绕一些,但操作和搭建一层是一样的,只不过这次我们会将win1当作服务端,win2当作客户端,再执行一次上面搭建frp的操作,即可搭建好第二层代理。所以,如果想用frp搭建两层代理,win1需要上传两个东西,一个是第一层代理的frpc(客户端),一个是第二层代理的frps(服务端)

如何使用?

proxifier

点开代理服务器选项,我们可以找到代理链界面

image-20240824021946015

我们可以点击创建一个新的名为New proxy的代理链

image-20240824022031705

根据拓补图的代理搭建顺序,将上面的代理一个一个拖下来即可成功构造代理链,入下图

image-20240824022111785

然后返回到初始界面,将代理规则里面的动作选择为我们刚创建好的代理链即可

image-20240824022133180

proxychains4

proxychains4配置相对简单,在第一层代理的下面写上第二层代理的ip和端口即可

image-20240824022312129

总结

在靶场环境,对于一层代理和百分之90的多层代理,gost完全可以胜任,总结一句话就是战斗爽,传上去一条命令搭起来就是干。那另外的百分之10是什么呢?针对于gost的多层代理,他需要使用代理链的方式进行连接,也就是说需要多个ip和端口,如果某些漏洞在内网,且只能允许设置一个ip和端口,那这就尴尬了。解决方法有两种,1.用CS搭建代理,CS的多层代理会集成为一对ip和端口,2.使用kengwang师傅推荐的stowaway代理,它也会将多层代理集成为一对ip和端口。