BUUCTF刷题、内存取证、MISC脚本

BUUCTF刷题、内存取证、MISC脚本

J_R_R

2025-07-22 发布19 浏览 · 0 点赞 · 0 收藏

image.png
刷题过程中主要是记录不常见的解题思路,和一些没见过的知识点

后门查杀、webshell后门

Webshell 本质上是一段可在 Web 服务器上执行的脚本代码,通常以文件形式存在于 Web 服务器的网站目录中。黑客通过利用 Web 应用程序的漏洞,如 SQL 注入、文件上传漏洞、命令执行漏洞等,将 Webshell 脚本上传到服务器,从而获取对服务器的部分或全部控制权限。

1.直接用工具扫描:D盾
打开D盾,点击自定义扫描,选择附件给的网站文件夹,点击确定
![[Pasted image 20250709225330.png]]Pasted image 20250709225330.png
检查出两个文件
![[Pasted image 20250709225354.png]]Pasted image 20250709225354.png

vmdx解压

foremost分离隐藏文件、Linux 7z解压、/OoK解密
1.foremost分离隐藏文件
![[Pasted image 20250709232726.png]]Pasted image 20250709232726.png

2.ZIP包发现有加密,判断是否为伪加密
![[Pasted image 20250709232907.png]]Pasted image 20250709232907.png
发现伪加密,修改

3.vmdk文件可以用7z解压,这里Windows和linux解压结果不一样,只有Linux下使用7z解压才能看见包含第二部分flag的文件
![[Pasted image 20250709233129.png]]Pasted image 20250709233129.png
![[Pasted image 20250709233153.png]]Pasted image 20250709233153.png

steghide分离文件

Steghide是一款开源的隐写术软件,它可以让你在一张图片或者音频文件中隐藏你的秘密信息,而且你不会注意到图片或音频文件发生了任何的改变。而且,你的秘密文件已经隐藏在了原始图片或音频文件之中了。这是一个命令行软件。

查看图片中是否包含隐藏文件:
steghide extract -sf 文件路径

提取隐藏文件:
steghide extract -sf 文件路径

Steghide在隐藏信息时,可以设置密码,再提取时就会需要该密码。若没设置则不用。
steghide extract -sf 文件路径 -p 密码

脚本爆破:

#!/usr/bin/python
# -*- coding: utf-8 -*-

from subprocess import Popen, PIPE  # 导入执行外部命令所需的模块

def foo():
    # 定义文件路径(注意路径中的空格和反斜杠需要正确处理)
    stegoFile = r'C:\Users\ppp\Desktop\rose.jpg'  # 包含隐藏数据的图片文件
    extractFile = r'C:\Users\ppp\Desktop\hide.txt'  # 要提取的隐藏文件
    passFile = r'C:\Users\ppp\Desktop\linshi.txt'  # 密码字典文件

    # 定义可能的错误信息列表
    errors = [
        'could not extract',  # 提取失败提示
        'steghide --help',    # 帮助信息提示
        'Syntax error'        # 语法错误提示
    ]

    # 定义steghide命令的格式字符串(使用原始字符串避免转义问题)
    cmdFormat = r'D:\CTF\CTF工具合集\隐写图像\隐写\steghide.exe extract -sf %s -xf %s -p %s'

    # 打开密码文件并逐行读取
    with open(passFile, 'r', encoding='utf-8') as f:  # 指定编码避免读取问题
        for line in f:
            # 构造完整的命令
            cmd = cmdFormat % (stegoFile, extractFile, line.strip())
            
            # 执行命令并捕获输出
            p = Popen(cmd, shell=True, stdout=PIPE, stderr=STDOUT)
            content = p.stdout.read().decode('gbk', errors='ignore')  # 解码输出(Windows常用编码)
            
            # 检查是否包含错误信息
            if not any(err in content for err in errors):
                print(content.strip())  # 打印成功信息
                print(f'the passphrase is: {line.strip()}')  # 打印找到的密码
                return  # 找到密码后退出函数

if __name__ == '__main__':
    foo()  # 调用主函数
    print('ok')  # 程序结束提示

在做题过程中,自己写了一些脚本解决问题:
1.base转图片
2.01文件转二维码
3.USB键盘、鼠标流量分析
4.Unix时间戳隐写
..........等等

内存取证

工具:Volatility

