当前位置: 首页 > news >正文

【慕伏白】CTFHub 技能树学习笔记 -- Web 之信息泄露

文章目录

  • 1 目录遍历
  • 2 PHPINFO
  • 3 备份文件下载
    • 3.1 网站源码
    • 3.2 bak 文件
    • 3.3 vim 缓存
    • 3.4 .DS_Store
  • 4 Git 泄露
    • 4.1 漏洞解析
      • .git 泄露怎么利用?
      • .git 泄露会造成什么危害?
      • .git 泄露是怎么发生的?
    • 4.2 Log
    • 4.3 Stash
    • 4.4 Index
  • 5 SVN 泄露
  • 6 HG 泄露
  • 7 引用


1 目录遍历

  1. 打开链接,如下图所示;

目录遍历

  1. 开始寻找后,发现是一个个文件夹,文件夹深度不高,可以一个一个试出来,如下图所示;

文件夹

  1. 也可以通过寻找 flag 的建议脚本,如下图所示;

若文件夹深度不定,flag 存放文件名未知时,此脚本不可用;

简易脚本

  1. 以下为解决未知深度目录遍历的 python 脚本;
#!/usr/bin/env python
# _*_ coding:utf-8 _*_
# mfbmorphbai
import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin# 初始目录URL
url = "http://challenge-99b404265ef5da52.sandbox.ctfhub.com:10800/"
base_url = url + "/flag_in_here"
# 存储已访问的URL,避免重复遍历
visited = set()
# 找到的flag结果
found_flags = []def check_file(file_url):"""检查单个文件内容是否包含flag"""try:response = requests.get(file_url, timeout=10)response.encoding = 'utf-8'content = response.textif "flag{" in content or "FLAG{" in content or "ctfhub{" in content:return True, contentreturn False, contentexcept requests.exceptions.RequestException as e:print(f"[-] 访问文件 {file_url} 出错: {str(e)}")return False, ""def scan_directory(current_url):"""递归扫描目录,检查所有文件内容"""# 避免重复访问if current_url in visited:returnvisited.add(current_url)try:# 发送请求获取目录页面response = requests.get(current_url, timeout=10)response.encoding = 'utf-8'content = response.text# 解析页面中的链接soup = BeautifulSoup(content, 'html.parser')links = soup.find_all('a', href=True)for link in links:href = link['href']# 拼接完整URLnext_url = urljoin(current_url, href)# 过滤掉已访问的链接if next_url in visited:continue# 判断是目录还是文件if href.endswith('/') or next_url.endswith('/'):# 目录,递归扫描print(f"[*] 进入目录: {next_url}")scan_directory(next_url)else:# 文件,检查内容print(f"[*] 检查文件: {next_url}")has_flag, file_content = check_file(next_url)if has_flag:found_flags.append(f"在文件 {next_url} 中找到flag")print(f"[+] 找到flag: {next_url}")except requests.exceptions.RequestException as e:print(f"[-] 访问目录 {current_url} 出错: {str(e)}")returnif __name__ == "__main__":print(f"开始从 {base_url} 递归扫描文件...")scan_directory(base_url)# 输出所有找到的flagif found_flags:print("\n===== 找到的flag结果 =====")for flag in found_flags:print(flag)else:print("\n未找到包含flag的文件")
  1. flag 文件如下图所示;

遍历flag

2 PHPINFO

  1. 打开链接,如下图所示;

phpinfo查看

  1. 点击进入,查看 phpinfo ,如下图所示;

phpinfo

  1. CTRL + F 搜索关键字,即可找到 flag ,如下图所示;

ctrlf

3 备份文件下载

3.1 网站源码

  1. 打开链接,如下图所示;

网站源码

  1. 使用 python 脚本遍历文件,如下图所示;
# mfbmorphbai
import requestsurl = "http://challenge-42881a051454d37a.sandbox.ctfhub.com:10800/"li1 = ['web', 'website', 'backup', 'back', 'www', 'wwwroot', 'temp']
li2 = ['tar', 'tar.gz', 'zip', 'rar']
valid_links = []
for i in li1:for j in li2:url_final = f"{url}/{i}.{j}"try:# 发送请求,不重定向,超时设置为5秒r = requests.get(url_final, allow_redirects=False, timeout=5)# 打印所有请求的状态码和链接(便于调试)print(f"状态码: {r.status_code} - 链接: {url_final}")# 检查是否返回200 OKif r.status_code == 200:valid_links.append(url_final)except requests.exceptions.RequestException as e:print(f"请求错误 - 链接: {url_final} - 错误: {str(e)}")# 单独显示所有有效的200链接
if valid_links:print("\n===== 找到以下返回200的有效链接 =====")for link in valid_links:print(f"{link}")
else:print("\n未找到返回200的有效链接")

