WP001——CTF赛题解析-Source

182 阅读3分钟

WP001——source

时效性

2025年7月21日

题目来源

ctf.bugku.com/challenges/…

题目描述

image.png

Write Up

步骤一

1、打开题目网址

image.png

发现没有多余提示,直接用****dirsearch****扫描一下目录

也可以用其他的,比如“御剑”

在dirsearch的目录下打开 powershell 或者 cmd , 输入:

PYTHON dirsearch.py -u http://117.72.52.127:18684/

image.png 发现有flag文件,打开以后发现不对,有 .git 目录,git目录可能会存在代码的各个版本的保存记录,可能会存在信息

image.png 由于提示使用linux环境,使用 **wget**将网站整个 git 目录和文件下载下来

wget -r http://117.72.52.127:18684/.git/

wget 是一个命令行工具,用于从网络上下载文件,Linux自带。

  • -r:递归下载,可以下载整个网站或目录。

image.png

git 查看之前的版本(代码提交记录,更改历史),获得版本号,能明显看到有三个版本是有 flag 字符串的

git reflog

image.png

查看上述记录,就可以看到flag

image.png

参考文档

blog.csdn.net/2301_812121…

总结

上述题目的重点是,.git文件里面信息的挖掘,.git文件是源码泄露的一种,可以通过它来恢复之前的代码数据,但是.git还有一些隐藏的数据,对该文件的挖掘,是对信息泄露最大化利用的一种方式。

一、基础信息收集

  1. 恢复完整源码

    • 工具:GitToolsdvcs-ripper

    • 步骤:

      # 使用 GitTools 下载完整仓库
      ./dumper.sh http://target.com/.git/ ./git_dump  
      ./extractor.sh ./git_dump ./extracted_code
      
    • 关键收获:完整项目源码、配置文件、注释中的敏感信息。

  2. 查看分支与标签

    • 命令:

      git branch -a  # 查看所有分支
      git tag        # 查看版本标签
      
    • 价值:发现未上线功能分支(如 devtest)、预发布版本代码。


二、深度历史挖掘

  1. 分析提交历史

    • 操作:

      git log --stat              # 查看提交历史及修改文件
      git show <commit-id>        # 查看具体提交内容
      git log -p -S'password'     # 搜索包含关键词的提交
      
    • 敏感数据

      • 硬编码凭证(API Keys、数据库密码)

      • 被删除但未清除的敏感文件(如 config.bak

      • 注释掉的调试代码(如支付逻辑绕过)

      image.png

  2. 恢复已删除文件

    • 步骤:

      git checkout <commit-id> -- path/to/deleted_file
      
    • 场景:恢复误删的配置文件(如 .env)或备份文件。


三、配置与环境信息

  1. 提取 .git/config

    • 关键内容

      • 远程仓库地址(可能含内部GitLab地址)
      • 开发者用户名/邮箱(用于社工)
      [remote "origin"]
          url = ssh://git@internal.gitlab.com/project.git  # 内部地址!
      

image.png

  1. 钩子脚本分析(.git/hooks/

    • 检查 pre-commitpost-receive 等脚本

    • 风险点:脚本中可能含部署路径、服务器IP或硬编码凭证。

image.png

image.png


四、隐蔽数据挖掘

  1. 搜索暂存区(Index)内容

    • 命令:

      git ls-files --stage        # 查看暂存区文件
      git diff --cached           # 对比暂存区与HEAD差异
      
    • 意义:开发者可能暂存未提交的敏感文件。

image.png

  1. 扫描未跟踪文件(如 .gitignore 例外)

    • 工具:git-secrets 或自定义脚本
    • 目标:查找被错误纳入版本控制的文件(如 *.key*.pem)。

五、扩展攻击面

  1. 利用 HEAD 与引用日志

    • 操作:

      git reflog show HEAD        # 查看HEAD变更历史
      
    • 用途:恢复开发者本地未推送的提交(如临时修复补丁)。

  2. 子模块泄露(.gitmodules

    • 解析文件获取子模块路径:

      [submodule "lib"]
          path = lib
          url = https://github.com/private/lib.git  # 可能指向内部仓库
      
    • 价值:扩展攻击目标至关联仓库。


六、自动化工具链

  • 推荐工具


七、高级利用技巧

  • Git 对象注入(当部分对象缺失时) 若 .git/objects/ 不完整,尝试通过哈希爆破恢复文件:

    # 使用 GitHacker 的哈希爆破模式
    python GitHacker.py http://target.com/.git/ --url-fix --brute
    
  • 结合目录遍历 若存在路径遍历漏洞,尝试访问:

    http://target.com/.git/../../../../etc/passwd