从参加蓝帽杯2023入门取证
前言
虽说这次蓝帽杯2023是取证题型初体验,而且只解出来6道取证,但取证给我的印象还是挺有趣的
颇有一种模拟侦探收集信息的感觉
希望通过复现wp以及查阅资料,能够形成初步的取证知识体系,为以后的大赛做好准备
在复现过程中,我会尽量使用不需要授权的开源取证软件,一是因为过于依赖国产的傻瓜式取证软件不利于对取证原理的学习,同时也是防止在以后的比赛中万一没有及时获得像盘古、火眼的授权时,陷入无工具可用的尴尬场面
复现wp
蓝帽杯2023初赛
由于赛题的镜像经过了加密,首先使用VeraCrypt将其解密为磁盘分卷
此时取证检材容器被加载到对应盘符中
apk分析
涉案apk的包名是?
将apk文件拖入APK Messenger中进行分析,得到包名:com.vestas.app
涉案apk的签名序列号是?
使用工具MobSF分析apk数据包,签名序列号为报告中SIGNER CERTIFICATE模块的Serial Number:0x563b45ca
涉案apk中DCLOUD_AD_ID的值是?
使用工具jadx反编译apk安装包,在得到的资源文件全局查询dcloud_ad_id,整改的相应属性及对应的值2147483647
涉案apk的服务器域名是?
将软件安装在雷电模拟器上,打开后使用bupsuite进行抓包
服务器域名为打开app时请求的目的地hostvip.licai.com
涉案apk的主入口是?
使用工具MobSF分析apk数据包,签名序列号为报告中的Main Activityio.dcloud.PandoraEntry
该镜像是用的什么模拟器?
在题目给出的配置文件中可以发现雷电模拟器
的配置文件
手机取证
该镜像中用的聊天软件名称是什么?
使用雷电模拟器进行仿真,发现聊天软件名称叫与你
聊天软件的包名是?
使用软件Magnet AXIOM加载证据data.vmdk
选择使用痕迹中的移动设备
可以看到相关软件的包名com.uneed.yuni
投资理财产品中,受害人最后投资的产品最低要求投资多少钱?
使用雷电模拟器仿真,查看聊天软件与你中的聊天记录
受害人是经过谁介绍认识王哥?
使用雷电模拟器仿真,查看聊天软件与你中的聊天记录
计算机取证
请给出计算机镜像pc.e01的SHA-1值?
将镜像文件添加到工具X-Ways,右键选择属性
得到SHA-1值
给出pc.e01在提取时候的检查员?
将镜像文件添加到工具X-Ways,右键选择属性
检察员为案件描述中Examiner字段的值pgs
请给出嫌疑人计算机内IE浏览器首页地址?
对镜像进行系统仿真,选择清除密码,方便登录取证
打开IE浏览器的Internet选项即可看到首页设置
请给出嫌疑人杨某登录理财网站前台所用账号密码?
在仿真系统中发现只有IE和Chrome两个浏览器
打开Chrome的自动填充设置,查看账号和密码
请给出嫌疑人电脑内pdf文件默认打开程序的当前版本号?
在系统仿真下新建一个文件,修改后缀为pdf,打开时发现默认打开程序为WPS
在wps的设置中点击关于WPS
点击查看更多信息
得到版本号
请给出嫌疑人计算机内文件名为“C盘清理.bat”的SHA-1?
在盘古石计算机取证分析系统中查找可执行文件C盘清理.bat
,并未找到
猜测是文件被加密了,在D盘发现一个disk.2023-9-1的镜像文件
将其导出后重新在盘古石中对其进行分析,发现确实存在目标文件
导出的同时勾选计算哈希值即可
请给出嫌疑人Vera Crypt加密容器的解密密码?
由于disk.2023-9-1中存在Vera Crypt软件,考虑密码也在该镜像中
分析加密容器文件,找到目标文件
分析memdump.mem,得到Veracrypt密钥
将其导出为内存密钥,并应用到刚刚发现的目标文件上
在重要资料.xlsx
中找到密码
请给出嫌疑人电脑内iSCSI服务器对外端口号?
windows上的iSCSI服务器一般会搭在虚拟机上
在仿真系统上找到与虚拟机相关的软件
运行软件后找到端口
请给出嫌疑人电脑内iSCSI服务器CHAP认证的账号密码?
CHAP认证中的密码被隐去,但可以得知用户名为user
导出软件的文件夹,用vscode暴力搜索user,成功在配置文件中搜索到密码
分析嫌疑人电脑内提现记录表,用户“mi51888”提现总额为多少?
在刚刚解密的文件中找到提现记录的表格
在excel表格中使用公式计算
内存取证
请给出计算机内存创建北京时间?
使用工具volatility查看内存镜像信息
python2 vol.py -f memdump.mem imageinfo
下方时间为本地时间,即北京时间
请给出计算机内用户yang88的开机密码?
使用volatility工具的插件mimikatz
此处系统格式尝试imageinfo中搜索到的第一种Win7SP1x64
命令为python2 vol.py -f memdump.mem --profile=Win7SP1x64 mimikatz
得到如下账号和密码
提取内存镜像中的USB设备信息,给出该USB设备的最后连接北京时间?
使用volatility工具的插件usbstor
注意此处为格林威治时间,需要还原成北京时间
请给出用户yang88的LMHASH值?
使用volatility工具的插件hashdump
LMHash为左边那一段
请给出用户yang88访问过文件“提现记录.xlsx”的北京时间?
使用volatility工具的插件shellbag
命令为python2 vol.py -f memdump.mem --profile=Win7SP1x64 timeliner > ../timeliner.txt
输出结果在上一层目录的timeliner.txt
中,再到其中查找记录
此处需要将文件名转为url编码再查询,匹配字符串为%E6%8F%90%E7%8E%B0%E8%AE%B0%E5%BD%95.xlsx
请给出“VeraCrypt”最后一次执行的北京时间?
使用volatility工具的插件pslist
时间需要换算
分析内存镜像,请给出用户在“2023-06-20 16:56:57 UTC+0”访问过“维斯塔斯”后台多少次?
由于维斯塔斯为网页端程序,可以从浏览器节录中查询访问记录
使用盘古石计算机取证分析系统分析Chrome
检索关键字后台登录,得到结果
请给出用户最后一次访问chrome浏览器的进程PID?
使用volatility工具的插件pslist
由于结果是按结束时间来排序,所以很好定位
服务器取证
分析涉案服务器,请给出涉案服务器的内核版本?
由于已知该镜像涉及到服务器,所以丢入盘古石计算机取证分析系统时在应用分析处勾选服务器
提前勾选linux,则软件可以分析到内核版本
分析涉案服务器,请给出MySQL数据库的root账号密码?
使用盘古石计算机取证分析系统找到网站目录
发现密码就在涉案网站的环境配置文件中,说明这题爆搜也可以搜出来
分析涉案服务器,请给出涉案网站RDS数据库地址?
同样在环境配置文件中
请给出涉网网站数据库版本号?
开始仿真,首先在centos中查看ip和端口
用xshell连接系统,因为xshell的终端不会有中文乱码等问题
修改宝塔面板密码后启动宝塔面板服务
使用mysql -Version
即可查看数据库版本
请给出嫌疑人累计推广人数?
将题目给的检材中的数据库备份文件恢复到服务器中,得到viplicai数据库
前面分析计算机时得到后台地址为http://vip.licai.com:8083/AdminV9YY/Login
此时将域名替换为服务器ip,即http://192.168.58.132:8083/AdminV9YY/Login
,成功进入后台登录界面
由于没有账号密码,我们尝试修改源文件改变登录规则,在宝塔面板中进行修改
查找登录文件
将账号不存在的结果改为登录成功,同时去除密码错误的判断
发现页面报错连接不上数据库
到环境配置文件中将数据库域名改为本地,密码也改为当前root密码
搜索嫌疑人账号即可找到推广人数
请给出涉案网站后台启用的超级管理员?
来到管理账号界面,可以查看当前启用的超级管理员
投资项目“贵州六盘水市风力发电基建工程”的日化收益为?
在项目管理这一部分查看
最早访问涉案网站后台的IP地址为?
在登录日志中查看
分析涉案网站数据库或者后台VIP2的会员有多少个
在会员管理界面查找vip2会员数量
分析涉案网站数据库的用户表中账户余额大于零且银行卡开户行归属于上海市的潜在受害人的数量为
使用sql语句SELECT * FROM member WHERE bankaddress LIKE '%上海%'
查询
分析涉案网站数据库或者后台,统计嫌疑人的下线成功提现多少钱?
分析涉案网站数据库或者后台受害人上线在平台内共有下线多少人?
该嫌疑人ID为513935
使用sql语句SELECT COUNT(*) FROM member WHERE inviter = '513935'
查询
分析涉案网站数据库或者后台网站内下线大于2的代理有多少个?
使用sql语句SELECT COUNT(*) AS inviter_count, inviter FROM member GROUP BY inviter HAVING COUNT(*) > 2;
共60人下线超过2个
分析涉案网站数据库或者后台网站内下线最多的代理真实名字为
给上题的语句加一个order by inviter_count
进行排序
最多的人的inviteid为618731,回到系统查询真实姓名即可
分析涉案网站数据库或者后台流水明细,本网站总共盈利多少钱
使用数据库的账号密码登录phpMyAdmin
发现资金明细表的名字为moneylog
moneylog_status为’+’代表流入,为’-’代表流出,所以需要分开计算资金流入流出
使用sql语句SELECT SUM(moneylog_money) FROM moneylog WHERE moneylog_status='+'
和SELECT SUM(moneylog_money) FROM moneylog WHERE moneylog_status='-'
蓝帽杯2022半决赛
手机取证
iPhone手机的iBoot固件版本号:
使用盘古石手机取证分析系统
该手机制作完备份UTC+8的时间(非提取时间):
在数据文件下的数据库栏查看最后一个数据库备份生成的时间
exe分析
文件services.exe创建可执行文件的路径是:
由于受害者检材除了手机镜像外没有其他文件
所以先从手机镜像恢复的聊天记录入手
找到嫌疑软件,下载到本地
service.exe
就在压缩包中
传到奇安信情报沙箱奇安信情报沙箱 (qianxin.com)
在行为异常报告中得到可执行文件的路径
文件HackTool.FlyStudio.acz_unpack.exe是否调用了advapi32.dll动态函式链接库?
将文件拖入奇安信情报沙盒
文件aspnet_wp.v.exe执行后的启动的进程是什么:
将文件拖入奇安信情报沙盒
文件[4085034a23cccebefd374e4a77aea4f1]是什么类型的木马:
将文件拖入奇安信情报沙盒
文件[4085034a23cccebefd374e4a77aea4f1]网络连接的IP地址的归属地是哪个国家:
将文件拖入微步云沙箱
综合分析多个虚拟机上的网络行为,判断为韩国
apk分析
受害人手机中exec的序列号是:
发现题目中给的安卓手机使用的是雷电模拟器的镜像格式
使用雷电模拟器进行仿真
发现EXEC文件在其中
长按导出得到安装包
丢到雷电app智能分析
受害人手机中exec关联服务器地址是:
打开APP,得到服务器地址
受害人手机中exec加载服务器的函数是:
找到MainActivity类,发现启动时使用d.a.a.h
找到调用t()的函数
受害人手机中exec的打包ID是:
在配置文件中
打包ID的字段一般会跟在包名之后
受害人手机中exec的是否有安全检测行为?
一般app如果有安全检测行为,那么会在不合规后进行提醒
在jadx中暴搜“安全”即可
受害人手机中exec的检测方法的完整路径和方法名是:
查看刚刚暴搜到的文件,均通过d.a.a.c.a.a()
方法来检测
受害人手机中exec有几个界面:
数Activity标签个数
受害人手机中红星IPA的包名是:
将3个模拟器镜像文件丢到盘古石手机取证分析系统
暴搜.ipa
后缀的文件
将其导出
红星.ipa改后缀为zip,然后解压,里面就有info.pslist
ipa的包名一般是指BundleID
受害人手机中红星IPA的APIKEY是:
受害人手机中红星IPA的权限有哪些?
嫌疑人手机中红星APK的服务器地址是:
将红星安装到模拟器上,打开软件
嫌疑人手机中红星APK的程序入口是:
丢到雷电APP智能分析
嫌疑人手机中分析聊天工具,服务器的登录端口是:
打开聊天工具,点击右下角的聊天设置
嫌疑人手机中分析聊天工具,用户归属的机构是:
ss
结合手机流量分析聊天工具的登录账号和密码是:
使用Fiddler分析流量
找md5网站md5在线解密破解,md5解密加密 (cmd5.com)破解密码
得到用户名:17317289056
密码:b123456b
蓝帽杯2023半决赛
手机取证
检材数据开始提取是今年什么时候?
导入手机分析系统
09-11 17:21
嫌疑人手机SD卡存储空间一共多少GB?
丢到盘古石手机分析
24.32GB
嫌疑人手机设备名称是?
盘古石手机分析
sailfish
嫌疑人手机IMEI是?
352531082716257
嫌疑人手机通讯录数据存放在那个数据库文件中?
contacts.db
嫌疑人手机一共使用过多少个应用?
这题没太搞懂出题人的意思
比赛的时候想的是计算有使用痕迹的应用
于是将应用日志导出,统计表格中使用时间不为空的格数,得到100
但答案是206
我猜是把盘古石分析系统里分析出来的应用数量直接当作答案了
apk分析
测试apk的包名是?
将目标apk导出,丢到雷电APP智能分析
com.example.myapplication
测试apk的签名算法是?
使用jadx反编译apk
SHA256withRSA
测试apk的主入口是?
com.tencent.testvuln.MainActivity
测试apk一共申请了几个权限?
3
测试apk对Calllog.txt文件内的数据进行了什么加密?
将callog.txt导出后尝试解密,发现是Base64编码
base64
10086对嫌疑人拨打过几次电话?
分析解码后的callout文件,10086一共打进过2次
2
测试apk对短信记录进行了几次加密?
找到短信记录SMS.txt
现在分析apk中的加密方式
用jadx反编译
分析主入口,找到短信加密的部分
encryptData
使用了AES+Base64的加密方式
所以是2层加密
测试apk对短信记录进行加密的秘钥是?
密钥是通过Getkey()函数得到
发现使用的静态文件
使用ida解析so文件
搜索到Getkey函数
生成的key由first变量得到
且对其进行base64编码
first值为lijubdyhfurindhcbxdw
base编码后取前16位
key为bGlqdWJkeWhmdXJp
嫌疑人在2021年登录支付宝的验证码是?
使用得到的key对base64解码后的SMS.txt进行AES解密
得到原文
验证码为9250
电子取证解题经验
apk取证
apk文件结构
文件名 | 作用 |
---|---|
Asset 文件夹 | 存放需要打包到APK中的静态文件 |
Lib文件夹 | 程序依赖的native库 |
META-INF文件夹 | 签名信息(安装验证) |
Res文件夹 | 资源文件夹 |
AndroidManifest.xml | 应用程序的配置文件 |
classes.dex | 可执行文件(java代码编译后)可以使用jadx反编译为源码 |
Resources.arsc | 资源列表 |
从手机模拟器中导出apk文件
这里以雷电模拟器为例
按住桌面上的应用,托向左边的导出即可
包名
包名(Package Name)作为应用的唯一标识。即:包名必须唯一,一个包名代表一个应用,不允许两个应用使用同样的包名。
android系统使用包名(package name)来判定应用程序的同一性,但是由于包名可以由开发者自由设置,为了保护应用程序不被其他开发者开发的同包名应用覆盖,用于发布的Android应用程序需要加上开发者签名。
包(packages): 采用反写域名命名规则,即com.xx.xxx.xxxx
形式
全部使用小写字母。一级包名为com,二级包名为xx(一般为公司或个人域名),三级包名根据应用进行命名,四级包名为功能模块名。如:com.tencent.qq.activitys
,这样具备较高可读性,一看就知道是腾讯公司QQ软件中存放activity的包。
取证题目中问到apk的包名,即问应用的唯一标识,一般存放于AndroidManifest.xml
分析工具
APK Messenger
将apk文件拖入APK Messenger后会自动显示包名
MobSF(启动时最好打开梯子,因为要检查更新)
在apk检查报告中,同样会显示包名
雷电APP智能分析
在基本信息栏中
打包ID
在配置文件AndroidManifest.xml中,打包ID一般跟在apk的包名之后
使用jadx暴搜即可
打包时间
分析工具
APK Messenger
将apk文件拖入APK Messenger后,可以查看apk打包时间
签名序列号
签名信息一般隐藏在META-INF
目录下的RSA文件
使用工具可以直观地查看签名序列号
分析工具
MobSF(启动时最好打开梯子,因为要检查更新)
使用工具MobSF分析apk数据包,签名序列号为报告中SIGNER CERTIFICATE模块的Serial Number
jadx
使用工具jadx反编译apk安装包,可以在APK signature报告中找到签名序列号
雷电APP智能分析
在详细信息栏中
主入口(Main Activity)
Activity是Android的核心类(android.app.Activity),在Activity类有onCreate事件方法,一般用于对Activity进行初始化,并且通过setContentView方法将View放到Activity上,绑定后,Activity会显示View上的控件。
每种语言都有一个程序入口(如:C#main函数),而Android程序的入口就是Main Activity函数。
分析工具
APK Messenger
将apk文件拖入APK Messenger,在更多信息中会显示主入口
MobSF(启动时最好打开梯子,因为要检查更新)
使用工具MobSF分析apk数据包,签名序列号为报告中的Main Activity
雷电APP智能分析
在详细信息栏中
DCLOUD_AD_ID
DCLOUD_AD_ID值是uni-AD联盟ID,用于配置离线广告。Android平台已经合并到DCLOUD_STREAMAPP_CHANNEL中,已不再使用
分析工具
jadx
使用工具jadx反编译apk安装包,在得到的资源文件全局查询dcloud_ad_id,整改的相应属性及对应的值
2147483647
雷电APP智能分析
在第三方服务栏中
服务器域名
apk的服务器域名即为app提供服务器服务的域名
分析工具
burpsuite+雷电模拟器
将软件安装在雷电模拟器上,打开后使用bupsuite进行抓包
为Burp Suite配置手机端的抓包
为burp配置本机的IP和端口
在模拟器中点击连接上的wifi,将代理设置为手动
配置本机ip和端口
服务器域名为打开app时请求的目的地host
雷电APP智能分析
雷电APP智能分析软件目前提
供了4种抓包方式,分别是 HTTP、TCP、代理模式、TCPDump,Android 支持
全部4种方式,iOS 目前只支持代理模式抓包,下面分别介绍四种方式的应用
场景:
1、HTTP 方式是基于手机 VPN 原理实现的抓包,一般情况下如果是要抓HTTP
协议的网络数据包推荐这种方式,不过后台服务器已经不在运行的情况下使用该
方式无法抓取到网络数据包。
2、TCP 方式同样是基于手机 VPN 原理实现的抓包,如果网络数据包是原生
TCP 协议的话推荐使用这种方式。
3、代理模式是基于在手机或者模拟器上设置代理地址实现的抓包(和
fiddler、charles 原理相同),软件会自动设置代理 IP 地址,无需手动填写代
理地址,这种方式的优点是后台服务器不在运行的情况下也能抓到请求的网络数
据包。
4、TCPDump 模式是基于 libpcap 库的抓包,根据使用者的定义对网络上的
数据包进行截获,可以将网络中传送的数据包完全截获下来提供分析,这种方式
的优点是可以抓取到所有协议的网络数据包。
使用网络数据包栏中的HTTP数据包抓取功能
模拟器仿真
在模拟器中直接打开APP,有时会显示连接的网页,即服务器域名
危险权限
申请权限信息的记录,一般存放于AndroidManifest.xml
分析工具
MobSF(启动时最好打开梯子,因为要检查更新)
Permissions模块*
APK Messenger
将apk文件拖入APK Messenger后,可以查看权限信息
雷电APP智能分析
在静态权限栏中
窗口(界面)数量
在Android系统中窗口被成为Activity(活动)
每个活动都必须在AndroidManifest.xml
清单中声明
所以数该文件中有几个activity标签即可
例如下面这个软件就有3个界面
ipa取证
将ipa安装包文件的后缀改为.zip
后解压,可以在目录下找到找到info.plist
文件。
有关苹果app的大部分信息都能在中间找到
包名
在info.plist中暴搜CFBundleIdentifier
进程id
在info.plist中暴搜CFBundleExecutable
或CFBundleName
APIKEY
在info.plist中暴搜APIKey
权限
在info.plist中也可以找到
手机取证
安卓文件结构
- /data 数据分区存放用户安装的软件以及各种数据(存放着比如微信聊天记录等应用数据)
- /system 系统分区 /app 存放系统应用(天气、设置等)
- /recovery 恢复分区
- /cache 缓存临时文件
- /boot 内核分区
- /init 系统启动文件
- /SDCard分区 挂载的SD卡 (可能存放一些图片音频)
移动终端取证分析
确定手机操作系统
苹果手机的备份一般包含AppleBackupFS文件
华为手机的备份则为HuaweiBackup
手机模拟器取证分析
有的手机取证题目会给出手机的内存镜像文件,后缀为vmdk,可供解题者进行仿真
使用手机模拟器能够还原系统文件以及数据,并在可视化界面中进行更符合直觉的操作
比如说如果你想查看图片,直接打开模拟器中的相册即可;
如果想要取证某个聊天软件,直接打开软件就能直观地看到聊天记录
确认模拟器
雷电模拟器的镜像文件特点为包含data.vmdk
、sdcard.vmdk
、system.vmdk
三个文件
雷电模拟器的备份文件的后缀为.ldbk
逍遥模拟器的镜像文件格式如下图
MuMu模拟器的镜像文件格式如下图
还原镜像和备份
这里只演示雷电模拟器还原镜像和备份的操作,其他模拟器类似
处理镜像文件
在雷电模拟器的vms目录下新建一个文件夹
将题目检材拖拽到该文件夹下
打开雷电多开器后即可看到刚刚创建的手机仿真
点击启动即可
处理备份文件
打开雷电多开器,新建一个模拟器
选择备份与还原
点击还原,并选中
.ldbk
的备份文件即可
软件包名
分析工具
Magnet AXIOM
证据来源选择移动>
加载证据选择镜像data.vmdk
选择使用痕迹中的移动设备
可以看到相关软件的包名
本机与模拟器文件交互
这里用到adb工具
该工具一般会伴随模拟器一起下载,一般在模拟器的主目录下,双击即可运行
雷电模拟器adb为默认端口
夜神模拟器adb调试端口为adb connect 127.0.0.1:62001
,如果不正确可以参考逍遥的方法
逍遥模拟器adb调试端口可以在镜像的配置文件中查找
在逍遥模拟器的vms目录下找到对应模拟器文件夹,找到后缀为.memi-prev
的文件,文件内搜索adb即可找到端口
adb常用命令如下:
1 | 查看当前已连接的设备 |
在模拟器中也可以通过拖拽实现本机和模拟器文件交互
exe分析
分析工具
分析exe类型的文件时通常会用到沙箱平台
比较好用的有以下这些:
计算机取证
镜像哈希值
分析工具
盘古石计算机取证分析系统
导入镜像文件,在检材文件阶段就能看到有关镜像的一些信息
属性中有MD5、SHA256、SHA1三种哈希值
X-Ways
将镜像文件添加之后,右键选择属性
可以得到镜像的SHA-1值和MD5值
取证员(exmainer)
分析工具
Xways
将镜像文件添加到工具X-Ways,右键选择属性
检察员为案件描述中Examiner字段的值pgs
操作系统基本信息
比如安装时间、用户ID、上一次登录时间等等
分析工具
盘古石计算机取证分析系统
在导入镜像后选择分析基本信息
可以得到与操作系统相关的信息
安装过的软件
分析系统安装过的软件时,不仅要分析注册在系统内的安装信息,还要结合用户使用痕迹来看
分析工具
盘古石计算机取证分析系统
在盘古石计算机取证分析系统中需要在导入镜像后选择分析基本信息
浏览器保存的密码
Chrome的密钥填充具有保护机制,一旦清除windows开机密码后登录,Chrome保存的密钥就会被破坏
所以当有题目涉及到浏览器保存的密码时,使用仿真系统一定要保留开机密码
内存取证
内存镜像后缀
常见的内存镜像后缀有.raw
、.vmem
、.img
、.mem
常用工具
内存取证主要会用到工具volatility(推荐在kali下使用)
语法:python2 vol.py -f [对象] --profile=[操作系统] [插件参数]
使用时为了输入路径方便可以把内存文件丢到volatility目录下
内存镜像中的操作系统
内存取证的第一步是确定操作系统的类型
首先用python2 vol.py -f xxx.mem imageinfo
命令判断是什么操作系统
内存创建时间
内存创建时间同样是在imageinfo中查看
上方为格林尼治时间,下方为按本地时区换算后的时间
内存中计算机开机密码
使用volatility工具的插件mimikatz
在使用还需安装依赖包pip2 install construct
命令为python2 vol.py -f xxx.mem --profile=xxx mimikatz
得到账号和密码
USB设备信息
使用volatility工具的插件usbstor
命令为python2 vol.py -f xxx.mem --profile=xxx usbstor
用户哈希值
使用volatility工具的插件hashdump
显示结果中左边为LMHash,右边是NTLM Hash
用户密码
使用volatility工具的插件mimikatz
或者用hashdump获得密码的哈希值以后用hashcat爆破或者用解密网站解密
访问文件记录
使用volatility工具的插件timeliner(时间可能较慢)
timeliner会将所有操作系统事件以时间线的方式展开,包括各种痕迹信息
命令为python2 vol.py -f xxx.mem --profile=xxx timeliner > ../timeliner.txt
输出结果在上一层目录的timeliner.txt
中,再到其中查找记录
其中文件名中的中文均用url编码表示
系统进程信息
使用volatility工具的插件pslist和psscan可以查看存在的进程
pslist会按照EPROCESS列表打印所有正在运行的进程,包括其PID信息及最后一次执行的时间
psscan会扫描进程对象池,显示非活跃或隐藏进程
环境变量
使用插件envars可以查看进程环境变量
IE浏览器历史记录
使用volatility工具的插件iehistory
cmd命令记录
使用volatility工具的插件cmdscan和consoles
cmdscan检查从cmd.exe输入的命令记录
consoles收集键入cmd.exe的命令和返回内容
剪贴板信息
使用volatility工具的插件clipboard
系统IP
使用volatility工具的插件netscan
volatility插件速查表
参数 | 作用 |
---|---|
apihooks | 检测内核及进程的内存空间中的API hook |
atoms | 列出会话及窗口站atom表 |
atomscan | Atom表的池扫描(Pool scanner) |
auditpol | 列出注册表HKLMSECURITYPolicyPolAdtEv的审计策略信息 |
bigpools | 使用BigPagePoolScanner转储大分页池(big page pools) |
bioskbd | 从实时模式内存中读取键盘缓冲数据(早期电脑可以读取出BIOS开机密码) |
cachedump | 获取内存中缓存的域帐号的密码哈希 |
callbacks | 打印全系统通知例程 |
crashinfo | 提取崩溃转储信息 |
deskscan | tagDESKTOP池扫描(Poolscaner) |
devicetree | 显示设备树信息 |
dlldump | 从进程地址空间转储动态链接库 |
driverirp | IRP hook驱动检测 |
drivermodule | 关联驱动对象至内核模块 |
driverscan | 驱动对象池扫描 |
dumpcerts | 提取RAS私钥及SSL公钥 |
dumpregistry | 转储内存中注册表信息至磁盘 |
eventhooks | 打印Windows事件hook详细信息 |
evtlogs | 提取Windows事件日志(仅支持XP/2003) |
gahti | 转储用户句柄(handle)类型信息 |
gditimers | 打印已安装的GDI计时器(timers)及回调(callbacks) |
gdt | 显示全局描述符表(Global Deor Table) |
getservicesids | 获取注册表中的服务名称并返回SID信息 |
getsids | 打印每个进程的SID信息 |
handles | 打印每个进程打开的句柄的列表 |
hivescan | 注册表配置单元池扫描 |
hpakextract | 从HPAK文件(Fast Dump格式)提取物理内存数据 |
hpakinfo | 查看HPAK文件属性及相关信息 |
idt | 显示中断描述符表(Interrupt Deor Table) |
hibinfo | 转储休眠文件信息 |
imagecopy | 将物理地址空间导出原生DD镜像文件 |
impscan | 扫描对导入函数的调用 |
joblinks | 打印进程任务链接信息 |
kdbgscan | 搜索和转储潜在KDBG值 |
kpcrscan | 搜索和转储潜在KPCR值 |
ldrmodules | 检测未链接的动态链接DLL |
lsadump | 从注册表中提取LSA密钥信息(已解密) |
machoinfo | 转储Mach-O 文件格式信息 |
malfind | 查找隐藏的和插入的代码 |
mbrparser | 扫描并解析潜在的主引导记录(MBR) |
memmap | 打印内存映射 |
messagehooks | 桌面和窗口消息钩子的线程列表 |
moddump | 转储内核驱动程序到可执行文件的示例 |
modscan | 内核模块池扫描 |
modules | 打印加载模块的列表 |
multiscan | 批量扫描各种对象 |
mutantscan | 对互斥对象池扫描 |
objtypescan | 扫描窗口对象类型对象 |
patcher | 基于页面扫描的补丁程序内存 |
poolpeek | 可配置的池扫描器插件 |
privs | 显示进程权限 |
procdump | 进程转储到一个可执行文件示例 |
psxview | 查找带有隐藏进程的所有进程列表 |
qemuinfo | 转储 Qemu 信息 |
raw2dmp | 将物理内存原生数据转换为windbg崩溃转储格式 |
servicediff | Windows服务列表(ala Plugx) |
sessions | _MM_SESSION_SPACE 的详细信息列表(用户登录会话) |
shellbags | 打印Shellbags信息 |
shutdowntime | 从内存中的注册表信息获取机器关机时间 |
sockets | 打印已打开套接字列表 |
sockscan | TCP套接字对象池扫描 |
ssdt | 显示SSDT条目 |
strings | 物理到虚拟地址的偏移匹配(需要一些时间,带详细信息) |
timers | 打印内核计时器及关联模块的DPC |
truecryptmaster Recover | 恢复TrueCrypt 7.1a主密钥 |
truecryptpassphrase | 查找并提取TrueCrypt密码 |
truecryptsummary | TrueCrypt摘要信息 |
unloadedmodules | 打印卸载的模块信息列表 |
userhandles | 转储用户句柄表 |
vaddump | 转储VAD数据为文件 |
vadinfo | 转储VAD信息 |
vadtree | 以树形方式显示VAD树信息 |
vadwalk | 显示遍历VAD树 |
vboxinfo | 转储Virtualbox信息(虚拟机) |
windows | 打印桌面窗口(详细信息) |
wintree | 顺序打印桌面窗口树 |
wndscan | 池扫描窗口站 |
yarascan | 以Yara签名扫描进程或内核内存 |
vmwareinfo | 转储VMware VMSS/VMSN 信息 |
symlinkscan | 符号链接对象池扫描 |
thrdscan | 线程对象池扫描 |
服务器取证
一般服务器都是搭载在linux系统之上,所以服务器取证更多的是对linux指令、运维知识以及数据库语句的考察
由于Linux系统是开源的,因此许多操作系统和安全工具都可以在Linux系统上运行,这为电子数据取证提供了更多的可能性和工具。
取证中常用linux指令
linux指令的基本格式为:command [-options] [parameter]
其中command为指令名
options为一些附加功能的选项
而parameter为参数,如文件名、目录名
在服务器取证中,linux常用的指令有ls、pwd、cat、chmod、find等等
下面我会一一说明使用方法
ls
功能
ls
会默认列出当前目录中的子目录或文件。
ls 路径
可以指定想要查看的目录。
选项
-l
可以查看某一个目录中内容的相关信息,包括权限、所有者、大小、创建时间等。
-A
会把某一个目录中的隐藏文件也显示出来,有.
前缀的为隐藏文件
-t
会按照修改时间排序显示当前目录中的文件和目录
搭配模式匹配
ls命令还可以使用通配符进行模式匹配,例如 * 表示匹配任意字符,? 表示匹配一个字符,[…] 表示匹配指定范围内的字符。例如:
1 | ls *.txt # 列出所有扩展名为.txt的文件 |
以下指令列出目前工作目录下所有名称是 s 开头的文件,越新的排越后面:
1 | ls -ltr s* |
pwd
功能
pwd
显示用户当前所在的目录
cat
功能
cat
能查看目标文件的内容,多用于文本文件或查看日志。会将目标文件的全部内容打印到屏幕上,如果文件内容超出屏幕则会刷屏到最后。
选项
-s
当遇到有连续两行以上的空白行,就代换为一行的空白行。
-T
将 TAB 字符显示为 ^I。
chmod
功能
chmod
可以控制用户对文件的权限
模式
Linux/Unix 的文件调用权限分为三级 : 文件所有者(Owner)、用户组(Group)、其它用户(Other Users)。
而chmod指令模式的三个数字就对应三种用户类型的权限
# | 权限 | rwx | 二进制 |
---|---|---|---|
7 | 读 + 写 + 执行 | rwx | 111 |
6 | 读 + 写 | rw- | 110 |
5 | 读 + 执行 | r-x | 101 |
4 | 只读 | r— | 100 |
3 | 写 + 执行 | -wx | 011 |
2 | 只写 | -w- | 010 |
1 | 只执行 | —x | 001 |
0 | 无 | —- | 000 |
例如, 765 将这样解释:
- 所有者的权限用数字表达:属主的那三个权限位的数字加起来的总和。如 rwx ,也就是 4+2+1 ,应该是 7。
- 用户组的权限用数字表达:属组的那个权限位数字的相加的总和。如 rw- ,也就是 4+2+0 ,应该是 6。
- 其它用户的权限数字表达:其它用户权限位的数字相加的总和。如 r-x ,也就是 4+0+1 ,应该是 5。
选项
-R
对目前目录下的所有文件与子目录进行相同的权限变更(即以递归的方式逐个变更)
find
功能
find
命令用来在指定目录下查找文件。
语法为find 欲查找的目录 选项
任何位于选项之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何选项,则 find 命令将在当前目录下查找子目录与文件。
选项
-name pattern
按文件名查找,支持使用通配符 *
和 ?
。
-type type
按文件类型查找,可以是 f
(普通文件)、d
(目录)、l
(符号链接)等。
-pid n
process id 是 n 的文件
服务器信息
服务器信息可以用分析软件,也可以通过仿真
分析工具
盘古石计算机取证分析系统
使用盘古石计算机取证分析系统勾选系统类型为linux,则可以在应用分析报告查看系统信息
系统仿真
登录到目标系统后,执行
uname
命令可以显示系统的全部信息,包括内核名称、主机名、操作系统版本、处理器类型和硬件架构等
显示系统信息:
1
2# uname -a
Linux iZbp19byk2t6khuqj437q6Z 4.11.0-14-generic #20~16.04.1-Ubuntu SMP Wed Aug 9 09:06:22 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux显示计算机类型:
1
2# uname -m
x86_64显示计算机名:
1
2# uname -n
runoob-linux显示操作系统发行编号:
1
2# uname -r
4.11.0-14-generic显示操作系统名称:
1
2# uname -s
Linux显示系统版本与时间:
1
2# uname -v
#20~16.04.1-Ubuntu SMP Wed Aug 9 09:06:22 UTC 2017
显示过去执行的命令
使用linux的指令history
history n
显示最近n条命令历史
!N
执行第N条命令
!-N
执行倒数第N条命令
宝塔面板
如果发现镜像中存在面板,输入命令bt
即可调出面板
修改密码
拿到宝塔后首先输入5
修改密码,密码长度需要大于8位,这样方便启动面板服务后登录
一定要在获取记录完宝塔的账户和密码后再来修改密码,有时题目会直接问密码是多少
启动面板服务
输入14
启动面板服务,此时会给出外网和内网面板地址
使用本地浏览器访问内网地址
使用刚刚修改后的账号密码访问即可
phpAdmin
宝塔面板大概率安装了phpAdmin
可以使用数据库账号密码登录,在可视化界面方便地查看库名、表名、数据库结构
还原qp.xb数据库
当检材中存在分离的数据库备份,即后缀为qp.xb
的文件时,可以尝试将其恢复到系统服务器中
安装qpress
1 | wget "http://docs-aliyun.cn-hangzhou.oss.aliyun-inc.com/assets/attach/183466/cn_zh/1608011575185/qpress-11-linux-x64.tar" |
安装xtrabackup
1 | wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.9/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm |
将备份文件上传至服务器系统
可以使用工具xftp连接到服务器上
处理qp.xb文件
使用xbstream处理qp.xb文件
1 | cat xxxqp.xb | xbstream -x -v -C /www/server/data |
进入/www/server/data进行解压
1 | cd /www/server/data |
修改mysql配置文件
1 | vim /etc/my.cnf |
数据库统计时常用聚合函数
COUNT
基础语法
COUNT()
函数返回匹配指定条件的行数。
COUNT(column_name) 函数返回指定列的值的数目(NULL 不计入):
语法:SELECT COUNT(column_name) FROM table_name;
COUNT(DISTINCT column_name) 函数返回指定列的不同值的数目:
语法:SELECT COUNT(DISTINCT column_name) FROM table_name;
COUNT(DISTINCT) 适用于 ORACLE 和 Microsoft SQL Server,但是无法用于 Microsoft Access。
SUM
SUM() 函数返回数值列的总数。
语法:SELECT SUM(column_name) FROM table_name;
MAX
MAX() 函数返回指定列的最大值。
语法:SELECT MAX(column_name) FROM table_name;
MIN
MIN() 函数返回指定列的最小值。
语法:SELECT MIN(column_name) FROM table_name;
AVG
AVG() 函数返回数值列的平均值。
语法:SELECT AVG(column_name) FROM table_name
数据库统计时常用语句
GROUP BY
GROUP BY 语句用于结合聚合函数(如 COUNT()、MAX() 等),根据一个或多个列对结果集进行分组。
一般情况下,GROUP BY 必须要配合聚合函数一起使用,通过使用聚合函数,在分组之后可以对组内结果进行计数(COUNT)、求和(SUM),求平均数(AVG)操作等。
GROUP BY会先按照指定字段的值是否相同来将数据分组
更加详细的介绍可以看下面这篇:
GROUP BY与COUNT用法详解group by count鲲鹏之上的博客-CSDN博客
HAVING
HAVING 子句可以筛选通过 GROUP BY 分组且聚合后的各组数据。
聚合函数(avg、sum、max、min、count),不能作为条件放在where之后,但可以放在having之后
GROUP BY、HAVING、WHERE之间的关系
在语句的位置上,where在group by前, having在group by 之后
在执行顺序上,以下面这个SQL语句为例
1 | select city ,count(*) as num from staff where age> 19 group by city having num >= 3; |
- 执行where子句查找符合年龄大于19的员工数据
- group by子句对员工数据,根据城市分组。
- 对group by子句形成的城市组,运行聚集函数计算每一组的员工数量值;
- 最后用having子句选出员工数量大于等于3的城市组。
所以执行顺序为:WHERE➡GROUP BY➡聚合函数➡HAVING
数据库可视化工具
navicat
安装
参考文章:https://www.cnblogs.com/kkdaj/p/16260681.html
取证软件使用要点
盘古石计算机仿真取证系统
使用该软件会在本地创建镜像文件并使用VMware虚拟机进行仿真。但是对该镜像取证完毕前请勿关闭计算机仿真取证系统软件,否则可能会导致虚拟机中的镜像无法再打开,而此前所做的操作也无法被保存。
盘古石手机取证分析系统
导入模拟器的镜像格式文件时一定要一次性将镜像导入完再分析,而不是单个导入单个分析