CTF刷题笔记 - misc方向 - 电子取证 内存分析_ctf 镜像恶意进程分析

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上网络安全知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip204888 (备注网络安全)
img

正文

Recovery

题目描述:Rick got to have his files recovered! What is the random password used to encrypt the files?

首先,我们将恶意进程 vmware-tray.exe 的内存映像 dump 下来

vol.py -f OtterCTF.vmem --profile=Win7SP1x64 memdump -p 3720 -D ./

随后,使用 ILSpy 反编译恶意程序 executable.3720.exe,查看 password 相关代码,可以在 SendPassword 函数中找到 text = 计算机名-用户名 密码

前两个是已知的,计算机名为 WIN-LO6FAF3DTFE,用户名为 Rick,那么我们可以在3720.dmp 中使用 -el 参数全局匹配查找 “WIN-LO6FAF3DTFE-Rick”

strings -e l 3720.dmp | grep "WIN-LO6FAF3DTFE-Rick" -C 5

因此,密码为 aDOBofVYUNVnmp7

Closure

题目描述:Now that you extracted the password from the memory, could you decrypt rick’s files?

之前在Path To Glory 2一问中,在查找与"Rick And Morty season 1 download.exe"相关的字符串时,在排列靠前的结果中可以发现Rick的文件名为 Flag.txt

可以在虚拟内存中进行文件扫描,并按照 “Flag.txt” 进行过滤匹配

vol.py -f OtterCTF.vmem --profile=Win7SP1x64 filescan | grep -i "Flag.txt"

将文件dump下来

vol.py -f OtterCTF.vmem --profile=Win7SP1x64 dumpfiles -Q 0x000000007e410890 -D ./

便于后续识别,将dump下来的文件重命名为Flag.dat

根据如下知识,我们可以通过查看恶意软件的pdb信息来识别勒索软件类型

pdb文件主要存储了如下调试信息:
(1)public, private,和static函数地址。
(2)全局变量的名称和地址。
(3)参数和局部变量的名称及它们在栈中的偏移量。
(4)类型定义,包括class, structure,和 data definitions。
(5)源文件名称和行号。

查看恶意程序中关于pdb的内容

strings executable.3720.exe | grep pdb

可以发现 pdb 文件在hidden-tear目录下,因此可以识别为 HiddenTear 勒索软件

可以使用 HT Decrypter 软件来进行解密,在解密之前,需要移除文件后所有的十六进制 00,并修改文件的后缀为 .locked,放入一个文件夹里面

打开 HT Decrypter 软件,选择放入 .locked 文件的文件夹,输入密码 aDOBofVYUNVnmp7,解密文件

打开解密后的文件,得到flag

[安洵杯 2020]王牌特工

file命令分析文件,是一个ext3文件系统数据

使用mount命令进行挂载

# 在 /mnt 目录下创建挂载文件夹
mkdir /mnt/findme
# 挂载文件
mount findme /mnt/findme
# 查看文件
ls /mnt/findme -al

查看 key.txt 文件,提示使用Veracrypt

使用挂载flagbox文件,密码为:a_cool_key

得到了一个flag,但并非真正的flag

回过头,使用 strings 命令过滤查找关键词 key,可以发现有一些之前未发现的文件,例如cool.key,因此可能某些文件被删除了,需要通过恢复找回

先取消挂载

umount /dev/loop0

然后安装 extundelete 工具

sudo apt-get install extundelete

再次挂载findme文件后,使用 extundelete 工具进行数据恢复

extundelete /dev/loop0 --inode 2

可以发现有一个swp文件,使用 extundelete 工具进行恢复

extundelete /dev/loop0 --restore-file .coolboy.swp

查看恢复后的 .coolboy.swp 文件

cd RECOVERED_FILES
strings .coolboy.swp

base64解码,得到真正的密码

再使用Veracrypt解密flagbox文件,得到flag

[红明谷CTF 2022]MissingFile

题目描述:好像被攻击者入侵了,但是赶到现场的时候,已经只剩下一个空的文件夹了,快照能找到攻击者留下的秘密吗?

首先,查看内存镜像中计算的的所有用户名,使用 hashdump 命令

可以发现除默认用户外,有link3和NewGuest两个用户,由于计算机被攻击者入侵,因此 link3 更有可能是计算机已有用户,而 NewGuest 用户是入侵过程中产生的

根据关键词 NewGuest 扫描文件,可以发现一处可疑路径,同时还可以发现 mimikatz 工具使用的信息

