web1

“一个简单的base64解码(自信)”

web2

网页无法查看源代码(js前台拦截)简单两个:

快捷键ctrl+U或者view-source:

1
view-source:https://xxx

read://不行,这tim叫阅读模式”

web3

源码中无,于是用bp抓包,截获响应报文。发现自定义响应头Flag,报文部分如下:

1
2
3
4
5
6
HTTP/1.1 200 OK
Server: nginx/1.20.1
Date: Wed, 20 May 2026 11:51:59 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Flag: ctfshow{02ff2179-4724-42a1-aba3-32892771b57b}

web4

“后台地址写入robots”是指在网站根目录下存放一个robots.txt文件,示例如下。作用是告诉搜索引擎爬虫(Google、百度…)哪些目录或文件不允许抓取。也一定程度省去了目录扫描这一环节。

1
2
3
4
User-agent: *
Disallow: /admin
Disallow: /manage/login.php
Disallow: /cms/backend/

于是访问:

1
url/robots.txt

deepsleep说是程序员常识,我枯了qwq

web5

访问url/index.phps才能看见源码a

据说是开发人员想把某个PHP文件的源码公开给学习者查看,他们才会用 .phps 扩展名?我就当s是study了.

下载index.phps并打开得到flag(注释里)

1
2
//ctfshow{ea40618a-369f-4f6a-a4ce-d2de54ce3157}
echo "web5:where is flag ?"

web6

又来一常识:备份整个网站时,直接打包这个目录,这个文件通常是www.zip 或者www.tar.gz,访问url/www.zip下载得到源码

1
2
3
...
//flag in fl000g.txt
...

web7

直接访问url/.git如果返回文件/目录列表,说明存在git泄露

.git下常见文件/目录:

文件/目录 存放内容 泄露的风险等级
HEAD 当前指向的分支 低(确认默认分支名)
config 仓库的配置信息(可能包含远程仓库地址、用户名、邮箱,极少见但也可能包含代理或凭证) 中(暴露开发环境配置)
index 暂存区(记录了下一次提交将要保存的文件快照的二进制索引) 中(可解析出当前改动的文件列表)
refs/heads/ 所有本地分支的最新一次提交的 commit hash(如 main、dev 分支的指针) 高(暴露所有分支的存在)
logs/ 完整的操作日志(谁、什么时候、执行了什么 git 命令、从哪个 commit 切换到哪个 commit) 极高(暴露开发者习惯、邮箱、甚至讨论片段)
objects/ Git 的核心对象库。所有文件的历史版本(被压缩和加密存储,但可提取)都存放在这里 极高(可以还原出网站上线前的原始代码、配置文件、被删除的密码)

web8

直接访问url/.svn如果返回文件/目录列表,说明存在svn泄露

svn(subversion)和 git 不同,它没有 objects 这种压缩存储,而是直接在工作副本的 .svn 目录中保留文件副本,导致泄露更直接。

文件/目录 存放内容 泄露风险
entries 列出当前目录下所有文件的原始文件名、版本号、时间戳、MD5等元信息 极高(直接暴露文件列表和版本)
text-base/ 文件的原始副本(.svn-base 格式)。比如 index.php 的原始版本存在这里 极高(直接下载源码,无需解析)
prop-base/ 文件的属性
tmp/ 临时文件,可能包含正在操作的文件内容
wc.db(SVN 1.7+) SQLite 数据库,记录了整个工作副本的状态 极高(包含所有文件路径和版本信息)

web9

程序异常终止(死机),导致临时文件(如交换文件 .swp)没有被正常清理,从而造成源码泄露。

访问

1
2
3
url/.index.php.swp
# 或者
url/index.php.swp # vim无法创建隐藏文件时

用过vim,不知道他的工作原理,查一下资料:

vim 是一个内存中的文本编辑器。它改的是内存里的副本,而不是直接改硬盘上的原文件。四步走:

1.打开文件:vim index.php,vim将 index.php 的内容从硬盘加载到内存中。此时,硬盘上的  index.php 没有变化。

2.编辑过程:在 vim 里按 i进行编辑,但所有的修改都只发生在内存里的副本上。

3.保存:输入 :w,vim将内存中的内容写回硬盘,覆盖原文件index.php。

4.退出:输入 :q,vim 释放内存,进程结束。只要不执行 :w,修改的任何内容都不会影响硬盘上的原始文件。