amcache        	查看AmCache应用程序痕迹信息
apihooks       	检测内核及进程的内存空间中的API hook
atoms          	列出会话及窗口站atom表
atomscan       	Atom表的池扫描(Pool scanner)
auditpol       	列出注册表HKLMSECURITYPolicyPolAdtEv的审计策略信息
bigpools       	使用BigPagePoolScanner转储大分页池(big page pools)
bioskbd        	从实时模式内存中读取键盘缓冲数据(早期电脑可以读取出BIOS开机密码)
cachedump      	获取内存中缓存的域帐号的密码哈希
callbacks      	打印全系统通知例程
clipboard      	提取Windows剪贴板中的内容
cmdline        	显示进程命令行参数
cmdscan        	提取执行的命令行历史记录(扫描_COMMAND_HISTORY信息)
connections    	打印系统打开的网络连接(仅支持Windows XP 和2003)
connscan       	打印TCP连接信息
consoles       	提取执行的命令行历史记录(扫描_CONSOLE_INFORMATION信息)
crashinfo      	提取崩溃转储信息
deskscan       	tagDESKTOP池扫描(Poolscaner)
devicetree     	显示设备树信息
dlldump        	从进程地址空间转储动态链接库
dlllist        	打印每个进程加载的动态链接库列表
driverirp      	IRP hook驱动检测
drivermodule   	关联驱动对象至内核模块
driverscan     	驱动对象池扫描
dumpcerts      	提取RAS私钥及SSL公钥
dumpfiles      	提取内存中映射或缓存的文件
dumpregistry   	转储内存中注册表信息至磁盘
editbox        	查看Edit编辑控件信息 (Listbox正在实验中)
envars         	显示进程的环境变量
eventhooks     	打印Windows事件hook详细信息
evtlogs        	提取Windows事件日志(仅支持XP/2003)
filescan       	提取文件对象(file objects)池信息
gahti          	转储用户句柄(handle)类型信息
gditimers      	打印已安装的GDI计时器(timers)及回调(callbacks)
gdt            	显示全局描述符表(Global Deor Table)
getservicesids 	获取注册表中的服务名称并返回SID信息
getsids        	打印每个进程的SID信息
handles        	打印每个进程打开的句柄的列表
hashdump       	转储内存中的Windows帐户密码哈希(LM/NTLM)
hibinfo        	转储休眠文件信息
hivedump       	打印注册表配置单元信息
hivelist       	打印注册表配置单元列表
hivescan       	注册表配置单元池扫描
hpakextract    	从HPAK文件(Fast Dump格式)提取物理内存数据
hpakinfo       	查看HPAK文件属性及相关信息
idt            	显示中断描述符表(Interrupt Deor Table)
iehistory      	重建IE缓存及访问历史记录
imagecopy      	将物理地址空间导出原生DD镜像文件
imageinfo      	查看/识别镜像信息
impscan        	扫描对导入函数的调用
joblinks       	打印进程任务链接信息
kdbgscan       	搜索和转储潜在KDBG值
kpcrscan       	搜索和转储潜在KPCR值
ldrmodules     	检测未链接的动态链接DLL
lsadump        	从注册表中提取LSA密钥信息(已解密)
machoinfo      	转储Mach-O 文件格式信息
malfind        	查找隐藏的和插入的代码
mbrparser      	扫描并解析潜在的主引导记录(MBR)
memdump        	转储进程的可寻址内存
memmap         	打印内存映射
messagehooks   	桌面和窗口消息钩子的线程列表
mftparser      	扫描并解析潜在的MFT条目
moddump        	转储内核驱动程序到可执行文件的示例
modscan        	内核模块池扫描
modules        	打印加载模块的列表
multiscan      	批量扫描各种对象
mutantscan     	对互斥对象池扫描
notepad        	查看记事本当前显示的文本
objtypescan    	扫描窗口对象类型对象
patcher        	基于页面扫描的补丁程序内存
poolpeek       	可配置的池扫描器插件
printkey       	打印注册表项及其子项和值
privs          	显示进程权限
procdump       	进程转储到一个可执行文件示例
pslist         	按照EPROCESS列表打印所有正在运行的进程
psscan         	进程对象池扫描
pstree         	以树型方式打印进程列表
psxview        	查找带有隐藏进程的所有进程列表
qemuinfo       	转储 Qemu 信息
raw2dmp        	将物理内存原生数据转换为windbg崩溃转储格式
screenshot     	基于GDI Windows的虚拟屏幕截图保存
servicediff    	Windows服务列表(ala Plugx)
sessions       	_MM_SESSION_SPACE的详细信息列表(用户登录会话)
shellbags      	打印Shellbags信息
shimcache      	解析应用程序兼容性Shim缓存注册表项
shutdowntime   	从内存中的注册表信息获取机器关机时间
sockets        	打印已打开套接字列表
sockscan       	TCP套接字对象池扫描
ssdt           	显示SSDT条目
strings        	物理到虚拟地址的偏移匹配(需要一些时间,带详细信息)
svcscan        	Windows服务列表扫描
symlinkscan    	符号链接对象池扫描
thrdscan       	线程对象池扫描
threads        	调查_ETHREAD 和_KTHREADs
timeliner      	创建内存中的各种痕迹信息的时间线
timers         	打印内核计时器及关联模块的DPC
truecryptmaster	Recover 	恢复TrueCrypt 7.1a主密钥
truecryptpassphrase		查找并提取TrueCrypt密码
truecryptsummary	TrueCrypt摘要信息
unloadedmodules	打印卸载的模块信息列表
userassist     	打印注册表中UserAssist相关信息
userhandles    	转储用户句柄表
vaddump        	转储VAD数据为文件
vadinfo        	转储VAD信息
vadtree        	以树形方式显示VAD树信息
vadwalk        	显示遍历VAD树
vboxinfo       	转储Virtualbox信息(虚拟机)
verinfo        	打印PE镜像中的版本信息
vmwareinfo     	转储VMware VMSS/VMSN 信息
volshell       	内存镜像中的shell
windows        	打印桌面窗口(详细信息)
wintree        	Z顺序打印桌面窗口树
wndscan        	池扫描窗口站
yarascan       	以Yara签名扫描进程或内核内存

