第171天:代理通讯篇&无外网或不可达&socks全协议&规则配置&C2正反向上线&解决方案
代理和内网代理
代理
代理是一种网络中介,本质上是代替客户端与目标服务器进行通信的中间节点,它的核心作用是转发流量、缓存数据、实施访问控制或隐藏真实网络身份
代理在渗透测试中最基础也最重要的作用是隐藏攻击源。当你对目标发起扫描或攻击时,如果直接使用本机IP,防守方的流量监控设备会立刻记录并溯源。通过代理服务器转发流量,目标系统看到的是代理的IP,而非你的真实IP。这为攻击者提供了关键的“缓冲时间”,在后续的渗透过程中,防守方难以通过IP直接锁定攻击者的物理位置或真实身份,从而大大增加了溯源难度
其次,代理是突破网络边界限制的关键。很多目标网络部署了防火墙或入侵检测系统,它们会拦截来自特定地区、特定IP段或特定协议的流量。攻击者可以通过代理,将流量伪装成目标网络信任的源地址或合法协议,从而绕过这些边界设备的拦截。例如,如果目标防火墙只允许来自特定海外IP的HTTP流量,攻击者就可以使用位于该地区的代理,将攻击流量封装在正常的HTTP请求中,从而成功触达内网资源
内网代理
内网代理在渗透测试中则扮演着内网渗透横向移动的“跳板”角色。当攻击者通过某种方式(如钓鱼邮件或漏洞利用)成功拿下一台内网主机后,这台主机就变成了一个 “立足点”。但此时,攻击者往往无法直接访问内网中更核心的服务器(如数据库、域控服务器),因为这些服务器通常只对内网特定网段开放。这时,攻击者会在已控制的这台主机上部署内网代理(如 Socks 代理或 HTTP 代理),将攻击者的流量通过这台 “跳板机” 转发到内网深处。这样一来,攻击者就可以从自己的电脑,通过跳板机,像在内网本地一样去访问和攻击其他内网主机,实现从外网到内网的纵深渗透
只有先把网络通信搞好,才能去进行信息收集或者其他的一些漏洞利用的操作
不出网的原因:
- 可能是就真的没有网络,完全和外网隔离开
- 也可能利用一些工具,限制部分应用程序或者访问流量
三层网络代理
环境搭建
拓扑图,三层网络

四个 Windows 的虚拟机用的配好了的,kali 用的自己的,临时设置一下 IP:
1 | |

现在拥有 Kali,可以直接访问到 Windows 2016(Web),之后就是要去访问另外三台主机
为了方便自己的 Windows 主机可以访问 kali,之后要连 CS 嘛,也临时设置一下


为了更好的模拟实验环境,最好是把一些网卡关掉,让自己的主机不能和 SQL、FILE、DC 这三个主机进行通信,当然这里的虚拟机是下载的配好的,就不需要设置了,如果是自己在本地搭建的虚拟机,就需要关一下这些网卡,比如下面的 VMware Network Adapter 2、3、4

看一下几个虚拟机的 IP 是否配置无误




解决网络通信问题方法
利用工具
就是先拿下 Windows 2016(Web)这台机器,然后把进行渗透测试的工具放到机器上,继续去渗透下一个 SQL 的机器,然后拿下 SQL 后继续放工具,去拿下 FILE,拿下后放工具去拿下 DC
这种方案就是不需要代理,就是拿下一台主机后,把工具放到拿下的主机上,用拿下的这个主机去对下一台主机进行渗透测试
但是在真实的场景中,目标机器上很可能会有一些杀软什么的,这就要面临问题:放上去的工具如何才能不被杀掉;甚至在进行渗透测试的时候,传入工具到机器上,刚好管理员在使用电脑,发现了多出的这个工具,就很麻烦了;还有就是能否图形化操作工具,如果拿下的机器是 Linux 系统中,也不好操作
所以这种方法可以说是百害而无一利
利用代理
最好的解决方法就是利用代理技术,就是不需要把工具放到拿下的主机上面,只要放到自己的攻击机上面,通过代理去访问其他的主机
就是利用攻击机 Kali 拿下 Web 主机,因为 Web 主机和 SQL 主机在同一个网段,所以可以设置一个节点,利用 Web 主机去访问到 SQL 主机,后门的依次类推,拿下 SQL 主机后设置节点,通过 SQL 主机去访问 FILE 主机,利用的是 socks 协议
利用代理的优点就是:所有攻击流量都从你的 Kali 发出,目标机器上只有“网络连接”,没有“恶意文件”
上线CS
Web机器上线CS
首先,假设已经获取了 Web 机器的权限,现在要将其上线到 CS 上
先把 kali 的 CS 服务端起来
1 | |