.swp 是 swap file 交换文件,为了解决断电、崩溃导致的内存丢失问题。vim在一打开文件时,就自动在同一目录下创建一个临时的、隐藏的交换文件,如 .index.php.swp

1.vim index.php,立即创建.index.php.swp,记录当前状态。
2.每隔几秒(默认4秒或200个字符),vim 自动将内存中的修改同步写入.swp文件。
3.执行:w,主动保存到index.php,此时.swp不会被删除。
4.执行:q,正常退出。vim 认为任务完成,自动删除.index.php.swp

.swp 文件包含:

原始文件的内容(打开时的快照)

所有的修改历史(包括撤销树、插入的字符、删除的行)

文件状态(光标位置、是否开启了插入模式等)

文件权限和时间戳


web10

bp抓包,简简单单,url解一下

1
Set-Cookie: flag=ctfshow{0a8c7e63-e89c-4a91-b73b-a754ebd8f995}

web11

去阿里云 https://boce.aliyun.com/detect/dns 创建DNS解析,域名flag.ctfshow.com,解析类型为txt记录(动态变更,知道原理就好,不要纠结)

web12

不知道后台地址,猜一个/admin。用robots.txt可验证。账号admin,密码是help line number

web13

找技术文档

看了半天blog,结果页面最下方有个document能点进去qwq

web14

“好好好,这个题目开始有点意思了”

已知:”某编辑器最新版默认配置下,如果目录不存在,则会遍历服务器根目录。有时候源码里面就能不经意间泄露重要(editor)的信息,默认配置害死人”

关键词:编辑器editor、遍历根目录(猜测flag放在根目录某个路径下)、源码信息

看不懂、没办法,只能一步一步来:

1.打开index页面,查看源码,竟然有900行。可恶.

检索 “editor” ,发现一条匹配如下

1
<img src="editor/upload/banner-app.png" alt="App">

看起来是一个editor编辑器上传文件的存放路径,访问看看

一张平平无奇的图片,于是回退/editor/upload,结果403,那我再回退/editor

各个按钮尝试了下,感觉flag不在这儿。思路断了,再找呗,扒editor网页源码

发现编辑器是KindEditor

upload_json.php加载发现是空白页(这题应该不是用文件上传漏洞解决的)

⭐注意到filemanager文件目录浏览功能启用,于是访问url/editor/php/file_manager_json.php,显示如下

很神奇,这里报错了,但是成功扫描了服务器根目录scandir(/root)(下面一长串中找到filename = /bin /etc /var 确认是服务器根目录)

查资料得知file_manager_json.php的代码核心逻辑:

1
2
3
4
5
6
7
8
9
10
// 1. 定义根目录路径(kindeditor默认配置)
$root_path = '/var/www/html/editor/php/../attached/';

// 2. 如果用户没有指定 path 参数,就使用 root_path 作为当前路径
if (empty($_GET['path'])) {
$current_path = realpath($root_path) . '/';
}

// 3. 基于 $current_path 进行 scandir 操作
$files = scandir($current_path);

kindeditor会先尝试cd到自己的工作目录./attached,但是!!由于这个目录并不存在,realpath() 会返回 false。而这个漏洞的关键就在于:当 realpath() 返回 false 时,程序没有正确处理,导致 $current_path 变成了一个空字符串或者 /,从而让 scandir()读取了系统根目录。

这与题干呼应。“某编辑器最新版默认配置下,如果目录不存在,则会遍历服务器根目录”

从报错信息可以发现完整路径,如下,确定站点根目录为nginx默认/var/www/html

1
/var/www/html/editor/php/file_manager_json.php

下面利用这个.php找到隐藏的flag

回到上面php代码,发现参数传递过程是通过 PHP的超全局变量 $_GET 来接收的。

$_GET 是一个数组,专门用来收集通过?key=value形式传递的数据。$_GET['path'] 就是获取名为 path 的参数值。因此将path的值赋为“/var/www/html/”,并通过http协议中url的查询字符串,向服务器端的php进行参数传递。

即访问:

1
url/editor/php/file_manager_json.php?path=/var/www/html/

发现可疑目录

继续访问:

1
url/editor/php/file_manager_json.php?path=/var/www/html/nothinghere/

进去发现是fl000g.txt

好了最后一步:

