【CTF-MISC-数据处理与分析】使用powershell搜索大量文件包含的文字
📅 2026/7/24 22:33:21
👁️ 阅读次数
📝 编程学习
题目
2025春秋杯网络安全联赛冬季赛\MISC\数据处理与分析\大海捞针
https://match.ichunqiu.com/index?k=UWQFNQw_C2pXMlVwUjZQYlx-UzFaOQozBGIHPlRmDDVRbgQzXG4KbgMxAWc
某核心服务器的备份数据被非法导出,其中包含上千个不同格式的杂乱文件。据可靠情报,Flag就隐藏在这些文件中的某处。由于文件数量巨大,手动查找无异于大海捞针。请利用你的自动化处理能力,在海量噪音中找回这段丢失的Flag。
附件下载:https://pan.baidu.com/share/init?surl=SgUN5bfIiZrENBd409av_A
提取码:GAME
解题思路
使用如下命令,搜索
Get-ChildItem-Recurse-File|Select-String-Pattern'flag\{[^}]+\}'-CaseSensitive搜索结果
\\raidrive-administrator\webdav服务器\其他\考证\A网络安全类比赛\2025春秋杯网络安全联赛冬季赛\MISC\数据处理与分析\大海捞 针\大海捞针-40bbf257393560cf199300d4488e853e\leak_data(2)\dir_06\internal_resource.png:5:# SECRET_DATA: flag{9b3d6f1a-0c48-4e52-8a97-e2b5c7f4d103}验证
直接打开发现是一张图片
用记事本打开,发现了末尾的flag
答案
flag{9b3d6f1a-0c48-4e52-8a97-e2b5c7f4d103}
附录:搜索命令解释
命令详细解析
该命令用于在递归遍历所有文件的同时,搜索符合特定格式的 flag 字符串,具体分解如下:
1. 第一部分:Get-ChildItem -Recurse -File
Get-ChildItem:PowerShell 中用于列出目录内容的核心命令(类似 Linux 的ls)。-Recurse:递归遍历当前目录及其所有子目录,确保搜索覆盖所有嵌套文件夹。-File:仅筛选出文件对象,排除目录本身。这样可以避免对目录名进行搜索,只关注文件内容。
2. 管道操作:|
- 管道符号将前一个命令的输出(所有递归找到的文件对象)传递给后一个命令,作为其输入。
3. 第二部分:Select-String -Pattern 'flag\{[^}]+\}' -CaseSensitive
Select-String:PowerShell 中用于在文本中搜索字符串的命令(类似 Linux 的grep)。-Pattern 'flag\{[^}]+\}':指定搜索的正则表达式模式,含义如下:flag\{:匹配文本 “flag{”(\{是对大括号的转义,因为大括号在正则中是特殊字符)。[^}]+:匹配一个或多个非右大括号的字符([^}]表示“不是右大括号”,+表示“一个或多个”)。\}:匹配右大括号}(同样需要转义)。- 整体效果:匹配
flag{...}格式的字符串,其中...是任意非右大括号的内容,直到遇到}结束。
-CaseSensitive:大小写敏感模式,仅匹配小写的 “flag”,避免误匹配 “FLAG” 等变体。
工作流程
- 递归扫描:
Get-ChildItem -Recurse -File递归遍历所有子目录,收集所有文件路径。 - 内容搜索:
Select-String对每个文件的内容执行正则匹配,查找符合flag{...}格式的字符串。 - 结果输出:当找到匹配时,输出包含匹配内容的文件路径、行号和具体匹配文本。
为什么能在二进制文件中找到 Flag?
PNG 是二进制文件,但 PowerShell 的Get-Content(Select-String隐式调用)会尝试按文本模式读取文件。对于二进制数据,无法解析的部分会被忽略,而能解析为文本的部分(如文件末尾的注释或嵌入文本)会被正常处理。因此,即使 Flag 嵌入在 PNG 二进制文件中,只要以文本形式存储,仍能被该命令捕获。
示例效果
该命令在执行时,会输出类似以下结果:
\\path\to\file.png:5:# SECRET_DATA: flag{9b3d6f1a-0c48-4e52-8a97-e2b5c7f4d103}其中包含:
- 文件路径:
\\path\to\file.png - 行号:
5(匹配内容所在行) - 匹配文本:
# SECRET_DATA: flag{9b3d6f1a-0c48-4e52-8a97-e2b5c7f4d103}
核心优势
- 全目录覆盖:
-Recurse确保无遗漏搜索所有子目录。 - 精确匹配:正则表达式
flag\{[^}]+\}精确锁定 Flag 格式,避免误报。 - 高效过滤:
-File排除目录,减少无效搜索,提升速度。
编程学习
技术分享
实战经验