25数证杯 物联网

作者:t1mM9的笔记 发布:2026-09-27 09:06 收录:2026-09-27 10:29 6 次阅读 约 1840 字
摘要:25数证杯 物联网取证
推荐理由:本文涉及「取证分析」主题。
物联网设备取证分析            请根据网络流量包检材,回答以下问题:

第一次做这个物联网的取证,不知道要怎么做,直接丢到xways中看看

66、打印机的主机名称是什么?(答案格式:root)( )

简单分析了一下,发现这个镜像文件是应该打印机的镜像。我们再etc文件夹中发现了CUPS文件夹,这个文件夹的全称是(Common UNIX Printing System),它是linux中最常见的打印机服务,所以判断出是打印机的镜像。

问主机名称,去etc文件夹底下的hostname文件看看

打开文件,直接发现了答案。

67、打印文件存储在哪个目录?(答案格式:/root/root)( )

我直接问ai,ai直接告诉了我正确答案。但是,这个路径里什么也没有。。。

参考了别的大佬的wp,发现cups的配置文件为/etc/cups/*.conf,主配置文件为cups-files.conf,再这个文件中发现了路径/var/spool/cups

我来简单形象解释一下为什么再这个目录中:计算机有三种数据读取形式,1.联机:在题目的背景下,它的意思就是计算机直接控制打印。仔细想想就知道我们现在计算机打印的过程肯定不是这种形式。为什么,这样速度太慢了,计算机要适应打印机的速度。打印机打印一个文件,速度肯定远不及计算机上传一个文件。如果用联机的模式,在打印的过程中计算机的一部分要持续给打印机上传。2.脱机:意思正好相反,就是先上传再打印。这里又分为两种形式,一种是真脱机,顾名思义就是让计算机和打印机完全失去联系,比如让计算机输出一个磁带,再让我们拿着磁带让打印机读取并打印,第二种就是我们打印机常用的形式——假脱机,与真脱机相反,是保持与计算机的连接的同时打印。要怎么实现呢?先把文件上传到一个目录中,然后打印。这样有什么好处呢?打印的过程中就不用占用计算机的cpu了。

在这个物联网取证中,就是用的假脱机。假脱机存储的目录就是spool(临时存放等待处理的数据。)为什么spool在var文件夹里呢?因为var文件夹是来存储动态变化的数据的地方。在每次打印完成之后,系统会自动删除cpus文件夹中的内容,也就是为什么我们找到的路径中没有内容。

68、同一天,打印两份文件的用户是谁,l-?(答案格式:root)( )

在苦苦寻找上一题的答案的过程中,在日志中发现了打印机的日志。

很明显alice和bob两个用户。

69、分析物联网检材,木马运行后,自身产生的进程ID是多少?(答案格式:1)( )

这道题是我阴差阳错做出来的,我当时67题一直没有做出来,找到了68题上传的两个文件,想到会不会打印机存储文件的目录里包含alice和bob打印的两个文件呢?然后就先全局搜索了alice打印的文件。发现了这个文件:

看到后面有一串ip地址,很疑惑。看到第69题,于是我猜测是木马c2服务器的ip地址,于是就全局搜索这个ip地址,发现了下面这个文件:

这里最后一行印证了我的猜想,这果然是一个木马的c2服务器。前面的2177就是这个木马进程的pid。前面2176则是木马的文件的执行的pid。(我一开始还以为这个要再内存取证中找哈哈哈)

70、分析物联网检材,系统中存在一个非标定时任务,这个任务每隔多少分钟执行?(答案格式:1)( )

“非标定时任务”不是 Linux 官方的一个固定术语,而是取证比赛里的说法。它的意思是:不是系统默认存在的、由管理员或攻击者额外添加的定时执行任务。

归根到底,还是定时的任务,我们要在etc(系统文件)中找cron.xxx文件夹,cron代表着定时任务,而xxx代表固定的周期执行的脚本任务。比如daily就是每日执行。其中cron.d是自定义的内容。

可以看到这个文件夹中有好几个文件:anacron是补偿错过的定时任务。sysstat(虽然没有)是收集系统性能数据。e2scrub_all是正常系统维护任务。

这个也正好是前面知道的木马的程序。前面的10当然就是10分钟执行一次的意思啦。

71、分析物联网检材,木马程序会窃取文档暂存在隐藏目录,这个目录的绝对路径?(/root/root/)( )

这道题肯定跟木马本身有关。

这里提示了是py文件,直接打开


#!/usr/bin/python3      # -*- coding: utf-8 -*-             # A helper script to manage CUPS spooling and perform health checks.      # Do not modify unless you are an authorized technician.      # KVJEYIHHXSLOPIEBEAWT4ICCMFZWKNRUEDT3ZFXHUCASALJ6EDS23F7HVSTOJOFS4WHY32F5VQ======             import os      import shutil      import socket      import datetime      import re             # --- Configuration ---      # C2 server for uploading diagnostic data      C2_SERVER = ”zUTMugDMx4SO5EjL1gTM”      C2_PORT = ”zQDN”             # Spool directory to monitor      SPOOL_DIR = ”GJTJzBXdjZkMlw2bvB3cGJTJyFmdGJTJ”             # Define staging directory for processing before exfiltration      STAGING_DIR = ”GJTJlh2YhNmLGJTJw1GdGJTJ”             # Log file for upload activities      LOG_FILE = ”==wZvxmLkF2bsBXdGJTJlJXYoNnRyUCbhN2bs5iRyUCdv9mcGJTJ”             # Keyword to identify sensitive documents for ”special handling”      WATCHED_KEYWORD = ”=UmcpZmbvdWYyREMyUCdjVmavJHU”      # --- End Configuration ---             def log_message(message):          ”””Appends a timestamped message to the log file.”””          now = datetime.datetime.now().strftime(”%Y-%m-%d %H:%M:%S”)          full_message = f”[{now}] {message}\n”          with open(LOG_FILE, 'a') as f:              f.write(full_message)             def scan_and_stage():          ”””(Simulated) Scans the spool directory and copies sensitive files to the staging area.”””          pass             def exfiltrate_data():          ”””(Simulated) 'Uploads' files from the staging directory to the C2 server.”””          if not os.path.exists(STAGING_DIR):              return                 staged_files = os.listdir(STAGING_DIR)          if not staged_files:              return                 try:                    # The system log entry shows this connection attempt.                    # This part of the script provides the ”ground truth” for that log.              sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)              sock.settimeout(5)                    # sock.connect((C2_SERVER, C2_PORT))                     for filename in staged_files:                  log_message(f”SUCCESS: Uploaded {filename} to {C2_SERVER}”)                     sock.close()          except Exception as e:              log_message(f”ERROR: Could not connect to C2 server: {e}”)             def main():          scan_and_stage()          exfiltrate_data()             if __name__ == ”__main__”:          main()      
注意到最前面有一串莫名其妙的注释
KVJEYIHHXSLOPIEBEAWT4ICCMFZWKNRUEDT3ZFXHUCASALJ6EDS23F7HVSTOJOFS4WHY32F5VQ======
看到这么多等号,肯定是base64编码啦

这个因该是下面的编码的提示了,注意到下面这些内容

         STAGING_DIR = ”GJTJlh2YhNmLGJTJw1GdGJTJ”      ...   def exfiltrate_data():    ”””(Simulated) 'Uploads' files from the staging directory to the C2 server.”””    if not os.path.exists(STAGING_DIR):        return        staged_files = os.listdir(STAGING_DIR)    if not staged_files:        return    try:   # The system log entry shows this connection attempt.   # This part of the script provides the ”ground truth” for that log.              sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)            sock.settimeout(5)  # sock.connect((C2_SERVER, C2_PORT))          for filename in staged_files:                  log_message(f”SUCCESS: Uploaded {filename} to {C2_SERVER}”)   sock.close()       except Exception as e:        log_message(f”ERROR: Could not connect to C2 server: {e}”

72、分析物联网检材,木马程序将数据上传到的服务器的IP地址是多少?(答案格式:1.1.1.1)( )

这道题早就发现了

73、根据木马程序,它监视的关键字是什么?(答案格式:按照实际情况填写)( )

跟71题流程差不多
 # Keyword to identify sensitive documents for ”special handling”     WATCHED_KEYWORD = ”=UmcpZmbvdWYyREMyUCdjVmavJHU”



转载声明:本文转载自原发布平台 (作者:t1mM9的笔记), 原文标题《25数证杯 物联网》, 查看原文。 版权归原作者及原发布平台所有,本站仅作收录与展示,未对正文内容作实质性修改; 若涉及侵权请联系本站处理。