1
url/nothinghere/fl000g.txt

偷偷看了官方wp,竟然如此简单!editor界面暗藏玄只因。第二行有个回形针图标,点开“文件空间”竟然可以查看整个服务器目录,我就说搞这么多图标干嘛,好的我眼瞎OK

web15

发现网页底部有个QQ邮箱。fuzz后台登陆地址为url/admin

题目既然说邮箱信息泄露,先猜下账号密码。然鹅不行,bp爆破了下,不在常用字典中。忘记密码试试?于是土方法手机QQ加好友,发现人家个签写着住在西安。兄弟你是真性情.jpg | flag到手

web16

【new】“php探针是用来探测空间、服务器运行状况和PHP信息用的,探针可以实时查看服务器硬盘资源、内存占用、网卡 流量、系统负载、服务器时间等信息。url后缀名添加/tz.php 版本是雅黑PHP探针,然后查看phpinfo搜索flag”

开发者工具,但是没删除,可以作为目录扫描的参考。查资料补充一点常见探针名:

一、通用默认探针名

这是最基础、最常见的一类,通常开发者或扫描器会优先使用这些名字。

文件名 说明/来源
tz.php 雅黑PHP探针,非常经典,在CTF题中常见。
x.php X探针(也叫刘海探针),也是开源项目中常用的名字。
prober.php / probe.php 通用探针名,含义直接。
phpinfo.php PHP标准信息页,最基础的探针,直接暴露 phpinfo() 信息。
info.php / test.php 开发人员临时测试时最常用的名字,极易被忽略而泄露。
1.php / 2.php 极其随意的命名,但扫描器字典中常有。

二、特定名称的探针

这些探针往往来自特定的开源项目,有一定知名度。

文件名/关键词 对应的探针项目
l.php 有时作为LAMP探针的简写。
iProber.php 一款经典的PHP探针。
9gan.php 部分较早的探针程序。
kodexplorer 可道云WorkSpace,虽然是文件管理器,但也常被利用来获取信息。
phpMyAdmin 数据库管理工具,其setup目录或特定文件会泄露路径信息。

三、按功能分类的其他探测文件

除了显示PHP信息的探针,还有一些用于探测特定功能或路径的文件。

类型 常见文件名 用途/风险
配置探测 .envconfig.php.bakconfig.inc 探测配置信息,可能泄露数据库密码、密钥等。
环境探测 server-status (Apache) Apache服务器状态页,可能泄露访问请求和连接信息。
代码执行探测 hello.phpshell.php 攻击者上传的用于验证代码执行的小马。
目录遍历探测 test.txttest.html 用于测试是否存在目录遍历漏洞。

web17

明示了,是数据库备份,找backup.sql

web18

网页小游戏。扒一下源码,找到控制游戏的js代码:

分数>100

赛博厨子跑一下

110.php 谐音梗,扣钱🙌

web19

扒一下源码,好家伙,加密算法全部放在前端了,搁这裸奔呢?

调用了这几个现成的加密函数,明显是aes对称加密

敢把密钥和随机数放这儿

1
2
key = "0000000372619038";
iv = "ilove36dverymuch";

用的CBC模式,块链接加密

可以看出用户名admin是明文存储的,密文以一串16进制数存储,加密算法有了,拿厨子跑一下:

好家伙,我也要!

web20

查资料,asp就是早期架构的php,常常与微软自己的access数据库(.mdb)组合使用

找一下常见目录,一个一个试

文件名 常见路径
data.mdb /data.mdb/database/data.mdb/db/data.mdb
db.mdb /db.mdb/database/db.mdb/db/db.mdb
database.mdb /database.mdb/data/database.mdb
*.bak /db.bak/database.bak/data.bak

最后发现是/db/db.mdb,没有easyaccess,拿notepad++看,成功拿到


到这里信息收集就做完了,确实简单。主要是几个思路:

1、漏洞利用:源码/算法泄露、robots目录、网站/数据库备份泄露、git泄露、svn泄露、swp临时文件、editor编辑器默认配置目录遍历、php探针

有些是本身就有的漏洞,大部分是程序员大意了没有闪。

2、fuzz爆破:后台地址、手动目录扫描

3、社会工程学:技术文档涉密(blog/document)

4、其他:bp抓包、域名txt解析

所以接着奏乐,接着搓😎