获取内存镜像详细信息

imageinfo是Volatility中用于获取内存镜像信息的命令。它可以用于确定内存镜像的操作系统类型、版本、架构等信息,以及确定应该使用哪个插件进行内存分析

python2 vol.py -f Challenge.raw imageinfo  #f:指定分析的内存镜像文件名 

![[Pasted image 20250710115303.png]]Pasted image 20250710115303.png

上述输出中,Suggested Profile(s) 显示了 Volatility 推荐的几个内存镜像分析配置文件,可以根据这些配置文件来选择合适的插件进行内存分析
AS Layer2 显示了使用的内存镜像文件路径
KDBG 显示了内存镜像中的 KDBG 结构地址
Number of Processors 显示了处理器数量
Image Type 显示了操作系统服务包版本
Image date and time 显示了内存镜像文件的创建日期和时间
获取正在运行的程序

用Win7SP1x64配置文件进行分析,Volatility 的 pslist 插件可以遍历内存镜像中的进程列表,显示每个进程的进程 ID、名称、父进程 ID、创建时间、退出时间和路径等信息

python2 vol.py -f Challenge.raw --profile=Win7SP1x64 pslist

![[Pasted image 20250710120136.png]]Pasted image 20250710120136.png

提取正在运行的程序

Volatility 的 procdump 插件可以根据进程 ID 或进程名称提取进程的内存映像,并保存为一个单独的文件

提取iexplore.exe这个程序,进程pid号为2728

python2 vol.py -f Challenge.raw --profile=Win7SP1x64 procdump -p 2728 -D ./
p:pid进程号
D:提取程序后保存的地址,./指的是当前shell正在运行的文件夹地址,输入pwd命令可以查看shell当前的地址,简单来说就是保存到当前文件夹

![[Pasted image 20250710120343.png]]Pasted image 20250710120343.png
成功导出,导出后文件名为executable.2728.exe

查看在终端里执行过的命令

Volatility 的 cmdscan 插件可以扫描内存镜像中的进程对象,提取已执行的 cmd 命令,并将其显示在终端中

python2 vol.py -f Challenge.raw --profile=Win7SP1x64 cmdscan

![[Pasted image 20250710120441.png]]Pasted image 20250710120441.png

查看进程在终端里运行的命令

Volatility中的cmdline插件可以用于提取进程执行的命令行参数和参数值

python2 vol.py -f Challenge.raw --profile=Win7SP1x64 cmdline

![[Pasted image 20250710120539.png]]Pasted image 20250710120539.png

查找内存中的文件

Volatility 的 filescan插件可以在内存中搜索已经打开的文件句柄,从而获取文件名、路径、文件大小等信息

想找到hint.txt文件,可以使用以下命令

python2 vol.py -f Challenge.raw --profile=Win7SP1x64 filescan | grep hint.txt