客户端放自己的主机了,启动客户端


CS 生成个 payload,放 Web 机器上,上线到 CS

回连间隔设置为 1



一层代理和SQL主机上线
看 SQL 主机,上面有 phpstudy,开启起一个网站

在 Web 机器中的浏览器可以正常访问到
1 | |

本机是访问不到的

现在就是要用已经上线到 CS 的 Web 机器做代理
找到 “代理转发” 中的 “Socks代理”

有两种 socks 协议,socks4a 和 socks5

socks5 多了账号密码验证,我习惯用 socks5,这里就不用账号密码,代理的端口可以自定义,也可以直接默认用它给的


然后用代理工具,这里 Windows 用 Proxifier
工具下载地址:https://get-shell.com/1506.html
先设置代理服务器

添加一个,这里的地址是 CS 服务端的 IP,也就是 kali,端口就用刚才 CS 中的,协议也要一直

可以检查一下,确保连接无误

然后设置代理规则

添加一个,上面的应用程序和目标主机就是设置哪些应用程序或者主机是要走这个代理的,比如这里设置的是应用程序是默认的,也就是都走这个代理,目标主机设置的是192.168.2.*,就是这个网段都走这个代理,最下面的就选择刚才设置的代理服务器,

启用这个规则

再去本机的浏览器中刷新一下,访问 SQL 主机的网站,就可以访问到了

现在就可以在本机使用工具对 SQL 主机进行渗透测试了,比如使用 fscan 这个工具
1 | |

刚才已经可以在本机直接访问到 SQL 这个机器了,假设已经通过漏洞点拿到了 SQL 这个主机的权限,要继续去访问下一个 FILE 这个主机,继续搭建二层代理
先看一下 CS 生成的 Payload 的几个模式

比如常用的 Beacon HTTP,这种模式生成的就是 reverse_http,还有比如 Beacon SMB 生成的是 beacon_bind_pipe 等等
总的来说就是下面这两种
1 | |
一般都是用的反向后门
因为防火墙一般对外部到内部过滤严格,而内部到外部的过滤少甚至没有过滤
像下面这三个机器,kali 就是我们自己的攻击机,Web 机器是已经拿下的机器,SQL 是准备去访问的,现在已经将 Web 上线到 kali 的 CS 上,是利用反向连接的,原因就像上面说的一样,而 SQL 就不能利用反向连接到 kali 的 CS 了,因为 kali 和 SQL 这两个机器不在同一个网段上,相互是不通的

所以就要做一个正向后门,kali 和 SQL 两个机器是不互通的,但是 Web 和 SQL 这两个机器是互通的,并且现在已经拿到 Web 机器的权限,所以就要通过 Web 机器去正向连接 SQL 机器
现在就生成一个后门,先设置好一个监听器

生成一个 Payload,模式要选择 “Windows 可执行程序(Stageless)”

监听器选择刚才创建的,其他的默认


把生成好的后门程序放到 SQL 虚拟机中,真实环境肯定要通过利用漏洞上传上去的,这里本地学习就直接复制进去了,先看一下端口使用情况
1 | |
目前没有 4444 端口的连接

然后双击运行程序,再看一下,可以看到 4444 端口正在监听中

然后来到 CS 中,让 Web 机器去连接 SQL 机器的这个端口
1 | |

看一下网络连接情况,可以看到箭头的指向就不一样了

二层代理和FILE主机上线
继续看第三台 FILE 机器,这个机器所扮演的是一个文件服务器,开启了 ftp 服务,SQL 和 FILE 这两个机器是在同一个网段上,所以可以通过 SQL 这个机器去访问 FILE 的 ftp 服务
先把 ftp 服务启动起来
桌面有个 QuickEasyFTPServer-v4.0.0 文件夹

打开文件夹,运行 ftpserver.exe 程序

点击左上角的绿灯开启服务

在 SQL 机器中尝试访问 ftp 服务
1 | |
没有问题,可以连接访问

而 Web 机器还有我的本机都是连不上的


要想我的主机能访问到这个服务,方法就是和之前一样,利用 SQL 机器进行代理转发,加一个 socks 代理


然后利用代理工具 Proxifier,添加一个代理服务器,注意 IP 地址还是 C2 服务器的,也就是 kali 的,只要修改一下端口就行

检查无误

然后添加代理规则

启用代理

现在就可以在本机访问 ftp 服务了

也可以利用 fscan 扫 FILE 这个机器了
1 | |

下面来把 FILE 上线到 CS,先把之前生成的正向连接的那个 Payload 上传到 FILE 机器上,并运行