vol.py -f memory --profile=Win7SP1x86_23418 filescan | grep -i NewGuest

使用 mftparser 对内存中的 MFT 条目进行分析,并将结果保存至 mftparser.txt

volatility -f memory --profile=Win7SP1x86_23418 mftparser > mftparser.txt

根据关键词 Hacker,可以发现如下内容

使用010editor,将上述十六进制数据保存为文件 S3cret

DPAPI技术是Windows提供的一种数据保护API,它本质上使用了Windows通过用户自己登录(sids,登录密码等),以及域登录后的一些数据生成的密钥,并且使用内置的算法,对用户指定的数据进行加密。通常Windows上的浏览器历史数据,邮件加密,wifi密码等等都会以这种方式进行数据加密。相关知识要点如下:

DPAPI:
全称Data Protection Application Programming Interface

DPAPI blob:
一段密文,可使用Master Key对其解密

Master Key:
64字节,用于解密DPAPI blob,使用用户登录密码、SID和16字节随机数加密后保存在Master Key file中

Master Key file:
二进制文件,可使用用户登录密码对其解密,获得Master Key

从文件魔数可以看出来,S3cret 文件采用 Windows 系统的 DPAPI 技术进行加密,是一个 DPAPI blob

对采用DPAPI技术加密的数据进行解密,需要获取当前操作系统登录用户对应的 Master Key,而获取 MasterKey 需要知道用户名、密码以及对应的SID,然后利用这些数据生成一个 blob 加密过程中使用的 MasterKey,从而对目标blob进行解密

那么,可以通过 hashdump 和 getsids 命令来查找相关信息

从前述步骤可知用户名是 NewGuest,对密码哈希值进行在线查询(也可以使用Kali中的John)可知为123456

SID则是 S-1-5-21-206512979-2006505507-2644814589-1001

vol.py -f memory --profile=Win7SP1x86_23418 getsids | grep -i NewGuest

使用 mimikatz 工具(以管理员身份运行)检查 S3cret 文件

mimikatz # privilege::debug
mimikatz # dpapi::blob /in:"S3cret"

可以得到 guidMasterKey 为 {470a5148-d8c9-4453-bf41-f0c09d158bfd}

在之前导出的文件中查找,可以得到如下内容

使用010editor,将上述十六进制数据保存为 master.key 文件

然后,在mimikatz中,使用用户密码、SID以及 master.key 文件来生成最终用于解密的 Master Key

mimikatz # dpapi::masterkey /in:"master.key" /sid:S-1-5-21-206512979-2006505507-2644814589-1001 /password:123456

最后,使用 Master Key 来解密 S3cret 文件

mimikatz # dpapi::blob /in:"S3cret" /masterkey:092c4220064c30bc7f8b15d2d48957c4926af0632149b9c08cd87f34fc43aa1204d775bdc6ab429a0d4d0826fb80b08250b125d92913e2f7578cf778073bfe38

十六进制转字符,得到flag

flag{Hide_Behind_Windows}

[鹏城杯 2022]简单取证

对内存镜像进行filescan,按照.zip.jpg.png.txt依次对结果进行过滤

vol.py -f file.raw --profile=WinXPSP2x86 filescan | grep -i .zip
vol.py -f file.raw --profile=WinXPSP2x86 filescan | grep -i .jpg
vol.py -f file.raw --profile=WinXPSP2x86 filescan | grep -i .png
vol.py -f file.raw --profile=WinXPSP2x86 filescan | grep -i .txt

有一个 secret.jpg 文件值得注意

将上述文件 dump 下来,并重命名为 secret.jpg.dat

vol.py -f file.raw --profile=WinXPSP2x86 dumpfiles -Q 0x0000000002325028 -D ./

查看文件内容,是一段base64编码,对文件开头的一段内容进行base64解码,可以发现解码后的内容是zip文件的数据逆序

将 secret.jpg.dat 文件重命名为 secret.jpg 编写脚本,将 secret.jpg 文件中的数据进行base64解码后逆序,然后写入 flag.zip 文件中

import base64
import struct

with open("secret.jpg", "r") as f:
    r = f.read()

lst = list(base64.b64decode(r))
# 将字节列表lst逆序
lst.reverse()

with open("flag.zip", "wb") as f:
    for i in lst:
        # 使用struct模块的pack函数将字节i打包为一个单字节的二进制字符串s
        s = struct.pack('B', i)
        f.write(s)

