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

部分代码由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是浏览器底层的系统级指令,优先级高于网页脚本,因此依然能生效。
还有其他方面
键盘硬件与系统设置的"锅" (最常见原因)
在很多笔记本电脑或紧凑型键盘上,F1 到 F12 不仅仅是功能键,它们通常还被绑定了硬件控制功能(如调节音量、亮度、播放暂停等)。
- 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

-
第一步:侦察
在题目给出的网址后面,手动拼接上
/robots.txt。- 例如: 如果题目网址是
http://example.com/,你就访问http://example.com/robots.txt。 
- 例如: 如果题目网址是
-
第二步:分析
浏览器会显示
robots.txt文件的内容。你会看到类似这样的代码1User-agent: * 2Disallow: /flagishere.txtUser-agent: *表示这条规则对所有爬虫都生效。Disallow: /flagishere.txt就是关键信息!它明确告诉你,/flagishere.txt这个文件是"禁止"被抓取的。这通常意味着 flag 就在这里。
-
第三步:获取
正如你所说,回到浏览器地址栏,把 URL 中的
/robots.txt替换成你刚刚发现的/flagishere.txt。- 访问:
http://example.com/flagishere.txt - 按下回车,flag 就会直接显示在页面上了!
- 访问:

问题1:🤔 为什么会这样?
-
robots.txt是什么?它是一个放在网站根目录下的文本文件,全称是"爬虫排除标准"。它的作用是告诉搜索引擎(比如百度、谷歌):"嘿,爬虫朋友,网站的这些目录或文件是私密的,你不要去抓取和收录。"
-
为什么它会泄露信息?
这就像一个"此地无银三百两"的告示牌。开发者为了不让搜索引擎索引到后台、备份文件等敏感路径,就把这些路径写进了
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/.tgz:Linux 服务器 的标准备份格式。如果你发现题目提示是 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-> 肯定是 ZIPapplication/x-rar-compressed-> 肯定是 RARapplication/gzip或application/x-gzip-> 肯定是 GZ
Content-Disposition:- 有时候会显示
filename=backup.tar.gz,直接告诉你文件名。
- 有时候会显示
4. "盲猜"与下载验证(实战法)
如果以上都看不出来,或者文件没有后缀名(比如链接是 http://site.com/backup),那就用最笨但最有效的办法:
- 先试
.zip:因为 ZIP 最通用,概率最高。 - 再试
.tar.gz:如果是 Linux 题,这个概率第二高。 - 下载后看文件头 :
- 把文件下载下来(不管有没有后缀)。
- 用记事本或 16 进制编辑器打开。
- 看前两个字符:
PK-> 改名为.zipRar!-> 改名为.rar37 7A(7z) -> 改名为.7z
总结
在 Web 题中,看后缀 是第一直觉,分析操作系统环境 是辅助判断。如果实在拿不准,下载下来看文件头(PK/Rar!) 是最终极的真理。
问题2:如果是其他类型的题目,比如misc,怎么看压缩包类型
在 CTF 或实际渗透测试中,面对一个"源码压缩包泄露",我们之所以能迅速判断它到底是 .zip、.tar.gz 还是 .rar,通常不是靠"猜",而是靠特征识别。
即使文件名被篡改(比如叫 backup.bak 或 123),或者根本没有后缀名,我们依然可以通过以下几种"火眼金睛"的方法来确定它的真实类型:
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。
- 如果是 Windows 服务器,或者开发者手动打包,通常是
- Linux 环境/运维习惯:
- 如果是 Linux 服务器自动备份,通常是
.tar.gz(或.tgz) 或.tar.bz2。 - 常见文件名:
wwwroot.tar.gz,data.tar,backup.tgz。
- 如果是 Linux 服务器自动备份,通常是
- 编辑器/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 中,如果文件不大,最快的方法往往是**"试错"**:
- 先把后缀改成
.zip试试能不能解压。 - 不行就改成
.rar试试。 - 再不行就改成
.7z或.tar.gz。 - 如果都不行,可能它根本不是压缩包,而是一个被重命名的源码文件(比如
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 文件夹,而是使用专门的工具来"下载并还原"整个网站源码。
- 工具名称:
GitHack或dvcs-ripper。 - 操作原理: 这些工具会利用
.git泄露的漏洞,把服务器上的.git文件夹整个下载下来,然后利用 Git 命令自动把网站的完整源代码还原到你的电脑上。 - 结果: 你只需要在还原出来的文件夹里搜索 "flag",就能轻松找到答案。
总结
这道题考察的核心是:不要忽视隐藏文件。
题目提示"版本控制源码泄露",就是在暗示你去找 .git 文件夹。只要这个文件夹泄露,对于攻击者来说,这个网站就等同于把底裤都脱光了。
问题2:这个知识点的题目有哪些,题目提示有可能是什么样的
这类题目通常属于 Web 安全 中的 信息泄露 或 源码泄露 类别。
🕵️♂️ 题目提示长什么样?
出题人通常不会直接告诉你"去访问 .git",而是会通过以下几种方式暗示你:
-
直接的文字暗示
- "程序员小李的疏忽" / "粗心的管理员"
- "版本控制" / "版本管理"
- "备份文件" / "源码备份"
- "Git 初始化" / "Git 记录"
- "看看有没有隐藏的文件"
-
页面源码或注释暗示
- 网页源代码里有一行注释:
<!-- .git -->或<!-- Check the version control -->。 - 网页标题是 "Git Lab" 或 "Git Test"。
- 网页源代码里有一行注释:
-
HTTP 响应头暗示
- 在响应头(Response Headers)里看到
X-Powered-By: Git或者类似的自定义字段。
- 在响应头(Response Headers)里看到
-
文件名暗示
- 题目附件或页面里提到了
index.php.bak,暗示有备份习惯,进而引导你去猜.git。
- 题目附件或页面里提到了
🧩 常见的题目类型与解题场景
根据泄露的程度不同,题目通常分为以下几个等级:
1. 基础型:完整 .git 目录泄露
这是最基础的送分题。
- 现象 :你可以直接访问
http://target/.git/,浏览器直接显示了目录列表(Index of /...),或者访问http://target/.git/config能看到配置文件内容。 - 解题 :
- 使用工具 GitHack (推荐)或
dvcs-ripper。 - 命令:
python GitHack.py http://target/.git/。 - 工具会自动下载并还原源码,你在还原的文件夹里找
flag或index.php。
- 使用工具 GitHack (推荐)或
2. 进阶型:Git 历史版本泄露 (Git Log)
这种题目稍微绕一点。当前的源码里没有 Flag,因为开发者发现后把它删了。
- 现象 :用 GitHack 还原源码后,打开
index.php发现是空的或者没有 Flag。 - 解题 :
- 进入还原的目录,执行
git log查看提交历史。 - 你会看到类似
commit a1b2c3d (add flag)的记录。 - 使用
git reset --hard a1b2c3d回滚到那个版本。 - 再次查看文件,Flag 就出现了。
- 进入还原的目录,执行
3. 高级型:Git Stash 泄露
开发者把代码暂存了(git stash),没有提交,但 .git 目录被泄露了。
- 现象:源码里没有,历史记录里也没有。
- 解题 :
- 在还原的目录下执行
git stash list。 - 执行
git stash pop恢复暂存的代码。 - 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" 、"备份" 或者**"粗心"**时,第一反应应该是:
- 打开浏览器访问
http://目标网址/.git/。 - 如果能访问,直接上 GitHack。
- 如果还原出来的源码没 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 代表"找到了"。这才是我们要盯着看的。
- 404 代表"没找到"。说明工具试了
555B:这是网页大小。/swp.php:这是工具正在尝试猜解的文件名。
现在的情况
目前满屏都是 404,说明工具还在努力尝试,还没扫到那个"对"的文件。
接下来该做什么
耐心等待
扫描需要时间(看截图上面写着 Wordlist size: 9480,它要试将近一万次)。让它继续跑,只要出现 [200] 开头的行,那就是答案。
如果扫完了还是全 404
如果等它跑完(显示 Task Completed)还是没结果,说明文件名可能不是字典里的常见词。这时候得换个思路:
- 猜测文件名 :通常
.swp文件是编辑index.php时留下的,所以文件名很可能是.index.php.swp。 - 手动验证 :直接把这个后缀拼到网址后面,在浏览器里试试能不能下载:
https://82e9e158...show/.index.php.swphttps://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 文件名:
.index.php.swp(概率 80%).www.zip(有时候管理员会备份整个目录).flag.php.swp(概率 10%).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+C或Ctrl+Z强行中断。
这时候,Vim 来不及执行"删除临时文件"的指令,那个包含源代码内容的 .swp 文件就会被遗留在服务器的网站目录下。
🕵️♂️ 攻击者怎么利用?
网站目录下的文件通常是可以通过 URL 直接访问的。虽然 .index.php.swp 是个隐藏文件(以 . 开头),但在 Web 服务器的配置中,它往往是可以被读取和下载的。
攻击步骤:
- 猜测 :攻击者看到网站在运行
index.php,心想"管理员可能正在维护它",于是尝试访问http://example.com/.index.php.swp。 - 下载:如果服务器配置不当,浏览器会直接下载这个文件。
- 恢复 :这个
.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,标准流程是:
- 看提示: 题目有没有暗示文件名?
- 看源码: 网页源码里有没有其他文件名线索?
- 扫目录: 用工具扫一下,看看能不能扫出
.xxx.swp。 - 手动猜: 尝试常见的组合:
/.index.php.swp/.config.php.swp/.flag.php.swp/.www.zip.swp(如果是压缩包)
- 恢复数据: 下载下来后,用
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 和常见后台路径支持很好。 - 用法:输入域名,点击"开始扫描"。
💡 核心技巧:字典的重要性
工具只是"枪",字典才是"子弹"。扫描不到东西通常不是因为工具不行,而是字典里没有你要找的词。
- 通用字典 :包含常见的
admin,login,test等。 - 扩展名字典 :针对你的
.swp题目,你需要确保字典里包含.index.php.swp,.config.php.swp这种特定的命名规则,或者使用工具的参数(如 dirsearch 的-e)来自动拼接。 - 敏感文件字典 :专门收集
.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 源码安装(最推荐,版本最新)
这是安全从业者最常用的方式,能保证你用到最新的功能和字典。
-
打开终端 ,输入以下命令克隆项目:
1git clone https://github.com/maurosoria/dirsearch.git -
进入目录 :
1cd dirsearch -
安装依赖 (如果提示缺少库):
1pip3 install -r requirements.txt(注:如果下载慢,可以加上国内源参数:
-i https://pypi.tuna.tsinghua.edu.cn/simple) -
运行 :
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 里。
-
在 Windows 浏览器访问
https://github.com/maurosoria/dirsearch。 -
点击绿色的
Code按钮,选择Download ZIP。 -
把下载好的压缩包拖进 Kali 桌面(或者通过文件管理器复制进去)。
-
在 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 电脑上做题,步骤也很简单。
- 确保安装了 Python :
- 去 Python 官网下载并安装 Python 3.x。
- 重要 :安装时务必勾选 "Add Python to PATH"(添加到环境变量),否则后面会报错。
- 下载 dirsearch :
- 访问 GitHub 项目页:https://github.com/maurosoria/dirsearch
- 点击绿色的 Code 按钮,选择 Download ZIP。
- 下载后解压到一个你喜欢的文件夹(比如
D:\Tools\dirsearch)。
- 安装依赖 :
-
在文件夹空白处,按住
Shift+鼠标右键,选择"在此处打开 Powershell 窗口"。 -
输入命令:
1pip3 install -r requirements.txt
-
- 运行 :
-
在同一个窗口输入:
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:表示没找到。
- 200 :表示找到了!这是你最需要关注的(比如发现了
- 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 泄露时,通常有以下几种解题套路,你可以按顺序尝试一下:
查看 Cookie 的明文内容
这是最直接的一步。浏览器地址栏左侧通常有个"锁"图标,或者你可以按 F12 打开开发者工具,切到"应用程序"标签页,在左侧边栏选择"Cookies"。
关注点:
- Base64 编码 :如果 Cookie 的值看起来像
dGhpcyBpcyBhIGZsYWc=这样由字母、数字和=组成的字符串,它很可能是 Base64 编码。你可以尝试在终端用echo "值" | base64 -d解码,或者使用在线工具解码。 - 序列化数据 :如果值里包含
:、{、}等符号,比如user=admin;role=guest,这可能是 PHP 或 Python 的序列化数据,解码后可能会暴露管理员权限或隐藏字段。 - 直接提示 :有时候 Flag 或者下一步的路径就直接写在 Cookie 里,比如
file=flag.php。
修改 Cookie 进行伪造
如果 Cookie 里包含类似 user=guest、role=user、is_admin=0 这样的字段,题目可能是在考察权限提升。
尝试方法:
- 把
guest改成admin。 - 把
0改成1。 - 如果修改后页面没变化,可能需要配合第一步的"编码"或"序列化"格式来修改。
利用 Cookie 读取服务器文件
如果 Cookie 的值看起来像一个文件路径,或者你在第一步解码后发现了文件名,这可能是一个文件包含漏洞。
尝试方法:
- 如果 Cookie 是
file=index.php,尝试改成file=flag.php或file=../../etc/passwd。 - 提交修改后的 Cookie,刷新页面,看是否能看到 Flag。
总结 :这道题的核心在于**"审视"和"篡改"**。不要只看网页表面,重点检查浏览器里存储的 Cookie 数据,看看它是不是经过编码的密文,或者是否可以被修改以获取更高权限。