ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

我爱Linux CTF取证实战:从镜像分析到提取flag全流程

2026/10/1 13:06:57 拓冰建站 浏览量
我爱Linux CTF取证实战:从镜像分析到提取flag全流程 1. 拿到题目先别慌整体思路拆解“我爱Linux”这道题躺在BUUCTF的Misc分类里有段时间了乍一看名字像是给Linux初学者灌鸡汤实际上手才知道它考的是你能不能把一个Linux系统当成“案发现场”去排查。题面往往只丢给你一个文件没有太多提示很多人第一反应是拿记事本打开看看半天全是乱码然后就卡住了。这类题在CTF里有个专门的说法叫Linux取证核心目标就是让你通过磁盘镜像、日志文件、命令历史这些零碎信息把出题人埋进去的flag挖出来。跟Web题直接打漏洞、Reverse题拖到IDA里逆向不一样Misc取证题更贴近真实世界的安全运维场景一台Linux机器被人动过手脚你作为排查人员要从文件系统里找到攻击者留下的痕迹。我复盘这道题的时候把完整思路拆成了五个层次按顺序走完基本不会漏线索识别文件类型搞清楚手里拿到的到底是什么东西挂载或解包让镜像里的文件系统变得可读搜集系统基本信息包括用户、内核版本、发行版类型检查用户痕迹重点是shell历史、计划任务、最近访问文件全文搜索flag特征配合删除文件恢复工具兜底这五步看起来简单但每一步都有对应的Linux命令和细节坑。比如挂载镜像时权限不够怎么办历史命令文件被清空了去哪找残留flag藏在 compressed 文件里怎么发现。文章后面我会逐个展开先把框架立住。说句实在话这道题对有Linux基础的人很友好因为它考的都不是偏门技巧全是运维日常会碰到的操作。但对纯Windows环境入门CTF的新手来说第一个坎就是Linux命令不熟第二个坎是不理解文件系统的布局所以做题过程本身就是一次很扎实的Linux实战训练。2. 环境准备Kali虚拟机与高频命令清单做“我爱Linux”之前先把工作环境搭好。我推荐直接用Kali Linux的虚拟机理由很简单大部分Misc取证工具在Kali里预装好了省去一个个编译安装的时间。如果你主力机是Windows用VMware或VirtualBox装一个Kali分配2核CPU和4G内存就够跑本题了。装好系统之后进入终端先用几条命令确认基础环境uname -a cat /etc/os-release which file strings grep mount binwalk foremost这几条命令分别确认内核版本、发行版信息以及常用工具是否可用。实测中如果binwalk或foremost没装执行apt install binwalk foremost补上就行。2.1 高频命令速查先掌握这10个就够用“我爱Linux”涉及的Linux命令不算多但每一条都值得认真理解。我整理了一份高频命令清单做题前过一遍效率会高很多命令核心用途本题典型场景file判断文件真实类型看题目压缩包解出来的是什么格式ls -la列出包括隐藏文件在内的所有文件找.bash_history、.secret这类隐藏线索strings提取文件中的可打印字符串在二进制或ramdisk里搜flaggrep -r递归搜索文本内容全盘搜flag、ctf关键字mount挂载文件系统把磁盘镜像挂到本机目录cat查看文件内容读配置文件、flag文件find按名字或属性查找文件定位可疑文件tar/unzip解包常见压缩格式解开题目给的第一层压缩包history查看当前shell的历史命令模拟排查别人动过的系统extundelete恢复ext系列文件系统已删除文件出题人删掉flag后的补救你先别急着把命令背下来理解每个命令在“排查”场景下怎么用比死记选项更重要。比如strings加| grep flag这种管道组合才是做题时真正的常态。2.2 为什么推荐在Kali里做而不是直接Windows工具一把梭有人可能会说Windows下用WinHex、DiskGenius也能看镜像何必装个虚拟机这么麻烦。这个想法我以前也有过被现实教育了两次之后彻底改观。Linux取证的关键动作是“挂载文件系统”也就是把镜像里的ext4分区直接当成一个目录来浏览。Windows原生不认识ext4你得额外装第三方驱动或软件而且很多只读挂载工具对损坏镜像的容错很差一遇到异常分区就直接罢工。Kali原生支持ext2、ext3、ext4、xfs等主流文件系统mount命令一条搞定遇到问题还能方便地用fsck修复整个排查链路是通的。再有一个原因题目环境本身就是Linux你在Kali里操作时自然而然会接触到目录结构、权限体系、命令管道这些知识点做完题积累的经验可以无缝迁移到真实的Linux运维里。我见过不少新手在Windows下用工具点点点把题做出来了问他为什么这么操作答不上来换个类似的题又不会了。这不是做题是背答案。3. 核心实操镜像分析与信息搜集环境准备好之后就进入正式做题环节。以下步骤以“题目给的是一个磁盘镜像文件”为例展开这是“我爱Linux”最常见的出题形式。如果拿到的是tar包或core dump文件处理思路类似我会在第四部分补充说明。3.1 第一步识别文件类型别被扩展名骗了拿到题目压缩包先解压tar -xvf 我爱Linux.tar.gz解出来通常是一个没有扩展名或者扩展名很迷惑的文件比如叫linux或flag.img。此时千万先别急着改后缀直接用file命令看真实类型file linux输出可能是Linux rev 1.0 ext4 filesystem data也可能是DOS/MBR boot sector还有可能是gzip compressed data。这一步决定了后面用什么工具链。我见过有人拿到ext4镜像非要先用WinHex打开看到一堆十六进制就懵了。正确做法是识别出ext4之后直接进入挂载环节。如果输出提示是压缩数据就继续解压一层直到露出真正的文件系统镜像为止。注意file命令识别的是一段数据的“特征头”不是万能的。个别镜像被二次打包或加密后file给出的结果会有误导性这时可以辅助用binwalk扫描一下文件结构。3.2 第二步挂载镜像让文件系统可读识别出ext4镜像后把它挂载到本地目录mkdir /mnt/linux mount linux /mnt/linux ls /mnt/linux这里有两个高频坑我先提前说一下第一个坑是权限不足普通用户执行mount会提示only root can do this需要用sudo。第二个坑是挂载后显示只读这往往是因为镜像本身是只读的或者文件系统有日志未恢复可以用mount -o loop,ro linux /mnt/linuxloop选项让镜像作为块设备挂载ro表示只读避免做题过程中意外修改损坏镜像。如果你对镜像文件系统完整性存疑可以先把镜像复制一份再挂载副本反正镜像一般不大。挂载成功后大概率会看到以下标准目录bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var看到这棵树思路就要立刻切换到“排查一台陌生Linux”模式了。3.3 第三步按目录逐层排查优先看敏感位置照我的经验排查顺序建议是home - root - etc - var - tmp也就是先看用户目录再看系统配置最后看临时文件。ls -la /mnt/linux/home/ ls -la /mnt/linux/root/-a参数很关键普通ls看不到以点开头的隐藏文件而这道题的线索经常就藏在隐藏文件里。如果home目录下有个用户叫linux就进到/home/linux/里仔细翻ls -la /mnt/linux/home/linux/ cat /mnt/linux/home/linux/.bash_history.bash_history是这个题目的高频考点。出题人模拟了一个用户操作Linux的过程历史命令里可能残留了创建flag、移动flag、甚至删除flag的记录。你哪怕只找到一条mv flag.txt /tmp/也能顺藤摸瓜找到位置。我碰到过一种变体历史命令被故意清空了但/root/.bash_history或者/home/user/.zsh_history里还有残留所以两端都查一遍最稳妥。3.4 第四步检查系统关键配置别漏掉用户与计划任务信息搜集做到一半记得去/etc目录里看看账号体系cat /mnt/linux/etc/passwd cat /mnt/linux/etc/shadowpasswd文件看有哪些用户shadow文件里存的是密码哈希。在真实取证里攻击者经常给自己留后门账号CTF题也喜欢模仿这个套路比如添加一个test用户或者backdoor用户。如果发现异常用户就去它的 home 目录翻一翻。计划任务也是出题人喜欢藏东西的地方cat /mnt/linux/etc/crontab ls -la /mnt/linux/etc/cron.d/ cat /mnt/linux/var/spool/cron/crontabs/*如果发现一个fetchflag.sh每隔几分钟执行一次的定时任务那么脚本内容里大概率直接写着flag路径或者脚本本身可以执行输出flag。3.5 第五步全盘搜索flag特征覆盖盲区目录翻得差不多了不管找没找到都建议跑一次全盘特征搜索防止漏掉藏在犄角旮旯的线索grep -r flag /mnt/linux/ --include*.txt --include*.sh --include*.py 2/dev/null这条命令可以找出文本类文件里的flag字样。如果出题人把flag做成图片或压缩包文本搜索就扫不到这时候换个思路用find按时间或文件类型找find /mnt/linux -name *.png -o -name *.jpg -o -name *.zip -o -name *.tar.gz 2/dev/null这个方法可以快速定位非文本文件。实际操作中我遇到过flag被写进一张PNG图片的元数据里也遇到过塞进一个zip压缩包并加了弱密码。对待这些情况图片就用strings提取信息压缩包可以尝试直接解压或爆破弱口令。3.6 第六步删除文件恢复出题人的“最后一层防线”如果上面几步做完还没有flag大概率是出题人把flag文件删掉了这时候就得请出extundelete这类恢复工具。恢复前先把镜像卸载避免文件系统还在挂载状态时进行操作umount /mnt/linux extundelete linux --restore-all执行后会在当前目录生成RECOVERED_FILES目录里面是扫描到的已删除文件。恢复结果跟文件系统类型、删除后写入情况有关不一定100%成功但CTF镜像通常很小删除后没有大量写入恢复成功率还是很高的。我实际操作时发现用extundelete --restore-all恢复出来的文件可能有一堆乱码名称不要慌逐个file类型确认再用strings扫一遍大概率有惊喜。3.7 解题全流程速查表为了方便复盘我把整个解题流程整理成了一张表做题时可以直接对照操作阶段核心命令目标线索类型识别file 镜像判断是否ext4、gzip等格式挂载系统mount -o loop,ro 镜像 /mnt/linux让目录可访问用户痕迹cat .bash_history历史命令残留系统配置cat /etc/passwd、cat /etc/crontab异常用户和计划任务全局搜索grep -r flagflag特征字符串删除恢复extundelete 镜像 --restore-all被删除的flag文件4. 常见问题与排查技巧实录做题做得多了你会发现很多坑是共通的。下面这些问题是群里和评论区里被问得最多的我把答案和当时踩坑的过程一起写出来省得你再走一遍弯路。4.1 挂载提示“wrong fs type”怎么办这个提示通常意味着内核缺少对应文件系统的驱动或者镜像压根不是文件系统镜像。先执行dmesg | tail看看内核日志有没有更具体的报错然后确认file命令的输出。如果镜像确实是ext4但系统不识别可以尝试强制指定类型mount -t ext4 -o loop,ro linux /mnt/linux如果还是失败就用binwalk linux看看是不是有额外的偏移量。个别镜像前面被塞了几百字节的垃圾数据导致内核识别不到ext4超级块这时候mount -o loop,ro,offset偏移量就能解决。4.2 strings扫出来的内容太多看不完怎么办很多人习惯直接strings 文件 | grep flag这是对的但总有人漏掉信息原因是flag关键字可能有大小写变形或者被拆成碎片。推荐几个进阶搜法strings -n 6 文件 | grep -iE flag|ctf|key|secret|\{-n 6表示只提取长度不小于6的字符串能过滤大量无意义的短字符。-iE是忽略大小写并支持扩展正则。如果你连{都没搜到就缩小范围从题目描述里找提示词。4.3 教程里的命令敲了没反应多半是没进对目录有一个很低级但很多人犯过的错挂载完镜像忘了切目录直接在宿主机根目录下开始翻找。排查时要时刻记住镜像是挂载在/mnt/linux下的你要找的东西都在这个挂载点里面而不是在Kali本机的/home、/root下。我建议做题时开两个终端一个专门看镜像里的内容一个用来执行工具命令避免搞混当前目录。4.4 如果题目给的是core dump文件不是镜像这道题在BUUCTF的某些版本里会给core dump文件也就是进程崩溃时的内存快照。core dump不能挂载但可以用strings和grep直接扫因为进程内存里往往残留着环境变量、命令行参数、配置文件内容flag经常直接躺在里面。处理思路file core strings core | grep -i flag如果strings输出里有大量二进制乱码先用cat /proc/sys/kernel/core_pattern这类信息了解core的生成方式再决定要不要用gdb加载分析。不过对Misc题来说strings | grep已经能解决80%的问题。4.5 恢复出来的文件打不开怎么办extundelete恢复的文件偶尔会损坏大概率是FAT表或inode信息不完整。这种情况下可以试试另一个工具ext4magic它在某些场景下对已删除文件的恢复效果更好ext4magic linux -r -d recovered/实在不行还有终极方案把镜像里未分配空间整体导出再用foremost按文件特征去“雕刻”数据块重组文件dd iflinux ofunallocated.dd bs4096 foremost -t all -i unallocated.dd这个过程比较暴力但胜在覆盖面广适合最后兜底。4.6 做完了发现没有flag问题出在哪我复盘过很多次这类情况基本可以归纳成三种原因信息搜集不完整有些隐藏文件没看到比如.bash_history、.secret这类需要ls -la才能发现的内容flag藏在压缩包或图片里没被文本搜索覆盖到出题人删除了文件且没有留下直接路径线索漏了删除文件恢复这一步一个稳妥的习惯是每到一个目录就ls -la看到任何可疑文件都先用file确认类型再决定下一步动作。不要看文件名觉得没戏就跳过出题人不会把flag命名为flag.txt等你来拿反而经常起个readme、note之类的迷惑性名字。提示做题过程中建议保留一份操作日志也就是把敲过的命令和输出记录下来。不仅方便复盘写writeup时也能直接用一举两得。5. 这道题之外Linux取证的实际价值做完“我爱Linux”别急着做下一道题停一下想想这道题练的是什么。表面上是解flag实际上练的是对Linux系统布局的熟悉程度和信息排查的条理性。真实世界的安全事件里服务器被入侵后第一件事就是做取证分析。攻击者留下了哪些后门账号、有没有改计划任务、删除了什么文件、历史命令里有没有异常操作这些排查手法跟这道题几乎完全一致。只是现实系统比CTF镜像大得多、复杂得多不可能用grep -r flag暴力搜索而要依靠时间线分析、日志关联、文件完整性校验这些系统化手段。当然CTF题也有它的局限。镜像体积小、线索集中属于“刻意布置过的现场”真实服务器的排查要面对海量噪声难度高好几个量级。但作为入门训练它的价值在于让你建立“从文件系统还原事件经过”的思维模型这个模型是可迁移的。我再分享一个个人练习习惯每做完一道Linux取证题就把用到的命令整理成自己的速查笔记并且标注每一步是在回答“什么问题”。比如ls -la回答的是“目录里有没有隐藏文件”history回答的是“这个用户之前执行过什么操作”。积累多了之后再遇到新镜像思路会快很多因为你不再是一条命令一条命令地试而是带着问题去找答案。如果有时间还可以把题目镜像里用到的工具全部从源码编译一遍比如extundelete、foremost熟悉它们依赖什么库、处理流程是什么。这个过程有些枯燥但对深入理解文件系统结构非常有帮助。我当初就是被一道恢复删除文件的题逼着去看了ext4的inode原理从那之后再遇到文件系统问题心里就踏实多了。