得到的压缩包需要密码,查看进程树可以发现执行过 cmd,因此,尝试检查 cmd 命令执行历史

vol.py -f file.raw --profile=WinXPSP2x86 cmdscan

得到压缩包密码为:62b041223bb9a

解压 flag.zip 得到 flag.txt 文件,打开其内容类似坐标,猜测可能是二维码中白色颜色快的坐标

编写如下脚本,处理 flag.txt 文件中的(x,y)坐标,生成二维码图片 flag.png

from PIL import Image

# 创建一个新的350x350像素的RGB图像,背景颜色为黑色(0,0,0)
im = Image.new("RGB", (350, 350), (0, 0, 0))

with open("flag.txt", "r") as f:
    # 此时,r包含了一个字符串,这个字符串是"flag.txt"文件的内容
    r = f.read()

# 将字符串r按换行符("\n")分割,得到一个列表lst,列表中的每个元素是文件中的一行
lst = r.split("\n")
for i in lst:
    # 将字符串i按空格分割,取第一个元素并将其转换为整数,赋值给变量x
    x = int(i.split(" ")[0])
    # 将字符串i按空格分割,取第二个元素并将其转换为整数,赋值给变量y
    y = int(i.split(" ")[1])
    # 在图像im的(x, y)位置上设置一个像素点,颜色为白色(255,255,255)
    im.putpixel((x, y), (255, 255, 255))

im.save("flag.png")

执行脚本,生成二维码png图片

扫码得到flag:flag{a6b93e36-f097-11ec-a9b2-5254002d2b31}

[HUBUCTF 2022 新生赛]vmem

对内存镜像进行filescan,按照.zip/.jpg/.png/.txt依次对结果进行过滤

vol.py -f Windows7.vmem --profile=Win7SP1x64 filescan | grep -i .zip
vol.py -f Windows7.vmem --profile=Win7SP1x64 filescan | grep -i .jpg
vol.py -f Windows7.vmem --profile=Win7SP1x64 filescan | grep -i .png
vol.py -f Windows7.vmem --profile=Win7SP1x64 filescan | grep -i .txt

发现3个flag

按照 flag 对结果进行过滤,确认只有3个 flag

将上述三个文件dump下来

# dump flag.txt
vol.py -f Windows7.vmem --profile=Win7SP1x64 dumpfiles -Q 0x000000005eb84f20 -D ./
# 重命名
mv file.None.0xfffffa801418b160.dat flag.txt
# dump flag2.png
vol.py -f Windows7.vmem --profile=Win7SP1x64 dumpfiles -Q 0x000000005d98ecd0 -D ./
# 重命名
mv file.None.0xfffffa80145fb770.dat flag2.png
# dump flag3.txt
vol.py -f Windows7.vmem --profile=Win7SP1x64 dumpfiles -Q 0x000000005e7f5070 -D ./
# 重命名
mv file.None.0xfffffa801323c7d0.dat flag3.txt

查看flag.txt,得到flag第一部分:NSSCTF{W0w_y0u_G3t

查看flag2.png,得到flag第二部分:_th3_P4sSWd

查看flag3.txt,得到一段python脚本,且已知输出,需要进行逆向来得到flag的第三部分

flag3 = open('flag3.txt').read()
flag_enc = ""
for i in range(len(flag3)):
    flag_enc += chr(ord(flag3[i]) ^ 0xf - 6)
print(flag_enc)
# }al):{m)yh{})fo)oehn)`z)3)VPF|V^hg](t

编写如下脚本得到flag第三部分:_YOu_WanT!}

flag_enc = "}al):{m)yh{})fo)oehn)`z)3)VPF|V^hg](t"
flag = ""
for i in flag_enc:
    flag += chr(ord(i) ^ 9)
print(flag)

因此,完整flag为:NSSCTF{W0w_y0u_G3t_th3_P4sSWd_YOu_WanT!}

首先,发现一个压缩文件 flower.zip

将 flower.zip 文件dump下来

vol.py -f GULF-PC-20220321-064240.raw --profile=Win7SP1x64 dumpfiles -Q 0x000000001e5cb070 -D ./
mv file.None.0xfffffa8008eee3a0.dat flower.zip

其次,发现一个 txt 文件 pwd.txt

将 pwd.txt 文件dump下来

vol.py -f GULF-PC-20220321-064240.raw --profile=Win7SP1x64 dumpfiles -Q 0x000000001ddb8f20 -D ./
mv file.None.0xfffffa8007226f10.dat pwd.txt