然后在 CS 上,让 SQL 机器去连接
1 | |

看一下箭头指向

三层代理和DC主机上线
最后一个 DC 机器,和之前一样,用 FILE 机器做 socks 代理



然后利用本地的 Proxifier 工具,添加代理服务器和规则



然后就可以利用 fscan 去扫描 DC 机器了
1 | |

上线也是和之前一样,把 Payload 传到 DC 机器上运行

在 CS 上让 FILE 机器去连接
1 | |

至此四台主机全部上线 CS
小结
什么时候可以使用反向连接
这要看具体的情况,如果目标机器可以和 C2 服务器进行通信,就可以进行反向连接
举个例子:
现在有攻击机 A,还有两个内网机器 B 和 C,A 和 B 可以相互通信,B 和 C 可以相互通信,A 不能访问到 C,但是 C 可以访问到 A,此时要把 C 上线到 A 的 CS 服务器上,就可以使用反向连接,因为 C 是可以和 A 进行通信的

还是上面的条件,改一下,A 和 C 都不能直接访问到对方,此时还是可以利用反向连接将 C 上线到 A 的CS 服务器上,因为 C 可以和 B 进行通信,A 可以和 B进行通信,所以 A 和 C 就可以通过 B 进行相互通信

再改一下,B 可以访问 C,但是 C 不能访问到 B,那么此时就不能使用反向连接,只能使用正向连接,因为 C 没办法和 A 进行通信

上线MSF
配置反向上线命令
1 | |
配置正向上线命令
1 | |
Web机器上线MSF
先生成一个反向后门,生成一个反向连接到192.168.139.111的2333端口的 exe 后门
1 | |

将其放到 Web 机器中,然后先打开 msf 并监听好端口
1 | |

选择监听模块
1 | |

设置好 payload,使用反向连接的
1 | |

这里可以查看一下要设置的选项,就根据 Required 这一列是什么来判断哪些选项是必须设置的,这里就是 LHOST 和 LPORT,EXITFUNC 默认的就好
1 | |

然后就是设置地址和端口,也就是监听信息,最后运行,进入监听状态
1 | |

然后再去运行 Web 中的msf.exe后门程序就可以上线了

一层代理和SQL主机上线
上线之后就可以继续渗透了,比如查看有哪些网段,看一些路由关系
1 | |

第一次看不到可以先执行给的这个命令,然后再看,这里就是可以看到存在192.168.2.0/24和192.168.139.0/24这俩网段
1 | |

下面就是要创建 socks 节点,先跳出当前的 session,然后选择创建 socks 节点的模块
1 | |

查看一下这个模块的选项,要设置的就是 IP、端口、socks的版本
1 | |

这里 IP 就用默认的0.0.0.0,可以设置一下端口,也可以直接用默认的,socks 的版本就用 socks5,不用改
1 | |

然后运行起来
1 | |

可以在本机中用 Proxifier 检查一下


下面不用这个工具,主要是实验在 kali 中进行渗透的,换成使用 kali 中自带的代理工具 proxychains
这个工具有一个配置文件,在:/etc/proxychains4.conf

翻到最下面,加上:
1 | |

然后就可以使用工具,测试一下联通性,就是正常输入命令,不过命令前面要加上proxychains4,比如:
1 | |

直接 curl 的话是 curl 不到的

下面要把 SQL 主机上线到 MSF,先生成后门,这里生成正向后门,IP 就不用设置了
1 | |

复制到 SQL 主机中,然后就是在 msf 设置好模块去连接,还是用之前开启的,有 session
1 | |

1 | |
这里看一下选项设置,要设置一个 LPORT ,目标地址 IP 也设置一下
1 | |

1 | |

然后去执行一下后门程序就可以上线了

二层代理和FILE主机上线
看一下路由关系
1 | |

然后和之前一样,设置一下代理节点
1 | |

然后再去修改那个配置文件,改成
1 | |

然后调用工具去访问 FILE 的 ftp 服务试试,可以成功访问
1 | |

看一下此时的 sessions,上线了 Web 和 SQL 这俩机器,继续上线 FILE 机器

把之前生成的后门程序上传到 FILE 机器中,然后再设置一下模块,改一下连接的目标机器 IP
1 | |

然后运行一下后门程序就可以成功上线了

三层代理和DC主机上线
先获取路由信息
1 | |

设置代理节点
1 | |

修改配置文件
1 | |

测试连通性
1 | |

可以访问到 DC 主机,继续将其上线到 MSF,把后门程序传到 DC 主机上,然后设置一下模块
1 | |

运行程序,DC 上线 MSF

看一下 sessions,至此四台主机全部上线 MSF
