ctfshow--VIP题目限免(包含原理和知识拓展)前10个

前言

特别提醒:本篇文章包含原理和知识拓展,篇幅较长,部分题目扩展较多,包括部分工具的配置教程(之后会重新将工具配置教程单独出文章)

部分代码由AI生成,复制过来前面会显示行数,比如代码框中"1dirsearch",删去前面数字就行了

源码泄露

题目提示:开发注释未及时删除

直接F12,查看源码就能找到

前台JS绕过

题目提示:js前台拦截 === 无效操作

提供两种办法: 1.浏览器禁用js后刷新即可查看 2.Ctrl+U查看页面源代码

打开靶场,按下热键F12发现没有反应。

那我们应该如何操作?

既然禁用F12 那我就试试Ctrl+Shift+i看看,具体原因,在对应的原理及知识拓展文章里有写

使用:Ctrl+Shift+i打开了网页查阅;

通过查阅网页代码发现了绿色注释条;

就是我们需要的Flag呢,复制粘贴验证一下,发现正确

问题1:​​​​为什么F12不能查看源代码,但是ctrl+shift+i就可以?

在ctf比赛中,大部分原因是:

网页本身的"防调试"机制

部分网站(如某些视频站、小说站或内部系统)为了防止用户查看代码或下载资源,会通过 JavaScript 代码屏蔽 F12 键。

  • 代码逻辑: 网页会监听键盘事件,一旦检测到 keyCode == 123(即 F12),就强制阻止默认行为。
  • 漏网之鱼: 虽然这些脚本通常也会屏蔽 Ctrl + Shift + I,但有时写得不严谨,或者 Ctrl + Shift + I 是浏览器底层的系统级指令,优先级高于网页脚本,因此依然能生效。

还有其他方面

键盘硬件与系统设置的"锅" (最常见原因)

在很多笔记本电脑或紧凑型键盘上,F1F12 不仅仅是功能键,它们通常还被绑定了硬件控制功能(如调节音量、亮度、播放暂停等)。

  • Fn 锁定问题: 你的键盘可能处于"多媒体模式"。当你按下 F12 时,电脑实际接收到的是"增大音量"或"关闭屏幕"的指令,而不是"打开开发者工具"。
    • 验证方法: 尝试按住键盘左下角的 Fn 键,同时按 F12。如果能打开,说明你的键盘需要配合 Fn 键使用。
  • Mac 用户的特殊情况: 如果你使用的是 macOS,系统默认将 F 键用作标准功能键(调节亮度等)。除非你在"系统设置 -> 键盘"中开启了"将 F1、F2 等键用作标准功能键",否则单按 F12 根本不会触发浏览器命令。

第三方软件的"快捷键冲突"

F12 是一个极其热门的快捷键,很多后台运行的软件都默认占用了它。

  • 输入法: 某些输入法(如旧版本的搜狗、微软拼音)可能会在特定模式下拦截 F12。
  • 游戏辅助/录屏软件: 像 NVIDIA GeForce Experience、Razer Synapse 等软件,常默认使用 F12 作为"截图"或"开启游戏模式"的快捷键。
  • 远程控制工具: 如果你在使用向日葵、TeamViewer 等,F12 可能被映射为远程软件的菜单呼出键。

为什么 Ctrl + Shift + I 能用?

因为组合键的冲突概率远低于单键。软件很少会去占用 Ctrl + Shift + I 这种复杂的组合,所以它能更"纯净"地直达浏览器。

协议头信息泄露

题目提示:没思路的时候抓个包看看,可能会有意外收获

这时候就要打开抓包软件

提供两个方法,感兴趣的朋友可以两个都尝试一下:

方法1:使用wireshark抓包找到"sourceIP地址为靶场,目的ip地址为本机"的数据包,右键点击追踪流,发现flag

方法2:使用burpsuite的target模块,找到对应的站点,在response模块里有flag

我个人比较喜欢用bp,就用bp演示了

首先启用靶场环境,并开启bp抓包,一定是要配置好的!!!

开始抓包

抓到之后点开target模块,找到对应的网站,在response模块里有flag

没什么需要补充的问题

如果有需要可以去看以下专栏里的web篇解题步骤笔记,(目前尚在更新,可以关注一下)

robots后台泄露

题目提示:总有人把后台地址写入robots,帮黑阔大佬们引路。

大致解题步骤:先在url后面加/robots.txt 发现有flagishere.txt 然后把/robots.txt 换成/flagishere.txt

一般步骤就是查看源代码,发现没有什么东西,题目也提示了robots

  1. 第一步:侦察

    在题目给出的网址后面,手动拼接上 /robots.txt

    • 例如: 如果题目网址是 http://example.com/,你就访问 http://example.com/robots.txt
  2. 第二步:分析

    浏览器会显示 robots.txt 文件的内容。你会看到类似这样的代码

    复制代码
    1User-agent: *
    2Disallow: /flagishere.txt
    • User-agent: * 表示这条规则对所有爬虫都生效。
    • Disallow: /flagishere.txt 就是关键信息!它明确告诉你,/flagishere.txt 这个文件是"禁止"被抓取的。这通常意味着 flag 就在这里。
  3. 第三步:获取

    正如你所说,回到浏览器地址栏,把 URL 中的 /robots.txt 替换成你刚刚发现的 /flagishere.txt

    • 访问: http://example.com/flagishere.txt
    • 按下回车,flag 就会直接显示在页面上了!

问题1:🤔 为什么会这样?

  1. robots.txt 是什么?

    它是一个放在网站根目录下的文本文件,全称是"爬虫排除标准"。它的作用是告诉搜索引擎(比如百度、谷歌):"嘿,爬虫朋友,网站的这些目录或文件是私密的,你不要去抓取和收录。"

  2. 为什么它会泄露信息?

    这就像一个"此地无银三百两"的告示牌。开发者为了不让搜索引擎索引到后台、备份文件等敏感路径,就把这些路径写进了 robots.txt。但这反而等于直接告诉了你:"看,这些是我不想让你看到的东西!"。在 CTF 中,这些被禁止访问的路径往往就藏着 flag。

