取证(Forensic)

常见

Linux

登录密码

/etc/passwd,/etc/shadow + john爆破 (john —format=crypt hash)

定时任务

/etc/crontab,/var/log/cron.log

系统名

/etc/issue

docker容器

/var/lib/docker/containers/xxxxxxxxx/config.v2.json

Windows

软件

Foxmail

Storage目录+FMStorage.list,复制到本地目录,打开Foxmail

Firefox

xxxxxx.default-release目录,key4.db+logins.json,复制到本地目录打开firefox,或firepwd工具

内存取证

挂载

raw转vmdk

qemu-img convert -f raw data.raw -O vmdk output.vmdk

Linux

确定操作系统->VMware新建虚拟机->稍后安装系统->选操作系统(Linux)->选I/O类型(LSI Logic SAS)->选磁盘类型(SATA)->使用现有虚拟磁盘->开机按e修改启动配置->删掉静默模式以及一堆网卡串口配置,添加rw init=/sysroot/bin/sh->系统初始化到shell环境

切换根目录:

1
2
3
mount -o remount rw /sysroot
chroot /sysroot
LANG=C

改root密码:

1
2
3
4
touch  /.autorelabel
passwd
exit
reboot

volatility

https://github.com/volatilityfoundation/volatility

镜像基本信息(得到profile):

volatility -f mem.data imageinfo

python3 vol.py -f mem.data windows.info

搜索进程、导出内存块:

volatility -f mem.data --profile=XXX pslist

python3 vol.py -f mem.data windows.pstree

volatility -f mem.data --profile=XXX memdump -p 2768 -D ./

查看命令行输入、命令行历史记录:

volatility -f mem.data --profile=XXX cmdline

python3 vol.py -f mem.data windows.cmdline

volatility -f mem.data --profile=XXX cmdscan

volatility -f mem.data --profile=XXX consoles

查看可疑文件、导出文件(如无法导出vol2换vol3):

volatility -f mem.data --profile=XXX filescan | grep -E ".zip|.rar|.jpg|.png|.txt|.bmp|.7z"

volatility -f mem.data --profile=XXX dumpfiles -D ./ -Q 0x000000001e85f430 -n

python3 vol.py -f mem.data windows.filescan | grep -E 'flag|elf'

python3 vol.py -f mem.data windows.dumpfiles --pid 8180

python3 vol.py -f mem.data windows.dumpfiles --physaddr 0x4181c950

特殊文件后缀:

evtx - Windows系统日志

无法导出.dat文件,加 -u 参数(-u = —unsafe relax safety constraints more data)
volatility -f mem.data dumpfiles -r pdf$ -i --name -D dumpfiles/ -u

dumpfiles 参数:
参考:https://www.andreafortuna.org/2017/07/17/volatility-my-own-cheatsheet-part-4-kernel-memory-and-objects

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
-r REGEX, --regex=REGEX
Dump files matching REGEX
-i, --ignore-case Ignore case in pattern match
-o OFFSET, --offset=OFFSET
Dump files for Process with physical address OFFSET
-Q PHYSOFFSET, --physoffset=PHYSOFFSET
Dump File Object at physical address PHYSOFFSET
-D DUMP_DIR, --dump-dir=DUMP_DIR
Directory in which to dump extracted files
-S SUMMARY_FILE, --summary-file=SUMMARY_FILE
File where to store summary information
-p PID, --pid=PID Operate on these Process IDs (comma-separated)
-n, --name Include extracted filename in output file path
-u, --unsafe Relax safety constraints for more data
-F FILTER, --filter=FILTER
Filters to apply (comma-separated)

查看内存中记录的当时正在运行的程序、运行次数、最后运行时间、窗口被作为焦点总时间:

volatility -f mem.data --profile=XXX userassist

查看截图:

volatility -f mem.data --profile=XXX screenshot -D ./

查看剪贴板:

volatility -f mem.data --profile=XXX clipboard

volatility -f mem.data --profile=XXX clipboard -v

查看Edit编辑控件信息:

volatility -f mem.data --profile=XXX editbox

查看当前notepad文本:

volatility -f mem.data --profile=XXX notepad

查看账户与密码:

volatility --plugins=plugins/ -f mem.data lsadump

volatility --plugins=plugins/ -f mem.data --profile=XXX mimikatz(或PasswareKitForensic)

查看系统计算机名:

volatility -f mem.data --profile=XXX printkey -K "ControlSet001\Control\ComputerName\ComputerName"(或PasswareKitForensic)

查看系统用户名:

volatility -f mem.data --profile=XXX printkey -K "SAM\Domains\Account\Users\Names"

查看最后登录系统的账户:

volatility -f mem.data --profile=xxx printkey -K "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"

查看网络连接信息:

volatility -f mem.data --profile=XXX netscan

查看用户会话:

volatility -f mem.data --profile=XXX sessions

查看缓存在内存中的注册表:

volatility -f mem.data --profile=XXX hivelist

提取注册表:

volatility -f mem.data --profile=XXX dumpregistry -D ../ (dumpregistry插件)

提取注册表system和SAM虚拟地址的hash内容:

volatility -f mem.data --profile=XXX hashdump

volatility -f mem.data --profile=XXX hashdump -y 0xfffff8a000024010 -s 0xfffff8a00167a010 -D ./

python3 vol.py -f mem.data windows.hashdump

提取内存中主文件表(MFT)记录信息(文件属性):

volatility -f mem.data --profile=XXX mftparser > mft.txt

提取IE历史记录:

volatility -f mem.data --profile=XXX iehistory

显示环境变量:

volatility -f mem.data --profile=XXX envars

python3 vol.py -f mem.data windows.envars

查看进程的物理偏移:

volatility -f mem.data --profile=XXX psxview

查看进程的PoolTag:

参考:

https://forensics.xidian.edu.cn/wiki/ram2/

https://medium.com/@sky__/memory-udom-x-m455-ctf-2023-writeup-a97e573f583d

volatility -f mem.data --profile=XXX volshell

1
2
3
dt( "_EPROCESS",0x000000007fca3820 , space=addrspace().base)
dt( "_OBJECT_HEADER",0x000000007fca3820-0x30 , space=addrspace().base)
dt( "_POOL_HEADER" ,0x000000007fca3820-0x30-0x10-0x20, space=addrspace().base)

提取Chrome历史记录(插件):

Chrome Cookies 的本质是 SQLite。

Chrome 80 以后更改了 Cookies 的加密方法。

cookies 表 encrypted_value 字段不为 V10 / V11 开头,是 Chrome 79 及以前版本的 Cookies。

volatility --plugins=plugins/ -f mem.data chromehistory

volatility --plugins=plugins/ -f mem.data chromevisits -Q(visits – QUICK)

volatility --plugins=plugins/ -f mem.data chromevisits(visits – FULL)

volatility --plugins=plugins/ -f mem.data chromesearchterms

volatility --plugins=plugins/ -f mem.data chromedownloads(Standard Text Output)

volatility --plugins=plugins/ -f mem.data chromedownloads --output=csv(CSV Output)

volatility --plugins=plugins/ -f mem.data chromedownloads --output=body(Bodyfile Output)

volatility --plugins=plugins/ -f mem.data chromedownloadchains

volatility --plugins=plugins/ -f mem.data chromecookies | more(Cookies – Basic example)

volatility --plugins=plugins/ -f mem.data chromecookies(Cookies – No Decryption)

volatility --plugins=plugins/ -f mem.data chromecookies -K "rq2uadV+VvAD+IBiBeJ75a=="(Cookies – Decrypted)

提取登录密码(LassPass插件):

volatility --plugins=plugins/ -f mem.data --profile=XXX lasspass

USB设备相关(usbstor插件):

volatility --plugins=plugins/ -f mem.data --profile=XXX usbstor

特殊进程

便签:StikyNot.exe (.snt 文件,对应路径:C:\Users\XXX\AppData\Roaming\Microsoft\Sticky Notes\)

联系人:wab.exe (.contact 文件)

插件收集

https://github.com/superponible/volatility-plugins(chromehistory)

https://github.com/kevthehermit/volatility_plugins(usbstor)

参考

https://wiki.wgpsec.org/knowledge/ctf/Volatility.html

Linux镜像制作

Linux内存镜像需要制作相应的profile来进⾏分析。

先查看版本:strings mem | grep 'Linux version'

去 Deep Security 12.0 Supported Linux Kernels 上搜索版本号,安装好对应的内核之后就可以开始做profile:

1
2
3
4
sudo apt install build-essential dwarfdump
git clone https://github.com/volatilityfoundation/volatility
cd volatility/tools/linux
make

以debian为例,debian新版本的systemmap可以在这里找到。做完profile就可以开始取证。

查看命令行:

volatility -f mem --profile=Linuxdebian51021x64 linux_bash

恢复⽂件系统:

volatility -f mem --profile=Linuxdebian51021x64 linux_recover_filesystem --dump-dir=../files/

恢复完毕后,就可以看到相关文件。

参考:

内存取证实验 - 镜像 + 配置文件

0xGame 2023 Week4 - oh-my-linux

MemProcFS

https://github.com/ufrisk/MemProcFS

挂载到M盘:

MemProcFS.exe -device "mem.dmp" -v -forensic 1

计算机信息:M:\sys\sysinfo\sysinfo.txt

​

磁盘取证

vmdk

AccessData FTK Imager 挂载

Bitlocker
  1. 磁盘+内存

    Elcomsoft Forensic Disk Decryptor

    volume选择挂载过的物理磁盘,memory dump选择内存文件,一直往后解密。

日志

到$Extend---$UsnJrnl---$J,使用NTFS Log Tracker或解析UsnJrnl的工具,加载 $J 文件,然后生成db文件,导出CSV。

​

注册表取证

文件路径

用户名&密码hash

Windows/System32/config/SAM