解压缩flower.zip,会发现压缩包中也包含一个pwd.txt,且内容和我们 dump 下来的文件一致

打开 pwd.txt 信息如下:

KVKFMU2NNN4HKTJSGVGWGVSWOVKVORSKKZUUCZY=

解base32得到:

UTVSMkxuM25McVVuUWFJViAg

继续解base64得到:

Q5R2Ln3nLqUnQaIV

再继续解换表base64得到密码:

pwD_1s_h3re!

可以使用 cyberchef 在线工具快速操作

使用上述密码解压image.rar,得到一个包含36张图片的文件夹

结合之前解码 array.txt 文件得到的数据,此处应该是需要我们进行拼图,拼图的顺序就是数组中的数字顺序

编写如下脚本完成拼图

from PIL import Image  
import os  

image_order = ['32.png','24.png','6.png','28.png','15.png','31.png',
               '7.png','23.png','13.png','27.png','30.png','33.png',
               '12.png','8.png','5.png','26.png','29.png','16.png',
               '34.png','22.png','2.png','14.png','9.png','17.png',
               '21.png','1.png','19.png','10.png','4.png','36.png',
               '35.png','25.png','11.png','20.png','3.png','18.png']

# 打开第一张图片以获取单个碎片的尺寸
with Image.open(image_order[0]) as im:  
    width, height = im.size  
    output_image_size = (6 * width, 6 * height)  

# 创建一个新的空白图片,用于拼接所有的碎片
output_image = Image.new('RGB', output_image_size)  

# 按照给定的顺序拼接所有的碎片
for i, filename in enumerate(image_order):  
    with Image.open(filename) as im:  
        # 计算该碎片在输出图片中的位置  
        x = (i % 6) * width  
        y = (i // 6) * height  
        # 将该碎片粘贴到正确的位置上  
        output_image.paste(im, (x, y))  
  
# 保存输出图片
output_image.save('combined_image.jpg')

得到的combined_image.jpg是一张包含很多字符的图片

按照从左到右,从上到下,对图片中的字符进行提取,得到:

58s4vb6rt4pt5r32yd6ht5u656555r6796524vi69r2yd5om6w0

使用Twin-Hex在线解密(Twin-Hex Cypher encoder and decoder from CalcResult Universal Calculators),对从图片中提取的字符串进行解密,得到flag

[网刃杯 2022]玩坏的winxp

使用DiskGenius打开.vmdk文件,可以在Administrator用户的桌面找到一些图片文件

由于 meiren.png 文件较其他文件大小大很多,可能包含其他内容,我们先对其进行分析

将 meiren.png 复制出来,使用binwalk进行分析。果然,发现该图片中包含多张图片,其中包括 f1ag.png

使用 foremost 对 meiren.png 进行分离

得到2张png图片和一个zip文件,对zip文件解压缩得到 f1ag.png 文件,但并不是flag

然后,继续使用binwalk对 f1ag.png 文件进行分析,发现该图片中仍包含其他内容

使用 foremost 对 f1ag.png 文件进行分离、

尝试解压缩包得到something.png,但解压缩需要密码

查看压缩包属性,发现注释中存在内容,此处指的软件应该是QQ

通过查看虚拟磁盘上的文件,发现程序中并没有QQ,那么有可能是需要在firefox文件中进行查找

在 Firefox 文件夹下,可以发现多个sqlite文件以及QQ聊天记录文件,注意到有一个sqlite文件处于查看状态中(存在.sqlite-shm和.sqlite-wal文件),其中很可能存在我们需要的信息

一、网安学习成长路线图

网安所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述

二、网安视频合集

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
在这里插入图片描述

三、精品网安学习书籍

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
在这里插入图片描述

四、网络安全源码合集+工具包

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
在这里插入图片描述

五、网络安全面试题

最后就是大家最关心的网络安全面试题板块
在这里插入图片描述在这里插入图片描述

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注网络安全)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

cn/f0aeee2eec7a48f4ad7d083932cb095d.png)

三、精品网安学习书籍

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
在这里插入图片描述

四、网络安全源码合集+工具包

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
在这里插入图片描述

五、网络安全面试题

最后就是大家最关心的网络安全面试题板块
在这里插入图片描述在这里插入图片描述

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注网络安全)
[外链图片转存中…(img-hYuyJLsC-1713312443005)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 7
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值