phps源码泄露

题目提示:phps源码泄露有时候能帮上忙

其实和上一题类似:在网址后面添加/index.phps,下载文件,用.txt打开即可找到flag。

源码压缩包泄露

题目提示:解压源码到当前目录,测试正常,收工

解题步骤

因为在php中,常见站点是/var/www/html/,所以压缩包可能会以www会命名,在知道他是zip后,在url后面加/www.zip可以下载得到源文件

但是尝试提交了一下发现不太对,后面将后缀改成fl000.txt就显示出来了真实的flag

问题1:关于这种web类型题怎么查看到底是什么压缩类型

不下载文件 或者只能看到链接的情况下,我们判断压缩包类型主要靠以下 3 个逻辑:

1. 看后缀名(最直接)

这是最基础的判断依据。虽然有时候后缀名会被改掉(比如变成 .bak.txt),但在大多数基础题中,黑客留下的备份文件通常保留了原始后缀。

  • .zip:最常见。Windows 系统或 IDE 默认打包格式。
  • .rar:常见于 Windows 服务器,通常需要 WinRAR 打开。
  • .tar.gz / .tgzLinux 服务器 的标准备份格式。如果你发现题目提示是 Linux 环境,或者文件名像 wwwroot.tar.gz,那大概率就是这个。
  • .7z:压缩率较高,相对少见,但也会考。
  • .bak注意! 这通常不是压缩包,而是单个文件 的备份(比如 index.php.bak)。但有时候,出题人也会把 zip 包强行改名为 .bak 来迷惑你。

2. 看"操作系统"和"运维习惯"(推理法)

这是 Web 题中高阶的推理方式。你需要根据题目给出的线索(比如网页报错信息、HTTP 响应头)判断服务器是 Linux 还是 Windows。

  • 如果是 Linux 服务器
    • 运维人员习惯用命令行打包,生成的通常是 .tar , .tar.gz , .gz
    • 文件名通常带有 www, html, backup 等字眼。
  • 如果是 Windows 服务器
    • 管理员习惯用资源管理器右键压缩,生成的通常是 .zip.rar

3. 看 HTTP 响应头(技术流)

如果你在 Burp Suite 或浏览器开发者工具(F12 -> Network)中查看这个下载链接的响应包,有时候能找到线索:

  • Content-Type
    • application/zip -> 肯定是 ZIP
    • application/x-rar-compressed -> 肯定是 RAR
    • application/gzipapplication/x-gzip -> 肯定是 GZ
  • Content-Disposition
    • 有时候会显示 filename=backup.tar.gz,直接告诉你文件名。

4. "盲猜"与下载验证(实战法)

