LitCTF 2023 的 OSINT 题组我印象很深,尤其是这套「探姬去哪了?【0~3】」——光看标题就透着一股"找人找地点"的劲儿,后面还挂着四个编号,摆明了是一套连环题:你解完第 0 题拿到一个结果,第 1 题的线索就藏在里面,一环扣一环。今年各大 CTF 赛事都开始堆 OSINT 题库,这种题越来越值得系统性刷一遍,它考的其实不是"会不会用黑客工具",而是你对公开信息的敏感度、搜索习惯和交叉验证能力。这篇复盘我尽量把每一步的思路、踩过的坑、以及为什么那么想都写清楚,适合刚接触 OSINT 题型的人跟着走一遍,也适合想系统梳理"地理定位类 OSINT 题"解题框架的朋友收藏起来对照着练。
1. 为什么这套题组值得从头到尾复盘一遍
先说结论:这套题是典型的"由图到地、由地到人、由人到最终答案"的递进式设计。以前很多比赛出 OSINT 就出一题,给一张图让你找坐标,或者给一个用户名让你找 flag,顶多算"单点技能测试"。但「探姬去哪了?【0~3】」把四道题串成了一个完整的调查流程,这就非常贴近真实场景了——真实的情报分析从来不是靠一个工具、一条信息就能得出结论的。
1.1 题目标题里藏着的信息量
"探姬去哪了"这个题目名,主语是"探姬",这是一个虚拟的人物设定;动作是"去哪了",说明题目的核心是追踪这个人的活动轨迹。"【0~3】"说明一共有 4 个小题,编号从 0 开始。这种编号方式在 CTF 里还挺常见的,它不只是为了排序,更是在暗示:第 0 题往往是入门题,用来确认一个基础事实,后面每一题都建立在这个事实之上继续深挖。
我当时做题前先做了一件很重要的事:把 0~3 四道题全部下载下来,先看每一题的附件类型和题目描述,而不是急着做第 0 题。这个习惯很关键。因为连环题的出题人通常会在后面的题目描述里透露出题思路,甚至前面的题里没看懂的东西,看到后面的描述就懂了。
1.2 OSINT 题到底在考什么
OSINT 全称是 Open Source Intelligence,开源网络情报,翻译成人话就是:利用公开渠道的信息,通过收集、筛选、交叉比对,得出一个非公开的结论。CTF 里的 OSINT 题本质上是一场"信息挖掘训练",它不会让你去渗透什么系统、破解什么密码,它考的是:
- 对搜索引擎、地图工具、社交平台公开内容的熟练程度;
- 对图片中隐藏信息的敏感度(包括 EXIF、画面元素、文件命名等);
- 在碎片化信息中建立时间线和空间线的推理能力;
- 以及最重要的——能不能把多条弱线索交叉验证成一条强证据。
这套「探姬去哪了」四个小题,恰好分别对应了上述几种能力的组合。
1.3 一套题练的是完整的调查闭环
我做完之后把四道题串联起来,发现它们实际上模拟了一个典型的地理追踪流程:
- 第 0 题:从一个"视觉元素"出发,判断大的地理范围(城市级别);
- 第 1 题:在确定城市后,进一步缩小到街区甚至精确坐标;
- 第 2 题:通过社交平台的公开动态,还原目标人物的行动轨迹;
- 第 3 题:综合前面所有信息,定位到最终的"藏身点"。
这个流程设计得非常有教学价值。你单独看每一题,难度都不算特别高,但连起来做,每一步的输出都是下一步的输入,会逼着你养成"信息归档"的习惯——我当时用一个文本文件记录每一步的结论和依据,最后做第 3 题的时候,这个文件直接成了我的答案推导表。
提示:做连环 OSINT 题,一定要边做边记录。很多人做到第 2、3 题时往回找前面的坐标、时间、ID 等中间结论,结果发现当时没存,只能翻历史记录重来一遍,浪费大量时间。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 第 0 关:一张日常照片里可以拆出多少线索
第 0 关的附件我记得是一张看起来非常普通的照片,内容是某家店的门口或者街边的一角,具体载体是什么不重要,重要的是解题的思路。拿到照片之后,我的第一直觉不是"用眼睛看",而是"先把照片拆开看"。OSINT 题里面,图片本身就是一个信息容器,它至少藏了四层信息:文件层、像素层、内容层、上下文层。
2.1 文件层:元数据与文件名的"意外之喜"
很多新手拿到图片直接就开始看画面里的招牌、地标,但老手会先做三件很基础的事:
第一,看图片属性里的 EXIF 信息。虽然大部分出题人会清理 EXIF,但如果哪道题忘了清,GPS 坐标、拍摄设备型号、拍摄时间会直接给你省掉一半时间。这道题我看下来,EXIF 是被清理过的,所以这条路没有走通。
第二,看文件名。文件名往往是出题人留后门的高频位置。这道题的文件名我忘了具体是什么,但一般文件名里可能出现地点缩写、日期、经纬度、账号名等。就算没信息,也是一种排除,能让我安心去啃画面内容。
第三,用十六进制编辑器快速翻一下文件头尾。能确认有没有被附加隐藏数据。OSINT 题经常跟杂项题结合,图片末尾塞一段文本或压缩包是常见玩法。我当时快速确认过,文件是干净的,于是进入下一层。
2.2 像素层:识图搜索的正确打开方式
这一层是大家最容易犯错的环节。我基本不用某一家搜索引擎的识图功能直接搜原图,因为直接搜原图,匹配到的是"完全相同的图片",而赛题里的照片通常经过裁剪、缩放、调色,甚至是从别人动态里转发过来的,直接搜只会得到一堆无关结果。
我更推荐的做法是"分块搜索":把图片里最有辨识度的局部单独截出来搜。比如题图里的一个招牌、一个古建筑飞檐、一个城市雕塑的剪影,单独截取之后作为搜索对象,往往能命中对应景点的旅游照片或摄影作品。
还有一个实用的操作逻辑:先搜"大概念",再搜"小概念"。如果照片里有一个标志物,我通常会先搜这个标志物的名字,确认它所在的城市和景区,而不是直接搜"这是哪里"。这个问题看起来绕,其实是把"图像检索"转换成"关键词检索",因为图像检索的底层也是通过标签和相似度匹配的,你先从画面中提取出"独眼识别特征",再用关键词搜索效率更高。
2.3 内容层:画面里的每个元素都可能是路标
这道题的照片里,我记得至少有三个可挖掘的视觉元素:一个店铺的 Logo 或特定字体的招牌、远处一个塔状建筑的轮廓、以及街道的类型特征。我当时判断的思路是:
- 招牌的文字或 Logo 能确认这是一家连锁店,而每家连锁店的分布区域可以从品牌官网上查到,或者通过搜索"品牌名+城市"来进行初步锁定;
- 高塔轮廓是一个很有效的地标,不同的城市有不同的电视塔、信号塔形状,塔尖形式、高度比例、周围天际线,都是判断依据。我记得我当时把这个轮廓截图后,通过轮廓匹配的方式锁定了两三个候选城市,再结合连锁店的分布,把范围缩到了一个城市;
- 街道类型特征(比如电线杆样式、路灯样式、公交站牌颜色)可以用来判断区域的新旧程度和城市风貌。
这三个方向是并列的,但还可以做交叉:连锁品牌在哪些城市有门店、电视塔在那个城市的哪个方位拍摄会出现这样的角度,两者一交叉,结论就不再是猜测,而是一个大概率的判断。
2.4 上下文层:题目描述和文件名里的软信息
千万别忽略题目的描述文本。很多 OSINT 题会在描述里故意写一句看似废话的"场景提示",比如"她好像很喜欢在傍晚喝奶茶"——这句废话其实是在告诉你:时间可能是傍晚,店铺可能附近有奶茶店。这道题的第 0 关描述我记得是给出了"探姬"这个角色的一个社交平台用户名,这正好是下一题的入口。
到这里第 0 关的解题闭环就很清楚了:看到图片 → 查文件信息 → 分块搜索 → 提取视觉特征 → 交叉验证 → 得出城市与大致区域 → 输出第 0 题的 flag 格式。这个闭环本身就是一个可以复用到所有"图片找地点"类 OSINT 题的骨架。
3. 第 1 关:从区域到精确坐标,地图工具的地表侦查战
第 0 关确认了城市和大致的区。第 1 关的题目描述给出的新线索我记得是"她经常在这附近晃悠,但每天都会在同一家店买早餐",这几乎是在明示:你需要从一片大范围区域里,找到那个"店"。这类题的难点在于,地图上的范围虽然缩小了,但步行范围内仍然有成百上千家店铺,怎么找到目标?靠的是把照片里的细节转化为地图上可验证的特征。
3.1 坐标与精度的认知:为什么"经纬度"要写到小数点后第几位
做地理定位题,必须对经纬度精度有直觉。简单说:
- 小数点后一位,精度大约 11 公里,能定位到一个城市;
- 小数点后三位,精度大约 110 米,能定位到一条街道;
- 小数点后五位,精度大约 1 米,能定位到一个门口。
所以第 1 关题目的最终 flag 如果需要填坐标,通常要求你给到小数点后四位甚至五位。这意味着你的判断必须精确到"这栋楼"而不是"这条街"。我当时做题时把地图工具切换到卫星视图,再叠加街景视图进行比对,目的就是把候选点缩小到"楼宇级别的唯一匹配"。
3.2 在线地图的"无级缩放"与特征比对
地图工具我一般同时开两三个窗口,一个是平面图视图,一个是卫星视图,一个是街景视图。平面图用来确认道路名称和建筑轮廓,卫星图用来确认屋顶形状、连廊结构、门面朝向,街景视图用来模拟人站在地上的视角,和题目照片做逐元素比对。
这个过程中最有用的操作是"沿路走一遍街景"。别小看这个操作,它看起来机械,但非常有效。我记得我当时的做法是:从第 0 关确定的那个区域边界开始,沿着主干道走街景,看沿街店铺的招牌颜色、门口台阶样式、相邻店铺的排列,一旦发现某个画面和题目照片里的排列顺序一致,马上截图存档。这个办法比漫无目的地放大缩小地图高效得多。
3.3 招牌文字是最高密度的锚点信息
在第 1 关的定位过程中,我反复确认了一个结论:招牌上的文字(尤其是中英文混合的差旅风格招牌、特定字体的品牌 Logo)是最高密度的锚点。因为在线地图的街景画面中,招牌文字通常能被清晰拍摄,而且招牌的配色、字体、排列方式,和照片里呈现的内容可以直接一一对应。
你不需要知道这个招牌是哪家店,你只需要在街景里看到一块和题图一模一样的招牌,位置就锁定了。所以操作步骤是:先把题图里的招牌区域放大、增强对比度、必要时用 OCR 工具提取文字 → 把提取出来的文字作为搜索词 → 把搜索结果中的"地址信息"直接丢回地图里定位。
这一步看起来简单,但 OCR 工具的选择很影响效率。我当时用的是网页端免费的 OCR 识别工具,但线上工具的识别精度对倾斜角度和艺术字体的支持不太稳定,后来干脆找了一个离线 OCR 工具跑了一遍,结果反而更干净。这个小插曲也提醒我:OSINT 题里工具不是越高级越好,而是"哪个工具在当前条件下输出最干净的结果就用哪个"。
3.4 实际验证:街景照片与题图的"时间差"陷阱
这里有个非常重要的坑必须说:街景照片是有拍摄时间的,而赛题里的照片不是同一时间拍的。同一个地点,晴天和阴天看起来像两个地方,店面可能换了招牌,行道树可能长高了把视线挡住。我在地图里走了半小时发现某一块很像,但怎么都比对不上,后来把街景时间轴往前拉了几次,才意识到那个位置在更早一次拍摄的街景版本里跟题图完全一致。
所以遇到"半天都对不上的情况",请先调整街景时间轴。这个操作很多人不知道,但它真实关系到解题成败。地图厂商的街景数据往往覆盖了好几年的多个时间版本,切换时间版本后,同一位置的画面会发生明显变化,你要找的可能不是最新的版本。
4. 第 2 关:社交平台公开动态里的时间线与空间线
到第 2 关,题目给了一个关键新素材:一个社交平台的账号——也就是"探姬"本人的公开主页。这类账号在赛题里是虚构的,但是形象非常完整:它会发布很多日常动态、打卡记录、照片和文字。这一关的目标是:从这些动态里提取时间和地点的对应关系,形成一张行程表,进而推算出"她现在最可能在哪"。
4.1 从打卡动态里建立时间轴
我处理账号信息的第一步,是把所有动态按时间排序,给每条动态打上"地点标签"和"时间标签"。地点标签来自动态里的文字描述、照片背景,时间标签来自动态发布时间的明确显示。
这个过程很多人会低估。因为动态数量可能很多,而且大部分和解题无关。但如果你不排序、不打标签,到后期信息一多,很容易把时间顺序搞混。我当时用的是一个简单的表格:
| 动态编号 | 发布时间 | 图片内容特征 | 文字提及 | 初步地点判断 |
|---|---|---|---|---|
| 1 | 早上 8:40 | 某店门口招牌 | "早餐惯例" | 第 1 关确认的位置附近 |
| 2 | 中午 12:10 | 办公楼大堂 | "加班" | 某商务区 |
| 3 | 傍晚 | 河边护栏 | "散步" | 某公园附近 |
| 4 | 深夜 22:30 | 没有图 | "还在改论文" | 不确定 |
做完之后,我立刻发现两条关键规律:一个是工作日她几乎固定出现在某个区域(上班/上学),另一个是她每隔几天就会在特定时间段发一张"酒馆/咖啡馆窗外"的图片。这个规律直接指向她某个常去场所。
4.2 把动态里的照片当成新输入,再做一轮信息挖掘
第 2 关里发的动态照片,本身就值得做一次完整的"图片信息挖掘"流程。很多新手会把第 0 关学到的图片分析能力只用在第 0 关的图片上,忽略了后面每一关里的图片都需要同样对待。
我当时对每张动态照片做了三件事:一是查发布时间和地点标签的对应关系;二是看照片里的细节(比如玻璃反光里的街道、桌上的票据、窗外的塔楼)是否跟前面确认过的地理范围吻合;三是看照片里的局部特征能不能和地图街景对上。
其中最有价值的一张动态照片,是"探姬"发的一张窗外视角:照片里有一根路灯杆、一棵树的树冠形态、以及远处建筑的一角。这三样东西同时出现,几乎就是一个小型的"视觉指纹"。我拿着这张照片在地图街景里沿前面锁定的附近路段一张张比对,最终定位到一栋楼下。
4.3 干扰信息的识别:为什么不能全信动态里的文字
我这个环节踩过一个坑,就是太相信动态里的文字描述了。比如一条动态写着"今天也在老地方加班",我满以为"老地方"肯定是第 1 关定位的那家店,结果去地图里查了附近所有可加班的地点,来回比对了一小时,最后发现"老地方"其实是这家店隔壁街区的一个图书馆——因为她在第 0 关的照片里,背景书架上的书脊标签暴露了图书馆的特征,而这条动态的文字根本没提图书馆三个字。
这个坑总结起来就一句话:动态文字是主观的、口语化的、可能隐藏真意的;动态里的照片、坐标、时间是客观的、可验证的。做题时,以客观数据为准,把文字当成"补充语境",而不是"答案本身"。这也符合真实情报工作的原则——你不能因为目标说了一句"我在家",就断定他一定在家。
4.4 社交平台公开信息的搜索习惯:关注列表和评论区的价值
除了目标自己的动态,我还翻了两个平时容易被忽略的地方:关注列表和评论区。
关注列表可以告诉你目标人物在意什么、关注了哪些本地号、社团、店家的账号——一旦发现她关注了某个书店/咖啡店的官方账号,搜索范围立刻缩小很大一圈。评论区则能在互动里发现朋友对她的称呼、约见的暗号、甚至被回复过的"你上次去的那家店叫什么来着?"这类信息。
不过需要注意,评论区信息量大、且噪音也很大。我的操作习惯是只看目标自己发的评论和被人明确 @ 的动态,不逐条读别人的闲聊,这样能省下至少一半时间。
5. 第 3 关:多条弱线索交叉成一个强答案
第 3 关是这套题的收尾,目标很直接:给出"探姬最终所在的位置",flag 大概率就是某个地点的名字或坐标。但难点在于,从第 2 关动态里只能得出"她常去某区域",怎么把"某个区域"精确定位到"某一栋楼/某一个房间"?
5.1 把所有结论摊开:做一个总的线索汇总表
做到最后一步,我做的第一件事不是继续搜索,而是把前面所有结论汇总成一张表。这张表大致是这样的:
| 关数 | 关键结论 | 证据强度 | 依赖的输入 |
|---|---|---|---|
| 第 0 关 | "探姬"所在城市已确定 | 强(电视塔+连锁店交叉) | 题图 |
| 第 1 关 | 每天早餐在同一家店,坐标已确定 | 强(街景逐元素匹配) | 题图 |
| 第 2 关 | 工作日固定活动区域、常去某图书馆 | 中(动态时间线+照片特征) | 社交账号 |
| 第 3 关 | 最终位置 = ? | 待定 | 全部 |
表格的好处是把"下一步的输入"看得一清二楚。第 3 关的输入是前 2 关的全部输出,而不是新增的某一个素材。
5.2 用"工作日时间线"压缩搜索空间
前 2 关的信息加上第 2 关的时间线,可以推出一张更精确的"日常作息表"。比如说:周一至周五的早上,她大概率出现在早餐店附近;中午的动态配图是办公大堂;傍晚的动态配图是河边;深夜的动态提到"还在改论文"。这已经是一个很规整的"上班族作息"。
把这些作息规律和地理位置叠在一起,可以推断出:她白天大概率在早餐店附近某个写字楼/高校里,晚上会去河边散步,深夜回到住处。那么最终位置只可能在几个候选点里:早上和深夜出现的这一片区域,一定有一个"生活圈核心"。这个生活圈核心就是几个候选地点之间距离最近的交叉点。
5.3 最终位置的"最后一公里"验证
筛选出候选点之后,剩下的就是"最后一公里"验证。我用的办法是回到地图街景,在候选点周边做一次地毯式搜索,寻找所有和动态照片或题图里一致的视觉元素。这一步要尤其注意细节:窗户扇数、墙面颜色、门头台阶数、空调外机的安装位置,每一个都是精细比对的点。
我当时最终确认了一个位置,是因为两点:一是从那里窗户望出去的景色,和动态里那张窗外照片高度吻合;二是楼下店铺招牌和题图里某个视觉特征一致。二者同时命中,就不是巧合了。此时答案已经呼之欲出,flag 按题目要求的格式提交即可。
注意:这里的每条推理都不是"确定性"单一的,而是多个弱线索叠加成强证据。单独一条可能被推翻,但五条汇聚在一个点上,几乎不会有别的解释。这就是交叉验证的力量。
6. 复盘之后:这套题留给我的工具与思考习惯
最后聊一些这套题之外的收获。做 OSINT 题,工具和技术在其次,方法论才是核心。方法论可以总结成一句我经常挂在嘴边的话:一切从公开信息出发,一切结论以交叉验证为准。
6.1 我常用的 OSINT 定位类工具清单
结合这套题,我整理了一份我实际用过的工具和用途,供参考。需要说明的是,工具不在多,顺手最重要:
| 用途 | 我的选择 | 使用场景 |
|---|---|---|
| 图片元数据查看 | 系统自带属性 + 在线 EXIF 查看器 | 快速确认 GPS、拍摄时间、设备型号 |
| 图片反向搜索 | 百度识图、搜狗识图、Yandex 图片搜索 | 分块截取局部特征做反搜 |
| OCR 提取文字 | 离线 OCR 工具 + 网页端 OCR | 识别招牌、票据、截图上的文字 |
| 在线地图 | 高德/百度/腾讯地图的街景与卫星视图 | 地理位置的视觉比对与坐标提取 |
| 坐标工具 | 在线坐标拾取和格式转换 | 把经纬度小数位精确到需求精度 |
| 社交公开信息 | 直接浏览 + 时间排序 + 关键词搜索 | 还原时间线、建立活动规律 |
这里必须强调一个通用习惯:任何工具的结果都只能算"候选线索",不能直接当作答案。搜索引擎会给你相似图片的推测,但你要做的是回到地图或原文里去验证,而不是简单复制搜索结果。
6.2 踩坑记录:时间都浪费在了哪里
复盘这次做题,我浪费时间的三个点很像:
第一,在 EXIF 已经清空的情况下,我还是花了十几分钟反复确认文件里有没有隐藏数据。这个检查可以做,但应该控制在一次,不要反复做。
第二,反向图片搜索时,一开始截了整张图去搜,出来的都是无关图片。后来改成分块搜索,效率才上来。这个"整图 vs 分块"的差别,是很多初识 OSINT 的人最容易忽略的操作差异。
第三,在地图街景比对时,忘了切换时间版本,在错误的年份里浪费了大量时间。这个经验前面说过了,现在每次做地理比对,我都会先把时间轴过一遍。
6.3 边界意识:CTF 里的 OSINT 是演习,不是实战手册
我每次分享 OSINT 内容都会特别说明一句:CTF 里的 OSINT 题目是出题人精心构造的"人工场景",所有人物、账号、地点都是虚构的,目的是训练思维方式。真实的开源情报分析,必须严格遵守法律法规和平台规则,不能使用任何非公开手段,也不能把技术用于刺探他人隐私。
这也是我在做这套题时反复告诫自己的——题目里越容易获得的"信息",越是出题人希望我发现的信息;而现实世界中,每个人的隐私边界都需要被尊重。把 CTF 里学到的分析思路用到正规的渗透测试、事件溯源、威胁情报等合规工作中,才是这套题真正有价值的地方。
做完这套「探姬去哪了」,最大的收获其实不是那几个 flag。我发现自己从此看照片的习惯变了:先看文件属性,再看画面里的招牌、路牌、反射倒影;到一个新城市,会下意识地注意路灯样式和公交站牌的配色。这些习惯在 CTF 之外几乎无用武之地,但一旦再遇到任何"找地点"的题目,我至少知道从哪里下手。这就是这类型题训练的意义——它不会让你学会什么惊天动地的技能,但会让你对信息多一份敏感,对结论多一份谨慎。
