pluck: 1
项目地址:https://download.vulnhub.com/pluck/pluck.ova.zip
是一个打包好的镜像文件
注意:导入 vmx 时一定要选择我已移动,否则没网
使用 Nmap 扫描出开放服务及操作系统版本

任意文件读取
Pluck
访问 80 端口发现存在 ?page 参数

尝试读取 /etc/passwd 文件成功

读取脚本文件 /usr/local/scripts/backup.sh
提示备份文件存放于 /backups/backup.tar
1 | #!/bin/bash ######################## # Server Backup script # ######################## #Backup directories in /backups so we can get it via tftp echo "Backing up data" tar -cf /backups/backup.tar /home /var/www/html > /dev/null 2& > /dev/null echo "Backup complete" |
通过 php://filter 将文件内容转换为 Base64 后输出
1 | curl "http://192.168.17.153/index.php?page=php://filter/convert.base64-encode/resource=/backups/backup.tar" | grep -oP '(?<=jumbotron>)[^<]+' > backup.tar64 |
再去解码

下载文件解压缩

使用 id_key4 成功登录用户 paul
1 | ssh -i id_key4 paul@192.168.110.131 |
登录后进入一个菜单驱动的 shell

提权
Vim 逃逸
在这个菜单中我们选择编辑文件

Vim 允许用户在编辑器内部启动一个外部 shell,这一行为由两个关键命令控制:
:set shell=/bin/bash- 作用:修改 Vim 的内部
shell选项,指定当 Vim 需要调用外部 shell 时,使用/bin/bash这个程序 - 原理:Vim 默认会使用系统环境变量
$SHELL指定的 shell(通常是/bin/bash)。但如果该变量被更改,或者 Vim 启动时设置了shell选项,这里的:set命令会显式地将其指向一个特定的 shell 程序
- 作用:修改 Vim 的内部
:shell- 作用:暂停 Vim 进程,启动一个交互式的外部 shell 会话。
- 原理:该命令会读取当前 Vim 中
shell选项的值,然后通过fork和exec系统调用创建一个子进程来运行那个 shell 程序
在 Vim 命令模式下执行
1 | :set shell=/bin/bash |

Exim 邮件传输代理(CVE-2016-1531)
查找 SUID 文件
1 | find / -perm -u=s -type f 2>/dev/null |

根据搜索结果找到漏洞

为了在低端口(如 25 端口)上监听并处理邮件,Exim 进程通常以 root 权限启动,但在处理具体邮件任务时,会切换为较低权限的 exim 用户
然而,当 Exim 以 setuid root 方式安装时,它有能力以 root 身份执行某些操作
创建恶意 Perl 模块
1 | # 在 /tmp 目录下创建一个名为 root.pm 的 Perl 模块文件 |
设置环境变量
1 | # PERL5LIB=/tmp:告诉 Perl 解释器在 /tmp 目录下搜索模块 |
存在漏洞的 Exim 版本(< 4.86.2)在初始化 Perl 环境时,没有清理继承自父进程的环境变量
因此,攻击者设置的 PERL5LIB 和 PERL5OPT 被传递给了 Exim 内部调用的 Perl 解释器
Perl 解释器在启动时读取这些环境变量,并执行 -Mroot 指令,从而加载 /tmp/root.pm 模块
由于此时 Exim 进程仍以 root 身份运行,Perl 模块中的 system("/bin/sh") 也以 root 权限执行,产生一个 root shell
提权成功
