网站日志发现大量 .git 扫描请求:Git 源码泄露攻击分析与防护方案

19次阅读
没有评论

前言

今天查看站点访问日志,发现有外部 IP 持续批量请求 /.git/objects/xxx 路径,大量 404 日志刷屏。这是互联网上非常常见的自动化扫描行为,目标是探测 Git 源码泄露,一旦成功,攻击者可完整拉取网站源码、配置文件、数据库账号密码、密钥等敏感信息。下面结合日志实例,完整分析攻击行为、风险与加固方案。

攻击日志样本

95.217.169.43 - - [21/Oct/2026:01:38:09 +0800] "GET /.git/objects/8a/e39d7652fe09670610203b22aa480fb845991f HTTP/1.1" 404 23577 "-" "Mozilla/5.0 (Windows NT 10.0; rv:78.0) Gecko/20100101 Firefox/78.0" "-" 0.000 zt.luomor.com

日志拆解

  1. 请求路径:/.git/objects/xxx,Git 仓库底层对象存储路径,Git 源码泄露扫描特征路径。
  2. 状态码 404:本次请求返回 404,代表 Web 根目录下不存在对应的 git 文件,本次扫描未成功获取源码,当前无源码泄露风险。
  3. 源 IP:95.217.169.43,自动化扫描节点 IP。
  4. User-Agent:Mozilla/5.0 (Windows NT 10.0; rv:78.0),伪造浏览器 UA,并非真实用户访问,是扫描器的伪装手段。

攻击原理

这类扫描工具常见为 Githacker、GitSheriff 等,攻击流程:

  1. 优先探测 /.git/HEAD、/.git/config。如果返回 200,判定网站存在 Git 仓库暴露;
  2. 读取 commit 哈希,递归遍历所有 /.git/objects/sha1 对象文件,批量下载 Git 对象;
  3. 本地还原完整 Git 仓库,拿到全部源码、所有提交记录,检索 .env、数据库配置、API 密钥、后台账号等敏感凭证。

只要 Web 根目录意外上传了完整 .git 文件夹,攻击者无需任何权限,就能直接扒取整套代码。

快速自检命令

在服务器或本地终端执行,验证站点是否存在 Git 泄露:

# 检测 .git 核心文件是否可访问
curl -I http://zt.luomor.com/.git/HEAD
curl -I http://zt.luomor.com/.git/config
  • ✅ 安全:返回 404 / 403
  • ❌ 高危:返回 200,说明.git 目录暴露,需要立刻处理

防护配置

推荐无论是否存在.git 目录,都在 Web 服务层拦截对.git、.svn 这类版本控制目录的访问,作为基础安全基线。

Nginx 配置(推荐,写入 server 块)

# 拦截所有对.git目录的访问
location ~ /\.git {
    deny all;
    return 403;
}

配置完成后重载 Nginx:nginx -t && nginx -s reload

Apache 配置(.htaccess)

<DirectoryMatch "/\.git">
    Require all denied
</DirectoryMatch>

Caddy 配置

@git_leak path_regexp /.git
respond @git_leak 403

临时封禁扫描 IP

注意:封禁单个 IP 仅临时缓解,扫描器 IP 池会轮换,不能根治,仅应急使用。

Nginx 黑名单

deny 95.217.169.43;

Linux iptables

iptables -A INPUT -s 95.217.169.43 -j DROP

长期加固建议

  1. 部署规范:生产站点发布时,严禁将 .git 目录上传到 Web 根目录,打包部署时排除.git 文件夹。
  2. 接入 WAF:使用 ModSecurity、Cloudflare 等 WAF,添加规则拦截/.git、/.svn、/.hg等版本控制目录扫描请求。
  3. 日志告警:配置日志监控,当出现访问/.git的请求时触发告警,第一时间发现扫描行为。
  4. 安全自检:定期使用 githacker、trufflehog 工具自检源码泄露与硬编码密钥泄露问题。
  5. 限流防护:对单 IP 短时间大量请求做频率限制,减少爬虫 / 扫描器对服务器资源消耗。

总结

.git 目录扫描属于互联网常态化自动化探测,本次日志返回 404,站点暂时安全。但这类扫描是 “广撒网” 行为,一旦某次部署失误,把.git 目录带到线上,就会直接造成源码泄露。建议将拦截版本控制目录作为 Web 服务的基础安全配置,提前做好防护,不要等出事再补救。

正文完
可以使用微信扫码关注公众号(ID:xzluomor)
post-qrcode
 0
评论(没有评论)
验证码