如果以上都看不出来,或者文件没有后缀名(比如链接是 http://site.com/backup),那就用最笨但最有效的办法:

  1. 先试 .zip:因为 ZIP 最通用,概率最高。
  2. 再试 .tar.gz:如果是 Linux 题,这个概率第二高。
  3. 下载后看文件头
    • 把文件下载下来(不管有没有后缀)。
    • 用记事本或 16 进制编辑器打开。
    • 看前两个字符:
      • PK -> 改名为 .zip
      • Rar! -> 改名为 .rar
      • 37 7A (7z) -> 改名为 .7z

总结

在 Web 题中,看后缀 是第一直觉,分析操作系统环境 是辅助判断。如果实在拿不准,下载下来看文件头(PK/Rar!) 是最终极的真理。

问题2:如果是其他类型的题目,比如misc,怎么看压缩包类型

在 CTF 或实际渗透测试中,面对一个"源码压缩包泄露",我们之所以能迅速判断它到底是 .zip.tar.gz 还是 .rar,通常不是靠"猜",而是靠特征识别

即使文件名被篡改(比如叫 backup.bak123),或者根本没有后缀名,我们依然可以通过以下几种"火眼金睛"的方法来确定它的真实类型:

1. 看"文件头"(Magic Number)------ 最硬核、最准确的方法

这是计算机识别文件的根本方式。每种文件格式在文件的最开头(通常是前几个字节),都有一段固定的"身份证号",我们称之为 Magic Number(魔数)

你可以用 16进制编辑器(如 HxD、WinHex)或者记事本(打开可能会乱码,但开头能看)打开该文件,看第一行字符:

压缩包类型 文件头 (16进制) 文件头 (ASCII 字符) 备注
ZIP 50 4B 03 04 PK.. 最常见的格式,以 Phil Katz 名字命名
RAR 52 61 72 21 Rar! RAR 的标志性开头
7z 37 7A BC AF 7z.. 7-Zip 格式
GZIP/TAR.GZ 1F 8B .. 通常用于 Linux 备份
BZIP2 42 5A 68 BZh 开头通常是 BZh

CTF 技巧: 如果你看到文件开头是 PK,那它 99% 就是 ZIP 包。哪怕它的后缀是 .jpg,你也可以直接把它重命名为 .zip 来解压。

2. 看"备份习惯"与命名规律 ------ 经验判断

很多时候,我们不需要打开文件,根据泄露的场景文件名就能推断出类型。这属于"社会工程学"或"运维习惯"分析:

  • Windows 环境/开发者习惯:
    • 如果是 Windows 服务器,或者开发者手动打包,通常是 .zip
    • 常见文件名:www.zip, backup.zip, web.rar
  • Linux 环境/运维习惯:
    • 如果是 Linux 服务器自动备份,通常是 .tar.gz (或 .tgz) 或 .tar.bz2
    • 常见文件名:wwwroot.tar.gz, data.tar, backup.tgz
  • 编辑器/IDE 备份:
    • 有些编辑器会自动生成 .bak 文件,这通常是原文件的副本,不一定是压缩包,但也可能是重命名的 zip。

3. 使用工具自动识别 ------ 懒人方法

如果你不想手动查 16 进制,可以使用工具来帮你"嗅探"文件类型:

  • Linux file 命令(神器):
    在 Kali Linux 或任何 Linux 终端下,输入 file 文件名,系统会自动读取文件头并告诉你它是什么。
    • 例如: file index.php 可能会返回 index.php: Zip archive data, at least v2.0 to extract
  • 在线工具:
    有些在线网站允许你上传文件头进行分析。

4. 暴力尝试法 ------ 简单粗暴

在 CTF 中,如果文件不大,最快的方法往往是**"试错"**:

  1. 先把后缀改成 .zip 试试能不能解压。
  2. 不行就改成 .rar 试试。
  3. 再不行就改成 .7z.tar.gz
  4. 如果都不行,可能它根本不是压缩包,而是一个被重命名的源码文件(比如 config.php.bak)。

总结

你知道它是哪种压缩包,主要靠的是文件头(Magic Number)

  • 看到 PK 开头 →→ ZIP
  • 看到 Rar! 开头 →→ RAR
  • 看到 1F 8B 开头 →→ GZIP

只要掌握了文件头特征,无论文件被伪装成什么名字,你都能一眼看穿它的真面目。

版本控制泄露源码

题目提示:版本控制很重要,但不要部署到生产环境更重要。

解题步骤

1.打开链接,一开始会显示不安全,不让连接,点高级,信任一下就能显示如图内容了

2.题目提示版本控制源码泄露,尝试构造

想到两大版本控制工具:Git和SVN 试下Git,在url后加/.git尝试访问

问题1;为什么这么做

这其实涉及到了 CTF 中一个非常经典且重要的考点:.git 泄露

简单来说,之所以这样做能拿到 Flag,是因为开发者在上传网站代码到服务器时,不小心把用于版本控制的 .git 文件夹也一起传上去了

下面我为你拆解一下这背后的原理和操作逻辑:

什么是 .git 文件夹?

当你使用 Git 进行代码版本管理时,项目的根目录下会生成一个名为 .git 的隐藏文件夹。这个文件夹就像网站的"黑匣子",它里面记录了:

  • 所有的源代码历史版本(包括已经被删除的文件)。
  • 所有的配置文件
  • 所有的提交记录

正常情况下,这个文件夹只应该存在于开发者的电脑上,绝对不应该出现在对外公开的 Web 服务器上。

为什么会泄露 Flag?

如果服务器配置不当(比如没有禁止访问隐藏文件),攻击者就可以直接访问这个 .git 文件夹。

一旦你访问了 http://...challenge.ctf.show/.git 并看到了目录列表或者某些文件内容,就意味着整个网站的历史源代码都被你拿到了

Flag 通常藏在以下地方:

  • 源码中: Flag 可能直接写在某个 PHP 或 JS 文件里。
  • 历史版本中: 开发者可能觉得"哎呀这里写死 Flag 不安全",于是修改了代码把 Flag 删了。但在 .git 的历史记录里,旧的版本依然存在,你可以把旧版本恢复出来看到 Flag。

具体是怎么操作的?(技术细节)

虽然 Write-Up 里只写了一句话"成功读取到 flag",但实际操作通常有两种流派:

手动拼接(适用于简单题)

有时候 Flag 并不在复杂的代码里,而是在 .git 目录下的某个配置文件里。

  • 比如访问 /.git/config,有时候能直接看到敏感信息。
  • 或者访问 /.git/HEAD/.git/refs/heads/master 来找到最新的提交哈希值,进而拼接出源码文件的路径。
使用自动化工具(最常用)

在实战和 CTF 中,我们通常不会手动去翻 .git 文件夹,而是使用专门的工具来"下载并还原"整个网站源码。

  • 工具名称: GitHackdvcs-ripper
  • 操作原理: 这些工具会利用 .git 泄露的漏洞,把服务器上的 .git 文件夹整个下载下来,然后利用 Git 命令自动把网站的完整源代码还原到你的电脑上。
  • 结果: 你只需要在还原出来的文件夹里搜索 "flag",就能轻松找到答案。

总结

这道题考察的核心是:不要忽视隐藏文件

题目提示"版本控制源码泄露",就是在暗示你去找 .git 文件夹。只要这个文件夹泄露,对于攻击者来说,这个网站就等同于把底裤都脱光了。

问题2:这个知识点的题目有哪些,题目提示有可能是什么样的

这类题目通常属于 Web 安全 中的 信息泄露源码泄露 类别。

🕵️‍♂️ 题目提示长什么样?

出题人通常不会直接告诉你"去访问 .git",而是会通过以下几种方式暗示你:

  1. 直接的文字暗示

    • "程序员小李的疏忽" / "粗心的管理员"
    • "版本控制" / "版本管理"
    • "备份文件" / "源码备份"
    • "Git 初始化" / "Git 记录"
    • "看看有没有隐藏的文件"
  2. 页面源码或注释暗示

    • 网页源代码里有一行注释:<!-- .git --><!-- Check the version control -->
    • 网页标题是 "Git Lab" 或 "Git Test"。
  3. HTTP 响应头暗示

    • 在响应头(Response Headers)里看到 X-Powered-By: Git 或者类似的自定义字段。
  4. 文件名暗示

    • 题目附件或页面里提到了 index.php.bak,暗示有备份习惯,进而引导你去猜 .git

🧩 常见的题目类型与解题场景

根据泄露的程度不同,题目通常分为以下几个等级:

1. 基础型:完整 .git 目录泄露

这是最基础的送分题。

  • 现象 :你可以直接访问 http://target/.git/,浏览器直接显示了目录列表(Index of /...),或者访问 http://target/.git/config 能看到配置文件内容。
  • 解题
    1. 使用工具 GitHack (推荐)或 dvcs-ripper
    2. 命令:python GitHack.py http://target/.git/
    3. 工具会自动下载并还原源码,你在还原的文件夹里找 flagindex.php
2. 进阶型:Git 历史版本泄露 (Git Log)

这种题目稍微绕一点。当前的源码里没有 Flag,因为开发者发现后把它删了。

  • 现象 :用 GitHack 还原源码后,打开 index.php 发现是空的或者没有 Flag。
  • 解题
    1. 进入还原的目录,执行 git log 查看提交历史。
    2. 你会看到类似 commit a1b2c3d (add flag) 的记录。
    3. 使用 git reset --hard a1b2c3d 回滚到那个版本。
    4. 再次查看文件,Flag 就出现了。
3. 高级型:Git Stash 泄露

开发者把代码暂存了(git stash),没有提交,但 .git 目录被泄露了。

  • 现象:源码里没有,历史记录里也没有。
  • 解题
    1. 在还原的目录下执行 git stash list
    2. 执行 git stash pop 恢复暂存的代码。
    3. Flag 就在恢复出来的临时文件里。
4. 暴力/手动型:无法使用自动化工具

有些环境(如某些在线靶场)可能限制了 GitHack 的运行,或者 .git 目录被禁止列出文件。

  • 现象 :访问 /.git/ 显示 403 Forbidden 或 404,但访问 /.git/HEAD 却能返回内容(如 ref: refs/heads/master)。
  • 解题
    • 这说明 .git 存在但配置了禁止目录浏览。你需要手动构造 URL 下载关键文件(HEAD, config, index, objects/...),或者编写简单的 Python 脚本去"爬"这些文件。

🛠️ 必备工具清单

遇到这类题,你的"武器库"里应该有这些:

工具名称 用途 推荐指数
GitHack 专门用于 .git 泄露的自动化还原工具(Python编写) ⭐⭐⭐⭐⭐
dvcs-ripper 支持 Git, SVN, Bazaar 等多种版本控制系统的还原 ⭐⭐⭐⭐
Git Dumper 另一个强大的 git 目录下载工具 ⭐⭐⭐⭐
TruffleHog 用于在 git 历史记录中搜索敏感信息(如密码、密钥) ⭐⭐⭐

📌 总结

当你看到题目提示**"源码泄露"** 、"Git""备份" 或者**"粗心"**时,第一反应应该是:

  1. 打开浏览器访问 http://目标网址/.git/
  2. 如果能访问,直接上 GitHack
  3. 如果还原出来的源码没 Flag,记得用 git log 翻旧账!

版本控制泄露源码2

题目提示:版本控制很重要,但不要部署到生产环境更重要。

解题步骤

上题说的显示不安全就是这样,点高级,继续访问就好了

和上一题一样,版本控制工具,url后面加/.svn

vim临时文件泄露

题目提示:发现网页有个错别字?赶紧在生产环境vim改下,不好,死机了

解题步骤

**大概说明:**vim是linux自带且常用的文件编辑器,vim在编辑时会生成一个隐藏的临时文件,当vim非正常关闭时这个文件就会被保留下来。 使用vim时意外退出,会在目录下生成一个备份文件,格式为 .文件名.swp,访问/index.php.swp下载备份文件,用记事本打开即可 。

首先用dirsearch工具扫描网站目录,很奇怪

"Task Completed" 表示扫描结束了,但中间没有列出任何发现。

这就意味着:工具跑完了自带的字典,但没有在这个网站上找到任何常见的目录或文件。

我们可以具体分析一下截图里的关键信息:

扫描配置(橙色的那行字)

Extensions: php, aspx, jsp, html, js ... Wordlist size: 11460

  • 意思 :工具默认帮你扫了 php, aspx, jsp 等后缀,用了大约 11460 个关键词。
  • 问题 :对于 CTF 题目来说,默认的字典可能不够精准,或者没有覆盖到题目特定的文件名(比如 .swp 文件)。

扫描结果(中间空白)

  • 意思 :正常情况下,如果找到了东西,这里会显示 [200][301] 的链接。现在是空白的,说明全盘扫描一无所获

结束状态

Task Completed

  • 意思:任务完成(没有报错,只是没扫到东西)。

接下来该怎么办?

既然默认扫描没结果,我们需要调整策略。CTF 题目通常不会让你靠运气撞大运,而是有特定的入口。

检查是否需要指定 HTTPS 端口

你扫描的是 https://...。有时候 HTTPS 网站跑在非标准端口(不是 443),dirsearch 可能会连接失败或扫描不全。

  • 建议 :确认题目是否给了特定端口(比如 https://...:8443)。
针对 .swp 文件进行"精准打击"

刚才的扫描是"广撒网",现在我们试试"定点捕捞"。既然怀疑有 .swp 泄露,我们可以尝试指定更激进的扩展名,或者指定特定的文件名。

尝试 1:强制扫描 swp 后缀

默认的扩展名列表里可能没有 swp,我们需要手动加上去:

复制代码
dirsearch -u https://82e9e158...show/ -e swp -x 403,404
  • -e swp:只扫 .swp 结尾的文件。
  • -x 403,404:隐藏掉 403 和 404 的报错,只看有希望的结果。

尝试 2:使用更暴力的字典(如果上面也不行)

如果不知道文件名是什么,可以尝试换一个更大的字典(Kali 自带了一些):

复制代码
dirsearch -u https://82e9e158...show/ -e php,html,txt,swp -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
回到原点:检查网页源码

如果暴力扫描还是扫不到,说明入口藏得很深,或者根本不在目录里。

  • 建议:直接浏览器打开这个网址,右键"查看网页源代码",看看注释里有没有提示文件名?或者网页上有没有奇怪的链接?

总结:目前的截图说明"默认字典没扫到东西",建议加上 -e swp 再试一次。

我在做题时出现的错误,(后面还有一堆)

错误原因

仔细看截图里的第一行命令,你把网址和参数 -e swp 之间加了个 /

  • 你的命令: dirsearch -u https://...show/ -e swp
  • 问题: 工具把 / 当成了另一个参数或者非法字符,导致解析失败。

修正后的命令

去掉那个斜杠,直接空格隔开即可。

请在终端输入(建议直接复制下面这行):

复制代码
1dirsearch -u "https://82e9e158-2e06-4822-a809-2763ec6c76bb.challenge.ctf.show/" -e swp

命令解释

  • dirsearch:启动工具。
  • -u "网址":指定目标(网址最好加上引号,防止特殊字符报错)。
  • -e swp:指定后缀名,告诉工具"只帮我找以 .swp 结尾的文件"。

预期结果

如果命令正确,它会开始跑进度条。如果运气好,你会看到一行 200 或者 301 的结果,后面跟着类似 .index.php.swp 的路径,那就是我们要找的 flag 入口!

这其实是好消息

截图里满屏的 404 并不是报错,而是扫描过程的实时反馈。

怎么看这些结果

  • [03:06:40]:这是扫描的时间。
  • 404 :这是 HTTP 状态码。
    • 404 代表"没找到"。说明工具试了 /swp.php/.atoum.php 这些名字,但服务器说"没这文件"。
    • 200 代表"找到了"。这才是我们要盯着看的。
  • 555B:这是网页大小。
  • /swp.php:这是工具正在尝试猜解的文件名。

现在的情况

目前满屏都是 404,说明工具还在努力尝试,还没扫到那个"对"的文件。

接下来该做什么

耐心等待

扫描需要时间(看截图上面写着 Wordlist size: 9480,它要试将近一万次)。让它继续跑,只要出现 [200] 开头的行,那就是答案

如果扫完了还是全 404

如果等它跑完(显示 Task Completed)还是没结果,说明文件名可能不是字典里的常见词。这时候得换个思路:

  • 猜测文件名 :通常 .swp 文件是编辑 index.php 时留下的,所以文件名很可能是 .index.php.swp
  • 手动验证 :直接把这个后缀拼到网址后面,在浏览器里试试能不能下载:
    • https://82e9e158...show/.index.php.swp
    • https://82e9e158...show/index.php.swp

但是我做的时候好像都是404啊,咋回事

既然盲目猜测不行,我们先确认一下这个网站的根目录到底有什么。

1. 先确认根目录文件

你之前用 dirsearch 默认扫的时候(截图里 Extensions: php, aspx... 那次),虽然你觉得"没结果",但请再确认一下有没有漏掉 200 状态码。

如果根目录真的什么都没有(连 index.php 都没有),那网站是怎么运行的?

请尝试访问这个地址(浏览器打开):
https://82e9e158-2e06-4822-a809-2763ec6c76bb.challenge.ctf.show/

观察:

  • 页面上有没有显示任何文字?
  • 查看网页源代码(右键 -> 查看页面源代码),有没有注释?
  • 页面上有没有图片、链接?

2. 为什么我刚才猜 index.php

在 Web CTF 中,.swp 泄露通常是因为管理员用 Vim 编辑了某个正在运行的文件。

  • 绝大多数 PHP 网站的默认首页是 index.php
  • 如果管理员正在修改首页,就会生成 .index.php.swp
  • 但是 ,如果这个题目是一个 API 接口或者特殊应用,文件名可能是 api.php, config.php, flag.php 等等。

3. 如果不确定文件名,怎么扫 .swp

既然不知道文件名,我们就不能只扫后缀,我们需要结合字典。

使用 feroxbuster (Kali 自带,比 dirsearch 更适合这种模糊搜索)

如果你愿意换个工具试试,feroxbuster 通常更智能一点:

复制代码
1feroxbuster -u https://82e9e158-2e06-4822-a809-2763ec6c76bb.challenge.ctf.show/ --insecure

或者,继续用 dirsearch,但是换一个更全面的字典

Kali 里有一个很大的字典叫 big.txt 或者 common.txt

复制代码
1dirsearch -u https://82e9e158-2e06-4822-a809-2763ec6c76bb.challenge.ctf.show/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -e php,txt,swp,bak

(注意:这个命令会跑很久,因为它字典很大)

4. 最后的杀手锏:直接猜常见的 swp 组合

如果不跑字典,你可以手动试几个最常见的 .swp 文件名:

  1. .index.php.swp (概率 80%)
  2. .www.zip (有时候管理员会备份整个目录)
  3. .flag.php.swp (概率 10%)
  4. .index.html.swp (概率 5%)

建议操作:

先用浏览器访问根目录,看看有没有什么线索。如果根目录是一片空白或者只有"Hello World",那 .index.php.swp 依然是嫌疑最大的目标。

所以抱着试一试的态度,网址后面加/index.php.swp

下载之后直接文本打开

问题1:为什么这么做

利用的是 Linux 环境下一个非常经典的"手滑"漏洞------Vim 临时文件泄露。简单来说,就是管理员在用 Vim 编辑器修改网站代码时,因为操作不当(比如没正常退出、断网、程序崩溃),导致编辑器把代码的"草稿"遗落在了服务器上。这个"草稿"文件是可以被下载的,里面往往就藏着 Flag。

我来给你拆解一下这背后的具体原理:

💻 为什么会有这个文件?(Vim 的机制)

Vim 是 Linux 系统里最常用的代码编辑器。为了防止你在写代码时突然断电、断网或者程序崩溃导致心血白费,Vim 有一个自动备份机制

  • 当你打开一个文件(比如 index.php)进行编辑时,Vim 会立刻在同目录下生成一个隐藏的临时文件(Swap file)。
  • 这个临时文件的命名规则是. + 原文件名 + .swp
    • 例如:编辑 index.php,就会生成 .index.php.swp
  • 正常退出时 :当你编辑完,输入 :wq 保存并退出,Vim 会自动把这个 .swp 临时文件删除

💥 为什么会泄露?(非正常退出)

如果管理员在编辑代码时发生了意外,比如:

  • 电脑突然死机/断电。
  • SSH 连接突然断开(网络波动)。
  • 强制关闭了终端窗口。
  • 直接按了 Ctrl+CCtrl+Z 强行中断。

这时候,Vim 来不及执行"删除临时文件"的指令,那个包含源代码内容的 .swp 文件就会被遗留在服务器的网站目录下

🕵️‍♂️ 攻击者怎么利用?

网站目录下的文件通常是可以通过 URL 直接访问的。虽然 .index.php.swp 是个隐藏文件(以 . 开头),但在 Web 服务器的配置中,它往往是可以被读取和下载的。

攻击步骤:

  1. 猜测 :攻击者看到网站在运行 index.php,心想"管理员可能正在维护它",于是尝试访问 http://example.com/.index.php.swp
  2. 下载:如果服务器配置不当,浏览器会直接下载这个文件。
  3. 恢复 :这个 .swp 文件里包含了管理员正在编辑的完整源代码。

🛠️ 怎么查看 Flag?(Write-Up 里的操作)

Write-Up 里说"用记事本打开即可",是因为 .swp 文件虽然包含了一些 Vim 的元数据(比如编辑时间、进程ID),但它的主体部分就是纯文本的代码

  • 方法一(简单粗暴):直接右键 -> 打开方式 -> 记事本(或 VS Code)。你会看到一堆乱码,但在乱码中间,清晰地写着原本的 PHP 代码和 Flag。
  • 方法二(专业恢复) :如果你有 Vim 环境,可以使用命令 vim -r index.php(注意不要加点和swp后缀),Vim 会提示发现交换文件,询问是否恢复,选"是"就能还原出当时的代码文件。

📌 总结

所以,这道题的逻辑是:管理员编辑代码 -> 意外退出 -> 留下了 .swp 草稿 -> 攻击者下载草稿 -> 拿到源码里的 Flag

问题2:这种类型的题都是只要在url后面加/index.php.swp就能下载吗

并不是。 虽然 .swp 泄露的原理很简单,但在实际题目或实战中,直接在 URL 后面加 /.index.php.swp 并不一定能直接下载到文件。

这主要取决于以下三个关键因素:

📁 原文件名不一定是 index.php

这是最常见的误区。.swp 文件是基于原文件名生成的。

  • 如果管理员编辑的是 config.php,那么泄露的文件名就是 .config.php.swp
  • 如果管理员编辑的是 flag.php,那么泄露的文件名就是 .flag.php.swp
  • 如果管理员编辑的是 index.html,那么泄露的文件名就是 .index.html.swp

应对策略:

  • 盲猜: 常见的文件名都要试一遍,如 index.php, config.php, db.php, connect.php, flag.php
  • 目录扫描: 使用工具(如 dirsearch, gobuster, 御剑)扫描目录,工具字典里通常包含常见的 .swp 文件名。
  • 源码线索: 看看网页源码里有没有注释提到其他文件名。

🔒 服务器配置可能禁止访问

即使文件存在于服务器上,Web 服务器(如 Nginx, Apache)的配置可能会阻止你下载它。

  • Nginx/Apache 默认配置: 很多现代服务器配置会禁止访问以 . 开头的隐藏文件(如 .htaccess, .git, .swp),返回 403 Forbidden。
  • MIME 类型: 服务器可能不知道 .swp 是什么类型,虽然通常会作为二进制流下载,但也可能报错。

应对策略:

  • 如果访问 .index.php.swp 返回 403,说明服务器禁止访问隐藏文件,这个漏洞可能无法直接利用,需要寻找其他泄露点(如 .git)。

📂 文件可能不在根目录

.swp 文件会生成在被编辑文件的同级目录下。

  • 如果 index.php 在网站根目录,那么 .index.php.swp 也在根目录。
  • 如果管理员编辑的是 /var/www/html/admin/dashboard.php,那么 .dashboard.php.swp 会在 /admin/ 目录下,你需要访问 http://example.com/admin/.dashboard.php.swp

应对策略:

  • 先通过浏览网站,搞清楚网站的目录结构,然后去对应的子目录下猜 .swp 文件。

📌 总结:做题/实战流程

遇到这种题,不要只盯着 index.php,标准流程是:

  1. 看提示: 题目有没有暗示文件名?
  2. 看源码: 网页源码里有没有其他文件名线索?
  3. 扫目录: 用工具扫一下,看看能不能扫出 .xxx.swp
  4. 手动猜: 尝试常见的组合:
    • /.index.php.swp
    • /.config.php.swp
    • /.flag.php.swp
    • /.www.zip.swp (如果是压缩包)
  5. 恢复数据: 下载下来后,用 vim -r 文件名 或者记事本打开,找 Flag。

问题3:怎么用工具扫目录

在 Web 题目(特别是 CTF 或渗透测试)中,靠手动猜目录(比如 index.php, admin.php)效率太低了。使用工具进行**目录扫描(Directory Brute-forcing)**是发现隐藏入口、备份文件或泄露配置的最快方法。

针对你之前提到的 .swp 泄露或 .git 泄露,工具的作用就是帮你批量尝试各种可能的文件名。

以下是几款最主流的工具及其使用方法,按推荐程度排序:

1. Dirsearch (最推荐,Python 编写)

这是目前 CTF 和渗透测试中最常用的工具,轻量、简单且功能强大。它自带了一个很全的字典。

  • 安装

    复制代码
    git clone https://github.com/maurosoria/dirsearch.git
    cd dirsearch
  • 基本用法 (扫描目标网站):

    复制代码
    python3 dirsearch.py -u http://target-ip-or-domain
  • 针对你情况的用法 (指定扩展名):
    如果你想找 .swp 文件或者 PHP 源码,可以指定后缀,这样扫描更精准:

    复制代码
    1# 扫描 .php 和 .swp 结尾的文件
    2python3 dirsearch.py -u http://target-ip -e php,swp,txt,bak
  • 递归扫描 (深入子目录):

    复制代码
    1python3 dirsearch.py -u http://target-ip -r

2. Gobuster (速度最快,Go 编写)

如果你需要极快的扫描速度,或者目标服务器对连接数有限制,Gobuster 是最佳选择。它是单文件二进制,不需要安装 Python 环境。

  • 安装 (Linux/Kali):

    复制代码
    1sudo apt install gobuster
  • 基本用法
    你需要指定一个字典文件(-w),Kali 中通常自带 common.txt

    复制代码
    1gobuster dir -u http://target-ip -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
  • 指定后缀扫描 (找 .swp):

    复制代码
    1gobuster dir -u http://target-ip -w /path/to/wordlist.txt -x php,swp,html

3. DirBuster (图形化界面,Java 编写)

如果你不习惯用命令行,DirBuster 是经典的图形化工具。

  • 特点:点点鼠标就能用,有进度条和可视化结果。
  • 缺点:比较老旧,扫描速度比上面两个慢,且经常报 Java 错误。
  • 用法:打开软件 -> 输入目标 URL -> 选择字典文件 -> 点击 Start。

4. 御剑后台扫描珍藏版 (Windows 经典)

这是国内非常老牌的工具,很多老派的 CTF 选手喜欢用。

  • 特点 :Windows 下的 .exe 程序,界面简单粗暴,内置的字典对国内 CMS 和常见后台路径支持很好。
  • 用法:输入域名,点击"开始扫描"。

💡 核心技巧:字典的重要性

工具只是"枪",字典才是"子弹"。扫描不到东西通常不是因为工具不行,而是字典里没有你要找的词。

  1. 通用字典 :包含常见的 admin, login, test 等。
  2. 扩展名字典 :针对你的 .swp 题目,你需要确保字典里包含 .index.php.swp, .config.php.swp 这种特定的命名规则,或者使用工具的参数(如 dirsearch 的 -e)来自动拼接。
  3. 敏感文件字典 :专门收集 .git, .svn, .DS_Store, .bak, .swp 等泄露文件路径的字典。

📌 总结

对于你遇到的 Vim 临时文件泄露 题目,建议使用 Dirsearch ,因为它支持直接指定后缀(-e swp),能帮你自动把字典里的 index, config 等词变成 .index.php.swp 这种格式去尝试,非常高效。

问题4:具体怎么安装Dirsearch

安装 dirsearch 非常简单,它基于 Python 开发,so只要你电脑装了 Python,基本都能跑起来。

考虑到你可能是在 Kali Linux (CTF 常用系统)或者 Windows 上操作,我为你整理了两种最稳妥的安装方式。

🐧 方式一:在 Kali Linux 中安装(推荐)

Kali 是 CTF 选手的首选系统,有两种方法可以安装。

方法 A:Git 源码安装(最推荐,版本最新)

这是安全从业者最常用的方式,能保证你用到最新的功能和字典。

  1. 打开终端 ,输入以下命令克隆项目:

    复制代码
    1git clone https://github.com/maurosoria/dirsearch.git
  2. 进入目录

    复制代码
    1cd dirsearch
  3. 安装依赖 (如果提示缺少库):

    复制代码
    1pip3 install -r requirements.txt

    (注:如果下载慢,可以加上国内源参数:-i https://pypi.tuna.tsinghua.edu.cn/simple)

  4. 运行

    复制代码
    1python3 dirsearch.py -h

    如果显示了帮助信息,说明安装成功!

我在安装的时候显示连接问题,Kali 连不上 GitHub。这在大陆的网络环境下非常常见,GitHub 的访问经常不稳定或者被阻断。

这里有几个解决办法,按推荐程度排序:

方法一:直接用 Kali 自带的版本(最快)

Kali Linux 官方源里其实已经收录了 dirsearch,虽然版本可能不是最新的,但做题完全够用了,而且下载速度极快。

直接运行这个命令:

复制代码
sudo apt update
sudo apt install dirsearch

安装完成后,你不需要 cd 进什么目录,直接在终端输入 dirsearch 就能用了。

方法二:使用 GitClone 的国内代理

如果你非要用 GitHub 上的最新版,可以使用国内的代码托管平台(如 Gitee)作为"中转",或者使用 GitHub 的加速服务。

试着运行这个命令(利用 gitclone.com 的代理服务):

复制代码
1git clone https://gitclone.com/github.com/maurosoria/dirsearch.git

如果这个能成功,你就可以继续 cd dirsearch 了。

方法三:手动下载 ZIP 包

如果上面都不行,你可以在 Windows 的浏览器里下载代码,然后传到 Kali 里。

  1. 在 Windows 浏览器访问 https://github.com/maurosoria/dirsearch

  2. 点击绿色的 Code 按钮,选择 Download ZIP

  3. 把下载好的压缩包拖进 Kali 桌面(或者通过文件管理器复制进去)。

  4. 在 Kali 里右键解压,或者用命令解压:

    复制代码
    1unzip dirsearch-master.zip
    2mv dirsearch-master dirsearch
    3cd dirsearch
方法 B:APT 直接安装(最简单,但版本可能较老)

如果你不想配置环境,可以直接用 Kali 的包管理器安装,但版本可能不是最新的。

复制代码
1sudo apt update
2sudo apt install dirsearch -y

安装完后,直接在终端输入 dirsearch 即可运行。


🪟 方式二:在 Windows 中安装

如果你是在自己的 Windows 电脑上做题,步骤也很简单。

  1. 确保安装了 Python
    • 去 Python 官网下载并安装 Python 3.x。
    • 重要 :安装时务必勾选 "Add Python to PATH"(添加到环境变量),否则后面会报错。
  2. 下载 dirsearch
    • 访问 GitHub 项目页:https://github.com/maurosoria/dirsearch
    • 点击绿色的 Code 按钮,选择 Download ZIP
    • 下载后解压到一个你喜欢的文件夹(比如 D:\Tools\dirsearch)。
  3. 安装依赖
    • 在文件夹空白处,按住 Shift + 鼠标右键,选择"在此处打开 Powershell 窗口"。

    • 输入命令:

      复制代码
      1pip3 install -r requirements.txt
  4. 运行
    • 在同一个窗口输入:

      复制代码
      python3 dirsearch.py -h
    • 或者直接用鼠标双击 dirsearch.py(但这通常闪退,建议用命令行)。


💡 避坑指南(常见问题)

  • 报错 ModuleNotFoundError: No module named 'requests'
    这是因为没安装依赖库。请确保你执行了 pip3 install -r requirements.txt

  • 报错 pip: command not found
    说明你没装 pip。在 Kali 里执行 sudo apt install python3-pip 即可。

  • 想全局调用
    如果你是用 Git 下载的源码,每次都要 cd 进目录很麻烦。你可以给它建个软链接(仅限 Linux):

    复制代码
    1sudo ln -s $(pwd)/dirsearch.py /usr/local/bin/dirsearch

    这样你在任何目录直接输入 dirsearch 就能启动了。

安装好后,你就可以用我之前教你的命令去扫描 .swp 文件啦!

问题5:如何使用dirsearch

最基础的扫描(扫整个网站)

如果你只是想看这个网站有哪些目录(比如 /admin, /images, /css 等),直接用这个命令:

复制代码
1dirsearch -u 目标网址

举个例子:

如果你想扫描 http://192.168.1.5,就输入:

复制代码
1dirsearch -u http://192.168.1.5

(按回车,然后等着看结果就行)

针对你刚才需求的扫描(找 .swp 或 .php 文件)

你之前想找 .index.php.swp,这种属于特定后缀的文件,我们需要加一个 -e 参数来指定后缀名。

命令格式:

复制代码
1dirsearch -u 目标网址 -e 后缀名

针对你的题目,建议用这个命令:

复制代码
1dirsearch -u http://192.168.1.5 -e swp,php,bak,txt

(解释:这个命令会让工具专门帮你找以 .swp, .php, .bak, .txt 结尾的文件,效率更高)

怎么看结果?

  • Status(状态码)
    • 200 :表示找到了!这是你最需要关注的(比如发现了 index.php.swp)。
    • 301/302 :表示跳转了(比如访问 /admin 跳转到了 /login)。
    • 403:表示禁止访问(没权限)。
    • 404:表示没找到。
  • Size(大小):文件的大小,有时候 0 大小的文件不用管。

cookie泄露

题目提示:cookie 只是一块饼干,不能存放任何隐私数据

解题步骤

思路分析:

根据上述名词解析得知cookie存放位置为Response下的set-cookie字段里面,通过靶场页面元素审查,发现Headers里面存在set-cookie字段,顺利找到我们的flag。

首先打开检查

cookie存放位置为Response下的set-cookie字段里面

ctfshow%7Bc9c7e6cf-0e7d-4634-a005-ec55fdcfd6ab%7D

用HackBar解码(Decoding)得到flag (补充:解码方式------encoding中下拉选中decoding)

或者随波逐流工具一键解码,获得flag

问题1:名词解释:cookie

Cookie是由浏览器保存在本地记录用户信息的一个文件,前端可以设置,也可以通过response响应头的set-cookie字段进行设置,且Cookie的内容自动在请求的时候被传递给服务器,因此只能存储少量数据,数据一多就会显著增加每个Web 请求的大小。

虽然大概率都开始刷题了,这种名词应该都知道是什么意思,但是以防万一,咳咳

问题2:怎么会想到这样解题

题目提示其实是在暗示你:"别把 Cookie 只当成普通的会话凭证,里面的内容本身就是线索。"

在 CTF 中,当题目提到 Cookie 泄露时,通常有以下几种解题套路,你可以按顺序尝试一下:

这是最直接的一步。浏览器地址栏左侧通常有个"锁"图标,或者你可以按 F12 打开开发者工具,切到"应用程序"标签页,在左侧边栏选择"Cookies"。

关注点:

  • Base64 编码 :如果 Cookie 的值看起来像 dGhpcyBpcyBhIGZsYWc= 这样由字母、数字和 = 组成的字符串,它很可能是 Base64 编码。你可以尝试在终端用 echo "值" | base64 -d 解码,或者使用在线工具解码。
  • 序列化数据 :如果值里包含 :{} 等符号,比如 user=admin;role=guest,这可能是 PHP 或 Python 的序列化数据,解码后可能会暴露管理员权限或隐藏字段。
  • 直接提示 :有时候 Flag 或者下一步的路径就直接写在 Cookie 里,比如 file=flag.php

如果 Cookie 里包含类似 user=guestrole=useris_admin=0 这样的字段,题目可能是在考察权限提升。

尝试方法:

  • guest 改成 admin
  • 0 改成 1
  • 如果修改后页面没变化,可能需要配合第一步的"编码"或"序列化"格式来修改。

如果 Cookie 的值看起来像一个文件路径,或者你在第一步解码后发现了文件名,这可能是一个文件包含漏洞。

尝试方法:

  • 如果 Cookie 是 file=index.php,尝试改成 file=flag.phpfile=../../etc/passwd
  • 提交修改后的 Cookie,刷新页面,看是否能看到 Flag。

总结 :这道题的核心在于**"审视"和"篡改"**。不要只看网页表面,重点检查浏览器里存储的 Cookie 数据,看看它是不是经过编码的密文,或者是否可以被修改以获取更高权限。

相关推荐
自我意识的多元宇宙2 小时前
二叉树遍历方式代码解读(1递归)
java·数据结构·算法
CYRUS STUDIO2 小时前
Frida 源码编译全流程:自己动手编译 frida-server
android·安全·逆向
一名优秀的码农2 小时前
vulhub系列-68-Momentum2(超详细)
安全·web安全·网络安全·网络攻击模型·安全威胁分析
Pure_White_Sword2 小时前
[NSSRound#6 Team]void(V1)
网络安全·ctf·reverse·逆向工程
逻辑驱动的ken2 小时前
Java高频面试考点04
java·开发语言·算法·哈希算法·散列表
_日拱一卒2 小时前
LeetCode:142环形链表Ⅱ
算法·leetcode·链表
回忆2012初秋2 小时前
C# 射线算法:判断GPS点是否在车辆工作区域内
linux·算法·c#
茫忙然2 小时前
CTF大语言模型(LLM)提示词注入12种方法
网络·人工智能·语言模型
sali-tec2 小时前
C# 基于OpenCv的视觉工作流-章51-点查找
图像处理·人工智能·opencv·算法·计算机视觉