bakfilefond

  1. 下载并访问文件,有种被晃点的感觉;
wget http://challenge-42881a051454d37a.sandbox.ctfhub.com:10800//www.zip
unzip www.zip
vim flag_1688410322.txt

whereisflag

  1. 这一小节的题目是 备份文件,说明我们下载的只是备份文件,在网页中查看原文件,即可发现 flag ;

webbakflag

3.2 bak 文件

  1. 打开链接,如下图所示,翻译过来的意思是, flag 在首页的源码里;

flaginindex

  1. 查看是否存在首页的备份文件(备份文件一般为.bak),即可发现 flag ,如下图所示;

indexphpbak

3.3 vim 缓存

  1. 打开链接,如下图所示;

vimindex

  1. 这道题的题目指的是 vim 缓存,由于 vim 一旦异常退出就会生成 .swp 隐藏文件(隐藏文件前缀加 . ,如 .index.php.swp),下载该缓存文件,并打开,如下图所示;
wget http://challenge-f8a6def4c18b7231.sandbox.ctfhub.com:10800/.index.php.swp
vim .index.php.swp

brokenvimcash

  1. 修复该文件,再次打开,即可发现 flag ,如下图所示;
vim -r .index.php.swp

recoverbak

  1. 可用 vim 另存后打开,然后右键复制,如下图所示;
:w ~/Document/index.php.bak
cat index.php.bak

cat

3.4 .DS_Store

  1. 打开链接,如下图所示;

tryfind

  1. 题干里有提示,如下图所示;

题干

  1. 尝试下载 .DS_Store ,下载后使用 cat 查看,如下图所示,找到 flag 线索;

下载cat

  1. 打开这个文件,即可找到 flag ,如下图所示;

dsflag

4 Git 泄露

4.1 漏洞解析

.git 泄露怎么利用?

  • 当你的网站根目录下存在 .git 文件夹,并且该文件夹被错误地暴露在公网上时,攻击者就可以通过访问 .git 文件夹获取到你的项目代码、提交记录、分支信息等等敏感信息。
  • 访问源码:攻击者可以下载 .git 目录,并还原出完整的源码,包括可能敏感的配置文件、数据库凭据等。
  • 获取历史版本:攻击者可以查看项目的历史提交记录,找到敏感信息,例如在历史版本中意外提交的密码。
  • 分析开发历史:攻击者可以分析提交日志、分支结构等,了解开发流程和关键变更点,甚至发现潜在的漏洞。

.git 泄露会造成什么危害?

  • 代码泄露: 攻击者可以获取到你的项目代码,并将其用于恶意目的,例如进行代码分析、代码窃取、修改代码等。
  • 敏感信息泄露: 攻击者可以获取到你的提交历史记录,从中找出开发者使用的账号密码、数据库连接信息、API 密钥等等敏感信息。
  • 项目安全漏洞: 攻击者可以利用你项目代码中的安全漏洞,进行攻击,例如 SQL 注入、跨站脚本攻击等等。

.git 泄露是怎么发生的?

  • 错误配置: 开发人员将 .git 文件夹错误地放置在网站根目录下,导致它被暴露在公网上。
  • 网站漏洞: 网站存在漏洞,例如文件上传漏洞,攻击者可以利用漏洞上传恶意文件,并将其写入网站根目录下,从而创建 .git 文件夹。

4.2 Log

  1. 启动关卡,题干里面给出了提示:请尝试使用 BugScanTeam 的 GitHack 完成本题 ,如下图所示;
  • GitHack 下载地址:GitHack ;
  • 在线 GitHack :在线 GitHack ;

githack提示

  1. 打开链接,如下图所示;

log链接

  1. 根据提示,下载 GitHack ,并运行项目内的 GitHack.py 文件,如下图所示;

    # 代码运行格式,需要使用 python2
    python2 GitHack.py [url]/.git
    

gitclonegithack

  1. 运行成功后,进入 dist 目录,进入新增的文件夹,如下图所示;

dist1

  1. 执行 git show ,显示当前目录下的 Git 对象信息,即可发现 flag ,如下图所示;

gitshow1

4.3 Stash

git stash 命令将所有修改(包括新增的文件)暂存起来;
git stash pop 命令将暂存区中的最新的 stash 恢复到工作目录,并且从 stash 列表中移除该 stash
git stash apply --index stash@{0} 命令用于将指定的 stash 应用到当前工作目录,并恢复储藏时的暂存区状态,不删除当前 stash
git stash list 命令用于查看当前存储的所有 stash(暂存)的列表;

  1. 打开链接,如下图所示;

stash链接

  1. 运行 GitHack.py 并进入新增文件夹,查看当前的 stash 列表,发现暂存区非空,如下图所示;

stashlist

  1. 恢复这个 stash ,发现多了一个 .txt 文件,打开文件即可找到 flag ;

恢复stash