Windows/System32/config/SYSTEM

Windows/System32/config/SECURITY

dump

pwdump SYSTEM SAM

sandump2 SYSTEM SAM

或:

python secretsdumps.py -sam sam -security security -system system LOCAL

john hash.txt --show --format=NT

或:

1
2
privilege::debug                             //进入特权模式
lsadump::sam /system:"E:\SYSTEM" /sam:"E:\SAM"
环境变量

Users/[AccountName]/NTUSER.DAT

启动项

Users/[AccountName]/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/Startup

注册表路径

计算机相关

注册时设置的用户名:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion,键值 RegisteredOwner

当前操作系统的产品名称:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion,键值 ProductName

Firefox

浏览器版本号:

HKEY_LOCAL_MACHINE\SOFTWARE\Mozilla\Mozilla Firefox,键值 CurrentVersion

​

社工(信息收集)

用户名

https://github.com/sherlock-project/sherlock

Sherlock Project提供了一个非常强大的命令行工具Sherlock来查找社交网络(社交网络列表及规则可自定义扩展延伸)中的用户名,以方便您进行信息收集相关的安全保障工作。

命令:python3 sherlock.py user1 user2 user3

​

WiFi

参考:How to decrypt stored Windows passwords using mimikatz and DAPA

工具:mimikatz

保存/使用主密钥(master keys):

dpapi::cache /save /file:cache.bin

提取WiFi密码:

dpapi::wifi /in:"{fullpath}\file.xml"

​

Cookies

工具:mimikatz

保存/使用主密钥(master keys):

Windows 下:文件夹选项 -> 查看 -> 取消勾选 “隐藏受保护的操作系统文件” 才能看到 SID 文件夹下的 protect 文件

dpapi::masterkey /in:S-1-5-21-262715442-3761430816-2198621988-1001\57935170- beab-4565-ba79-2b09570b95a6 /sid:S-1-5-21-262715442-3761430816-2198621988-1001 /password:<登录密码>

解密Cookies:

dpapi::chrome /in:"Cookies"

​

AirDrop

AirDrop有一个安全漏洞将发送者的Apple ID和电话号码的哈希值泄露给接收者设备。在AirDrop连接或文件传输之前,发送设备的Apple ID和电话号码的SHA-256哈希值会广播给所有邻近的设备。所以在传输过程中可以捕获该苹果ID和电话号码的部分SHA-256哈希值,爆破出完整的信息以此来识别发送设备。

关键文件:sysdiagnose/system_logs.archive

AirDrop AWDL数据存储在日志内的sharingd进程下,因此可以添加过滤条件只显示sharingd进程和Hashes的数据。

投递设备的部分Hash数据(前五位…后五位),可以写脚本爆破国内运营商所有手机号的号段,需要注意的是手机号前面要加上中国的手机号前缀86。

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
26
27
28
29
import hashlib

targetstart = input('[+] Enter the target hash start fragment: ')
targetend = input('[+] Enter the target hash end fragment: ')
print('[+] Checking all Chinese areacode')
areacodelist = ['139', '138', '137', '136', '135', '134', '159', '158', '157','150','151', '152', '188', '187', '182', '183', '184', '178']
phonematch = []

for areacode in areacodelist:
line = '0'
print('[+] Searching area code ' + areacode + ' for target...')
while int(line) < 10000000:
targetphone = '86' + str(areacode) + str(line).zfill(8)
targettest = hashlib.sha256(targetphone.encode())
starthashcheck = targettest.hexdigest() [0:5]
endhashcheck = targettest.hexdigest() [-5:]
if starthashcheck == targetstart.lower() and endhashcheck == targetend.lower():
print(targetphone + ' matches hash fragments. Still checking...')
phonematch.append(targetphone)
line = int(line) + 1
while int(line) == 10000000:
break

if phonematch:
print('Your target\'s phone number may be:')
for match in phonematch:
print(match)
else:
print('Target phone number not found in this area code set. Target phone may use another country code.')

​

应急响应

查看外连:

tcpdump -i eth0 not port 22 -nn

查看CPU占用大的进程:

ps aux --sort=-%cpu

事件(evtx日志)

WINDOWS日志事件ID速查表

常用

事件ID 描述
4608 Windows 启动
4609 Windows 关机
4616 系统时间发生更改
4624 用户成功登录到计算机
4625 登录失败。使用未知用户名或密码错误的已知用户名尝试登录。
4634 用户注销完成
4647 用户启动了注销过程
4648 用户在以其他用户身份登录时,使用显式凭据成功登录到计算机
4703 令牌权限调整
4704 分配了用户权限
4720 已创建用户账户
4725 账户被禁用
4768 请求Kerberos身份验证票证(TGT)
4769 请求Kerberos服务票证
4770 已续订Kerberos服务票证
4779 用户在未注销的情况下断开了终端服务器会话

© 2026 Lazzaro · 总访问 - 次 · 访客 - 人
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。

站内搜索

没有找到内容!