目录
目录遍历

打开环境,点击开始寻找flag看看有什么东西

可以看到,这里给出了网站的部分目录,我们可以点击进行访问
首先我们要明白,访问网站就是访问其目录中的文件,例如我们看到的网站首页,一般都是位于网站/var/www/html目录下的index文件中。
可以这样理解,一个网站就是由各级目录和其中的文件组成的。这里我们既然可以访问目录,题目又是遍历目录,那么我们就来看看这些目录里面都有什么东西。经过逐个点开,可以发现文件夹1/ 2/ 3/ 4/ 中还各有一组1/ 2/ 3/ 4/文件夹,最终在3/ 文件夹下的1/ 中找到flag.txt。
也就是说,flag文件存放于....../3/1文件夹中,这也叫做路径,和Windows资源管理器原理一致。



本题完。
PHPINFO

`phpinfo()` 是一个非常有用的 PHP 内置函数,当你在浏览器中运行它时,它会输出当前服务器的 PHP 配置和环境的详细信息。这个函数展示了有关 PHP 安装的大量信息,包括:
- PHP 的版本信息。
- PHP 编译选项和扩展。
- 服务器信息和环境(如果是运行在web服务器上)。
- PHP 环境。
- OS 版本信息、路径和主要的 PHP 配置指令。
- HTTP 头信息。
- PHP 许可信息。
这对于调试和确保服务器配置正确非常有用。如果你想查看你的 PHP 安装的具体信息,可以创建一个包含以下代码的 `.php` 文件并在浏览器中访问它:
<?php
phpinfo();
?>
出于安全原因,不建议在生产环境中公开访问 `phpinfo()` 页面,因为它可能会暴露敏感信息,使服务器更容易受到攻击。在不需要时,应该删除或限制访问该文件。
这道题中,我们可以访问到phpinfo.php文件,按住组合键CTRL+F打开搜索功能搜索关键字flag{即可找到flag。

本题完。
备份文件下载
Web备份文件下载漏洞,通常是由于网站的备份文件没有得到适当的保护和管理,导致攻击者可以通过简单的URL访问或其他方法来下载这些文件。这些备份文件可能包含敏感信息,如源代码、数据库凭证、配置文件等,如果被获取则可能对网站的安全造成重大风险。
网站源码
当开发人员在线上环境中对源代码进行备份操作,并且错误地将备份文件放在了 web 目录下,可能导致网站源码泄露。Web 目录(或称为文档根目录)是公开的,任何人都可以通过浏览器访问其中的文件,除非有特定的服务器配置来阻止这种访问。
这种情况通常发生在以下情形中:
-
不恰当的备份位置:开发人员应该将备份文件存储在非公开目录中或者使用特定的访问控制,确保这些备份文件不可通过互联网访问。
-
不安全的备份命名约定:备份文件经常以容易预测的名称存储(例如,
backup.zip,project_backup.tar.gz,database.sql等),这使得攻击者可以轻易猜测和访问这些文件。 -
缺乏服务器配置的安全性:服务器应配置适当的访问控制规则,以阻止对敏感目录和文件的访问。例如,通过
.htaccess(对于Apache服务器)或其他服务器配置文件,可以禁止访问特定文件或目录。

既然这道题已经告诉我们是源码泄露,那么我们要做的事情就是找到备份的源码文件的路径,下载或者访问它,找到其中的flag。

这里给出了我们常见的网站源码备份文件名和后缀示例,我们当然可以直接在地址栏后面加上/文件名+后缀尝试访问,但是这样效率很低,还有一种办法,就是目录扫描。这里我们用到的工具是Kali Linux虚拟机上的diesearch目录扫描工具。
命令是
dirsearch -u [链接]
扫描出了一个www.zip压缩包,直接添加到链接后面,再到浏览器地址栏回车访问,这里自动开始下载www.zip到我们电脑上。

可以看到其中有一个flag_.......txt,我们直接打开看看。

但是这个文本文档中并没有flag,需要我们复制这个文本文档的名称,然后到网站中访问看看。
为什么下载下来的文件中没有flag,但在浏览器中访问同名文件会得到flag呢?
因为下载下来的压缩包是网站的备份文件,这就解释了为什么包里的 flag.txt 文件不包含实际的flag。这种情况在CTF挑战和现实世界的安全评估中都很常见,通常出于以下几个原因:
-
备份时机:备份文件通常是定期创建的快照,用于灾难恢复或数据恢复。这意味着备份的内容可能并不完全反映当前网站的最新状态。如果
flag.txt在备份创建之后才被添加或修改,那么下载的备份文件中就不会包含最新的内容。 -
备份内容差异:有时,备份的目的并不是为了完整地复制网站,而是为了保存重要的数据或配置文件。这可能导致某些文件,比如临时文件、日志或动态生成的内容(如本例中的
flag.txt)在备份中被省略。 -
安全措施:在某些场景下,故意在备份中省略或修改敏感信息是一种安全措施,以防备份文件落入错误之手。虽然这种情况下通常不会影响像
flag.txt这样的文件,但它是一种值得注意的数据处理策略。 -
题目设计:在CTF挑战中,题目设计者可能故意通过备份文件引入解题线索,引导参与者通过特定的挑战路径。在这种情况下,备份文件可能是探索题目、理解应用逻辑或发现隐藏信息的关键。

我觉得这里的情况应该是第一种。
本题完。
bak文件





vim缓存




ctfhub{de4047c2d7d684e12badb095}
.DS_Store

.DS_Store文件是macOS系统在浏览文件夹时自动生成的配置文件,里面保存了一些用户偏好和文件夹中的所有浏览文件名。默认情况下,.DS_Store是被macOS系统自动隐藏的,但是在与非Mac系统共享文件夹时,有可能会包含.DS_Store文件。一般情况下,.DS_Store文件默认储存在文件夹同目录下。
我们可以直接在URL后面加上/.DS_Store下载.DS_Store文件。

用记事本打开此文件
可以看到提示信息,flag存在于选中的文件中。可以复制下这个文件名,然后到记事本中使用替换功能删除空格。
然后直接在URL后加上/文件名访问就可以得到flag
此题完。
版本控制系统介绍
版本控制系统(Version Control System,VCS)是一种软件工具,用于追踪和管理文件(特别是代码文件)的变更历史。它允许团队成员协同工作,控制文档或项目代码的各个版本,确保每个人都能知道别人做的更改,并能够将这些更改合并到一个共同的版本中。
版本控制系统有很多好处,包括:
-
历史记录和变更追踪:版本控制系统能够记录每次文件的更改,包括谁做了更改,更改了什么内容,以及更改的时间。这可以帮助开发者理解每一次变更的原因,以及变更对项目的影响。
-
并行工作:它允许多名开发者同时在同一个项目上工作,甚至是在同一个文件上工作,然后再将这些更改合并在一起,而不会覆盖彼此的工作。
-
版本和分支管理:开发者可以创建项目的不同版本和分支,便于开发新功能或修复错误,而不会影响正在运行的项目版本。
-
撤销更改和恢复:如果新引入的更改导致问题,版本控制系统可以方便地撤销这些更改,或者回退到之前稳定的版本。
-
备份和恢复:版本控制系统提供了代码库的备份机制,为项目提供了额外的安全保障。
常见的版本控制系统包括:
-
Git:是目前最流行的分布式版本控制系统,由Linus Torvalds创造,广泛应用于开源项目和商业项目。
-
Subversion (SVN):一个集中式版本控制系统,与Git相比,所有的版本信息都存储在中心服务器上。
-
Mercurial:和Git类似,也是一个分布式版本控制系统,但它以易用性和高性能著称。
版本控制系统是现代软件开发不可或缺的一部分,它不仅仅用于代码管理,还能用于文档管理或任何需要版本管理的场景。
Git泄露
Git 泄露指的是 Git 版本控制系统的部分重要元数据或内容被错误地公开,可能导致敏感信息泄漏。对于 log,stash 和 index 这三种情况,它们分别指:
-
Log(日志):
- Git 的日志记录是 Git 历史的重要组成部分,包含了每个提交的详细信息,如作者、日期、提交信息以及变更内容。
- 如果
.git/文件夹被泄露,攻击者可以通过访问.git/logs/子目录来查看每次提交的日志。 - 这可能会暴露代码变化历史和开发者的工作流程,特别是如果提交信息中包含了敏感数据,比如 bug 跟踪系统中的信息、任务编号等,这些信息如果被泄露会带来安全风险。
-
Stash(存档):
- Git 允许你临时存放(即“stash”)你的改动,以便你可以切换分支而不会影响工作树的状态。
.git/stash是保存了一份工作目录和索引中未完成的改动的稳定版本。- 当
.git/文件夹被公开时,攻击者有可能找到并访问由git stash保存的数据,包含了可能未准备好发布的代码和临时改动。
-
Index(索引):
- 索引(也被称为“stage”或“cache”)是一个二进制文件(
.git/index),它记录了工作目录中文件的状态,这些文件即将被包含在下一个提交里。 - 这个文件维护了从最近一次提交以来的文件列表及它们的状态(修改,新增,删除等)。
- 如果攻击者能够访问
index文件,他们可以了解即将进行的更改,这可能包含尚未准备好公开的新功能或安全修复。
- 索引(也被称为“stage”或“cache”)是一个二进制文件(
为了避免这些泄漏,重要的是要保证 .git 文件夹不应当通过 Web 服务器公开访问。除此以外,开发者应避免在 Git 提交日志中输入敏感信息,并应使用 .gitignore 文件来排除不应该被跟踪的文件。如果发现泄露,应立即删除暴露的 .git 目录,并从服务器日志中确定是否有恶意访问,同时需要对相关的敏感信息(如密码)进行更改
Log


用dirsearch工具扫描一下靶机的目录,命令如下图所示

可以看到,目录中存在.git文件,存在git泄露

这里需要使用到的工具是GitHack,目录下进入cmd命令行

下载git文件,命令如下图所示
出现success即下载成功,可以看到下载的文件夹保存的目录

下载的文件夹中打开cmd命令行

使用git log命令查看
git log 命令在 Git 版本控制系统中用来显示一个或多个分支的提交历史。这个命令会列出提交记录,包括提交的哈希值(commit ha)、作者信息、提交日期和提交信息。
以下是一些常见的 git log 使用方式:
1. 基本用法:
git log
这将会显示当前分支的提交历史,通常从最新的提交开始列出。
2. 显示特定数量的提交:
git log -n <limit>
例如,git log -n 3 会显示最新的三个提交。
3. 精简输出:
git log --oneline
这会将每个提交压缩到一行显示,只显示提交的哈希值和提交信息的标题。
4. 图形化显示:
git log --graph
以 ASCII 图形显示分支和合并历史。
5. 限制记录的显示范围:
git log --since=2.weeks
只显示最近两周内的提交。
6. 查看特定文件的提交历史:
git log -- <filename>
显示指定文件的提交历史。
7. 搜索提交信息:
git log --grep=<pattern>
搜索提交信息中符合特定模式(pattern)的提交。
8. 显示每次提交的差异:
git log -p
对于每个提交,显示全文差异(diff)。
9. 仅显示某个作者的提交:
git log --author=<author>
显示特定作者的提交。
git log 命令拥有许多选项和过滤器,可以帮助开发者以不同的方式查看提交历史。可以通过 git log --help 查看更多选项和用法。
然后使用git diff <哈希值>即可回退查看版本

或者直接使用 git show命令
git show 是一个 Git 命令,用于查看各种类型的 Git 对象的详细信息,最常用于查看特定提交的信息。
当你运行 git show 命令时,默认会显示最近的提交信息,包括以下内容:
- 提交的哈希值(SHA-1 checksum)
- 作者的姓名和邮箱
- 提交日期
- 提交信息
- 提交内容的差异(与前一个提交相比)
基本用法如下:
git show
这将会显示当前分支最近的一次提交信息以及相关的代码变更。
如果你想要查看特定的提交,你可以指定提交的哈希值:
git show <commit-hash>
例如:
git show 1a410efbd13591db07496601ebc7a059dd55cfe9
这将会显示指定哈希值对应的提交信息和代码变更。
git show 命令还可以用来显示标签(tags)的信息,以及用来查看某次提交中某个文件的内容:
git show <tag-name>
git show <commit-hash>:<filename>
例如,显示指定提交中的 README.md 文件内容:
git show 1a410ef:README.md
git show 命令的输出通常是很长的,因为它包括完整的差异数据。如果你只对提交信息感兴趣,可以使用 --pretty=short、--pretty=oneline 或其他格式化选项来限制输出。
git show --pretty=short <commit-hash>
git show 是一个非常强大的命令,具有多个选项和参数,可以根据需要显示不同的信息。通过查看 git show --help 可以获取所有选项和用法的详细信息。

本题完
Stash
在 Git 中,"stash" 是一个用来临时存储你正在工作目录中的未完成更改的地方,而不是创建一个新的提交。这允许你将当前的工作状态保存起来,以便你可以干净地切换分支或拉取更新而不会丢失本地更改。
当你执行 `git stash` 命令时,Git 会取走你工作目录中已经跟踪(即之前已经被添加到版本控制中的文件)的修改和暂存区域的内容,并保存在一个未完成更改的栈中。这样,你的工作目录就回到了上次提交时的状态,你可以选择做其他的工作,例如切换分支或拉取远程更改。
贮藏的内容可以在以后任何时候应用到同一个分支或其他任何分支上。你可以使用以下命令来管理和应用你的贮藏:
- `git stash save "message"`:贮藏当前的工作进度,并给这个贮藏附上一个可选的描述信息。
- `git stash list`:列出所有的贮藏。
- `git stash apply`:将最近的贮藏内容应用到当前工作目录,但不从贮藏列表中移除该贮藏。
- `git stash pop`:应用最近的贮藏内容,并从贮藏列表中移除它。
- `git stash drop`:移除一个特定的贮藏。
- `git stash clear`:清除所有贮藏。
`git stash` 是一个强大的功能,它允许开发者暂时保存工作进度,而不用提交半成品的代码到仓库中,并且可以在未来恢复这些更改继续工作。这对于在多个问题上同时工作的场景特别有用,它允许开发者在任务间切换而不影响各自的工作进度。

如上题一样,使用GitHack工具下载泄露的git文件

这里需要使用的命令是git stash pop
在 Git 中,"stash" 是一个用来临时存储你正在工作目录中的未完成更改的地方,而不是创建一个新的提交。这允许你将当前的工作状态保存起来,以便你可以干净地切换分支或拉取更新而不会丢失本地更改。
当你执行 git stash 命令时,Git 会取走你工作目录中已经跟踪(即之前已经被添加到版本控制中的文件)的修改和暂存区域的内容,并保存在一个未完成更改的栈中。这样,你的工作目录就回到了上次提交时的状态,你可以选择做其他的工作,例如切换分支或拉取远程更改。
贮藏的内容可以在以后任何时候应用到同一个分支或其他任何分支上。你可以使用以下命令来管理和应用你的贮藏:
- git stash save "message":贮藏当前的工作进度,并给这个贮藏附上一个可选的描述信息。
- git stash list:列出所有的贮藏。
- git stash apply:将最近的贮藏内容应用到当前工作目录,但不从贮藏列表中移除该贮藏。
- git stash pop:应用最近的贮藏内容,并从贮藏列表中移除它。
- git stash drop:移除一个特定的贮藏。
- git stash clear:清除所有贮藏。
git stash 是一个强大的功能,它允许开发者暂时保存工作进度,而不用提交半成品的代码到仓库中,并且可以在未来恢复这些更改继续工作。这对于在多个问题上同时工作的场景特别有用,它允许开发者在任务间切换而不影响各自的工作进度。
执行之后可以在目录下看到一个.txt结尾的文件,打开就能看到flag


本题完
Index

老样子,先用dirsearch目录扫描工具扫描一下是否存在git泄露文件

然后使用GitHack工具下载git泄露文件
这里可以直接在文件夹中看到flag。

本题完
SVN泄露
当开发者使用Subversion(SVN)作为版本控制系统来实现代码的版本管理和自动部署时,如果配置不当,就有可能将.svn目录部署到线上服务器。由于.svn目录包含了很多版本控制的元数据,包括完整的代码历史和其他有价值的信息,它的泄露会导致安全隐患。
如果攻击者能访问这个暴露的.svn目录,他们可能能够下载应用程序的完整源代码,这可能包含敏感数据、配置信息、API密钥等,从而给系统安全带来极大的威胁。
为了阻止这种泄露:
- 应确保服务器或部署工具的配置过滤掉了.svn目录,不允许其部署到线上环境。
- 在服务器上配置适当的访问规则,例如使用
.htaccess文件,以阻止对.svn目录的Web访问。 - 检查代码仓库以确保不含有不应该提交到版本控制的敏感文件。
一旦发现泄露,应立即清理线上环境中的.svn目录,并检查代码库以防止未来的部署再次泄露。同时,还需要评估泄露的影响,并根据需要采取补救措施,包括重置可能泄露的凭据。

本题参考CTFHub | SVN泄露_ctfhubsvn泄露-CSDN博客
dvcs-ripper 是一个工具,它用来“rip”(即提取或下载)可通过网络访问的版本控制系统(如 SVN、GIT、Mercurial/hg、Bazaar/bzr 等)。这个工具特别适合在Web环境中提取分布式版本控制系统的仓库,即使是在目录浏览被关闭的情况下。
它可以用于安全测试中,检查Web服务器是否不慎将版本控制系统相关的目录或文件泄露到公网。如果能够访问这些目录,dvcs-ripper 可以帮助下载整个仓库的内容。这对于渗透测试人员来说,可以是一个发现和利用安全弱点的有力工具。
dvcs-ripper 是用Python编写的,使用起来相对简单。可以通过克隆其GitHub仓库来获取它:
git clone https://github.com/kost/dvcs-ripper.git
一旦安装完毕,可以使用例如rip-git.pl这样的脚本来执行具体的提取任务:
./rip-git.pl -v -u <url>
其中-v表示开启详细模式,-u后面跟上仓库的URL。这是只是一个例子,具体的命令和参数可能会因为你要提取的版本控制系统的类型和具体情况而有所不同

提示很明显了,flag在服务端旧版本的源代码中
将工具下载到kali Linux中,打开工具文件夹
在文件夹中右键打开终端,使用上面提到的命令下载泄露的文件

下载成功后,进入.svn文件夹查看下载好的文件,可以看到pristine文件夹,题目提示flag在服务端旧版本的源代码中。Subversion(SVN)的工作原理中有一个很重要的概念,那就是“干净副本(pristine copy)”。Pristine文件,或者称为干净拷贝,通常是指工作副本中一个未被修改过的文件副本,是一份文件的本地复制。
所以我们看看这个文件夹中有没有有用的信息

可以看到此文件夹下有一个59文件夹,有一个bf文件夹,先到59文件夹中看看
可以看到文件夹中有一个.svn-base文件,看看里面有什么
可以在这个文件中找到flag
本题完
HG泄露
在使用Mercurial(或任何其他版本控制系统,如Git)时,版本控制系统的元数据目录(Mercurial中是 .hg 文件夹,Git中是 .git 文件夹)包含了项目的完整历史记录和其他敏感信息。如果这些目录被部署到线上,攻击者就可能利用这个漏洞来获取您的源代码,获取历史改动记录,或者找到其他可能用于进一步攻击的敏感信息。

题目依然提示Flag在旧版本的源代码中

这里我们用到的解题工具依然是dvcs-ripper 和dirsearch目录扫描工具。
首先使用dirsearch扫一扫网站目录。
python dirsearch.py -u http://challenge-e60c4ad44e343639.sandbox.ctfhub.com:10800/

可以看到存在HG泄露文件,使用 dvcs-ripper 工具下载泄露的HG文件
本文围绕Web安全展开,介绍了目录遍历、PHPINFO、备份文件下载等漏洞,以及Git、SVN、HG等版本控制系统泄露问题。阐述了各漏洞原理、危害及防范措施,还给出了利用工具解题找flag的方法,如使用Kali Linux虚拟机工具、GitHack、dvcs - ripper等。

3565

被折叠的 条评论
为什么被折叠?



