背景:你是西岸科技公司(一家机密国防与研发承包商)的安全分析师。今天清晨,内部监控系统标记出高级研究员奥利弗·迪尔工作站发出的异常网络活动。在访问该机器时,桌面上发现了一封勒索信,暗示敏感项目数据已被窃取并加密。你的任务是调查此次事件:识别攻击者如何获得访问权限,追踪他们的行动,恢复任何被盗数据,并消除威胁。时间紧迫;西岸科技最敏感技术的完整性可能面临风险。

提供的条件:

  • 一个工作站环境。你已获得SSH访问受影响员工的工作站。您可以从攻击盒(或您连接到网络的个人机器)访问此工作站。VPN) 通过:
    ssh o.deer@xxx.xxx.xxx.xxx 密码:xxxxxxxxx
  • 一位可靠的 AI IR 安全助手,配备了专门构建和设计的“工具”,旨在帮助您应对本次挑战中的繁重任务。这些工具无需您手动触发,我们的 AI 非常聪明,能够根据提示上下文智能判断何时应触发这些工具。部分工具可能会提示何时需要向 AI 寻求帮助,并按调查过程中可使用的先后顺序在“可用工具”部分展示。您可以像使用聊天机器人一样简单地使用它。另一个很酷的功能是,该 AI 部署在您正在调查的工作站同一系统上,因此可以访问您能访问的所有文件,这意味着您可以在查询中提供文件路径。可通过以下地址访问该 AI:http://xxx.xxx.xxx.xxx:7860/?__theme=light

任务 是找到攻击者攻击痕迹、并且攻击者遗留了“工作记录”,找到加密文件中的包含的flag


这里我使用的是AttackBox,连接进去后,打开目标机器,上述所说的工作站环境,并且该环境在7860端口部署了一个AI助手,并且有相关工具

先ssh登录到被攻击的主机

调查伊始,我们需要做的是找到一些记录了异常网络活动的文件,这里想到的是寻找pcap文件,并且题目提示了我们攻击者遗留了工作笔记在pcap文件中。

PCAP(Packet Capture)文件是一种标准网络数据包捕获文件格式,用于存储网络通信中的原始数据包信息。它广泛用于网络诊断、分析和安全取证,常被 Wireshark、tcpdump 等工具读取。PCAP文件结构包含全局文件头、数据包头和数据内

全局寻找pcap文件

find . -type f -name "*.pcap"

紧接着在相关目录文件查找可疑文件,可以看到这里的目录都为2025-06-xx,可以对每个目录ls -la

在对 /2025-06-17这个目录执行命令时可以看到有一个文件大小明显大于其他文件,意味着其中的内容更多,可能就是记录着攻击者攻击痕迹的网络数据包文件

可以执行 strings ./*来对该目录下的二进制文件提取可读的ASCII文本

当然这里讲到的是AI助手可以怎么帮助到取证过程,我们可以让AI助手来重组这个数据包

导航至AI助手输出目录,并查看重组后的文件内容

重组后数据包主要内容

大致理解其意思就是 攻击者利用提示词注入 最后获取到了敏感信息 其中 westtechvictim1疑似为加密密钥,攻击者强调了这个单词的重要性

尝试解密文件

可以看到有关于flag的信息 cat thm_flags_guide.txt

在 thm_flags.txt 中的 500 个 base64 编码flag中,真实flag恰好包含 3 个介于 10 到 99 之间的质数

可以让AI帮助分析

在我第一次做这个靶机的时候,我这边AI一直告诉我找不到文件,所以编写了一个python脚本来查找flag,在后面补博客的时候,重新开的机器输出了flag。

import base64

def is_prime(n):
    if n < 2:
        return False
    for i in range(2, int(n ** 0.5) + 1):
        if n % i == 0:
            return False
    return True

with open("/dev/shm/home/o.deer/westtech_projects/thm_flags.txt", "r") as f:
    for line in f:
        line = line.strip()
        try:
            decoded = base64.b64decode(line).decode()
        except:
            continue

        if not decoded.startswith("thm{") or not decoded.endswith("}"):
            continue
        nums_str = decoded[4:-1].split(",")
        if len(nums_str) != 5:
            continue

        try:
            nums = [int(num) for num in nums_str]
        except:
            continue

        prime_count = sum(1 for n in nums if is_prime(n))


        if prime_count == 3:
            print(f"finded: {decoded}")
            break

两个结果相同

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