![[Pasted image 20250710120628.png]]Pasted image 20250710120628.png
grep是Linux下常用的命令之一,它用于在文件中查找指定的字符串,并将包含该字符串的行输出
如果只使用filescan而不配合grep的话,Volatility就会输出系统上的全部文件

### 提取内存中的文件

Volatility的dumpfiles插件可以用来提取系统内存中的文件
![[Pasted image 20250710120841.png]]Pasted image 20250710120841.png
提取hint.txt文件,hint.txt的内存位置为0x000000011fd0ca70,这两个由于位置都一样,随便提取哪个都行

python2 vol.py -f Challenge.raw --profile=Win7SP1x64 dumpfiles -Q 0x000000011fd0ca70 -D ./
Q:内存位置
D:提取程序后保存的地址,./指的是当前shell正在运行的文件夹地址,输入pwd命令可以查看shell当前的地址,简单来说就是保存到当前文件夹

![[Pasted image 20250710120918.png]]Pasted image 20250710120918.png
PC:提取出来的文件名是包含内存地址的,更改一下后缀名即可运行

查看浏览器历史记录

Volatility中的iehistory插件可以用于提取Internet Explorer浏览器历史记录

python2 vol.py -f Challenge.raw --profile=Win7SP1x64 iehistory

![[Pasted image 20250710121031.png]]Pasted image 20250710121031.png

提取用户密码hash值并爆破

Volatility中的Hashdump插件可以用于提取系统内存中的密码哈希值

python2 vol.py -f Challenge.raw --profile=Win7SP1x64 hashdump

![[Pasted image 20250710121119.png]]Pasted image 20250710121119.png
这里提取了四个用户的密码hash值,解密即可

### 使用mimikatz提取密码

mimikatz是一个开源的用于从Windows操作系统中提取明文密码,哈希值以及其他安全凭据的工具

python2 vol.py -f Challenge.raw --profile=Win7SP1x64 mimikatz

![[Pasted image 20250710121248.png]]Pasted image 20250710121248.png

查看剪切板里的内容

Volatility中的clipboard插件可以用于从内存转储中提取剪贴板数据

python2 vol.py -f Challenge.raw --profile=Win7SP1x64 clipboard

![[Pasted image 20250710121318.png]]Pasted image 20250710121318.png

查看正在运行的服务

svcscan是Volatility中的一个插件,用于扫描进程中所有的服务

svcscan

![[Pasted image 20250710121414.png]]Pasted image 20250710121414.png
执行了svcscan之后,每列代表服务的一些信息,包括服务名、PID、服务状态、服务类型、路径等等

查看网络连接状态

Volatility中的netscan插件可以在内存转储中查找打开的网络连接和套接字,该命令将显示所有当前打开的网络连接和套接字。输出包括本地和远程地址、端口、进程ID和进程名称等信息

python2 vol.py -f Challenge.raw --profile=Win7SP1x64 netscan

![[Pasted image 20250710121511.png]]Pasted image 20250710121511.png

查看注册表信息

printkey是Volatility工具中用于查看注册表的插件之一。它可以帮助分析人员查看和解析注册表中的键值,并提供有关键值的详细信息,如名称、数据类型、大小和值等

python2 vol.py -f Challenge.raw --profile=Win7SP1x64 printkey

![[Pasted image 20250710121537.png]]Pasted image 20250710121537.png
然后使用hivelist插件来确定注册表的地址

python2 vol.py -f Challenge.raw --profile=Win7SP1x64 hivelist

![[Pasted image 20250710121643.png]]Pasted image 20250710121643.png

查看注册表software项
hivedump是一个Volatility插件,用于从内存中提取Windows注册表的内容,这里我们选择第一个来演示

python2 vol.py -f Challenge.raw --profile=Win7SP1x64 hivedump -o 0xfffff8a00127d010
o:hivelist列出的Virtual值

![[Pasted image 20250710121720.png]]Pasted image 20250710121720.png

根据名称查看具体子项的内容,这里以SAM\Domains\Account\Users\Names做演示,这个是Windows系统中存储本地用户账户信息的注册表路径,它包含了每个本地用户账户的名称和对应的SID信息

python2 vol.py -f Challenge.raw --profile=Win7SP1x64 printkey -K "SAM\Domains\Account\Users\Names"

![[Pasted image 20250710121755.png]]Pasted image 20250710121755.png

如果要提取全部的注册表,可以用这个命令

python2 vol.py -f Challenge.raw --profile=Win7SP1x64 dumpregistry -D ./
请前往 登录/注册 即可发表您的看法…