4.4 Index

  1. 打开链接,如下图所示;

index链接

  1. 运行 GitHack.py 并进入新增文件夹,发现存在 .txt 文件,打开即可找到 flag ,如下图所示;

indexcat

5 SVN 泄露

  1. 下载 SVN 文件源代码泄露漏洞利用工具,如下图所示,在文件 ReadMe 中可以看到执行指令;
  • 下载地址:SVN 文件源代码泄露漏洞利用工具 ;
./rip-svn.pl -v -u http://www.example.com/.svn/

gitclonesvn

使用 svn checkout 后,项目目录下会生成隐藏的 .svn 文件夹( Linux 上用 ls 命令看不到,要用 ls -alh 命令);
svn1.6 及以前版本会在项目的每个文件夹下都生成一个 .svn 文件夹,里面包含了所有文件的备份,文件名为 .svn/text-base/文件名.svn-base
svn1.7 及以后版本则只在项目根目录生成一个 .svn 文件夹,里面的 pristine 文件夹里包含了整个项目的所有文件备份;

  1. 安装依赖;
sudo apt-get install perl libio-socket-ssl-perl libdbd-sqlite3-perl libclass-dbi-perl libio-all-lwp-perl
sudo apt-get install libparallel-forkmanager-perl libredis-perl libalgorithm-combinatorics-perl
sudo apt-get install cvs subversion git bzr mercurial
  1. 打开链接,如下图所示;

subversion

  1. 执行指令,如下图所示;
./rip-svn.pl -v -u http://challenge-442a5a786e5d7b88.sandbox.ctfhub.com:10800/.svn/

svn指令执行

  1. 执行后,当前文件夹会多出一个隐藏文件夹 .svn ,使用 ll -alh 查看,如下图所示;

.svnll-alh

  1. 进入目录 .svn/pristine/ ,打开文件夹,即可找到 flag ,如下图所示;

svnflag

6 HG 泄露

  1. 同样使用上述漏洞利用工具,在文件 ReadMe 中可以看到执行指令;
./rip-hg.pl -s -v -u http://www.example.com/.hg/
  1. 打开链接,如下图所示;

hg打开链接

  1. 执行指令,如下图所示;
./rip-hg.pl -s -v -u http://challenge-461f15616c011f28.sandbox.ctfhub.com:10800/.hg/

righg

  1. .hg 文件夹下,搜索带有 flag 字符串的文件,可以找到一个 .txt 文件,如下图所示;
grep -r flag *

grephg

  1. 回到网页,进入这个文件,即可找到 flag ,如下图所示;

hgflag

7 引用

[1] 渗透测试 | 实战从.Git目录泄露导致信息泄露和任意文件读取

[2] CTFHUB技能树(全详细解析含进阶)

http://www.xdnf.cn/news/1364743.html

相关文章:

  • vue3+typescript:为表格生成唯一的Key/No
  • 集群与集群概念
  • 如何在 Jenkins 中安装 Master 和 Slave 节点以优化 CI/CD 流程
  • 【数据可视化-98】2025年上半年地方财政收入Top 20城市可视化分析:Python + Pyecharts打造炫酷暗黑主题大屏
  • 【数据可视化-100】使用 Pyecharts 绘制人口迁徙图:步骤与数据组织形式
  • Linux下的软件编程——网络编程(http)
  • 基于git的场景解决
  • DeepSeek 14B模型本地部署与预训练实现方案
  • 从零开始学习单片机15
  • MySQL常见报错分析及解决方案总结(1)---Can‘t connect to MySQL server on ‘localhost‘(10061)
  • 什么是事件循环(Event Loop)?浏览器和 Node.js 中的事件循环有什么区别?
  • 维度建模 —— 雪花模型 和 星型模型的优缺点
  • 冯·诺依曼架构:现代计算机的基石与瓶颈
  • Linux驱动开发笔记(七)——并发与竞争(下)——自旋锁信号量互斥体
  • k8s笔记03-常用操作命令
  • vite 项目创建、插件配置
  • JBL音响代理——河北正娱科技的声学精品工程
  • 智慧城市SaaS平台/交通设施运行监测系统之桥梁运行监测、城市道路塌陷风险运行监测系统架构内容
  • 网络编程--TCP/UDP Socket套接字
  • 验证码流程
  • 【AI解读源码系列】ant design mobile——Space间距
  • 京东API分类接口实战指南:获取各类商品信息
  • 【大模型本地运行与部署框架】Ollama的API交互
  • Spring拦截器中@Resource注入为null的问题
  • PAT乙级_1120 买地攻略_Python_AC解法_含疑难点
  • 6.3Element UI 的表单
  • 【python断言插件responses_validator使用】
  • 分布式系统与单机系统的优劣势对比
  • Reachability Query
  • Linux系统编程——进程 | 线程