menu Ga1@xy's Wor1d
安恒四月春季战——DASCTF部分wp
1418 浏览 | 2020-04-25 | 阅读时间: 约 3 分钟 | 分类: Write Up,MISC | 标签: Misc,比赛wp
请注意,本文编写于 587 天前,最后修改于 586 天前,其中某些信息可能已经过时。

6G还远吗(签到题)

附件大小将近1G,既然是签到题,那么题目肯定很简单,1G的文件下载的很慢,所以肯定不会是把整个附件下载完,所以本题涉及到的考点为断点下载,即下载几秒钟后停止下载,将下载得到的部分文件用winhex查看,即可在文件开头发现flag

blueshark

下载附件得到一个流量包,查看可知为有关蓝牙音频的流量包,导出文件发现任何文件都没有,丢进binwalk查看,可以看到一个7-zip压缩包,但是binwalk无法直接提取,在此提供两种方式:

① 第一种方法可以用dd命令,先用binwalk查看得到起始位置,然后用dd命令分离

dd if=1.pcapng of=1.7z bs=1 skip=24437
# if=1.pcapng  输入文件名
# of=1.7z      输出文件名
# bs=1         一次读写块的大小为1byte
# skip=24437   从输入文件开头跳过24437个块后开始复制

② 第二种方法可以直接用wireshark提取

查找字符串7z即7-zip文件头,找到后选中下面7z文件那一块,左上角文件→导出分组字节流,文件另存为7z后缀即可

提取出来压缩包,打开后发现被加密,而且文件名提示password_is_Bluetooth_PIN,直接在刚刚搜索7z的位置搜索PIN,查找到第二个时即可发现密码:141854

解压得到flag:flag{6da01c0a419b0b56ca8307fc9ab623eb}

Keyboard

下载附件得到一个raw文件和一个secret,先看raw文件,即镜像文件,初步断定其为内存取证,我先用了AXIOM这个工具查看了一下镜像文件(此工具相关可看这里),使用痕迹中可以发现一个t.txt文件

观察文件的路径为keyboard-log,再结合题目Keyboard可以推测这个文件和解题有关,但由于这个工具无法导出文件(或者可以但是我不会),所以接下来我用volatility提取了这个文件

volatility -f Keyboard.raw imageinfo  
# 查看镜像版本
volatility -f Keyboard.raw --profile=Win7SP0x64 filescan | grep -E 'txt'
# 直接定向检索txt文件
volatility -f Keyboard.raw --profile=Win7SP0x64 dumpfiles -Q 0x000000003d700880 -D ./
# 将其dump下来

得到一个dat后缀文件,strings命令查看,我将其中比较重要的信息提取了出来

2020- 3-29 22:36:41
ctfwikiCRYPTO ABC
CTKQEKNHZHQLLVGKROLATNWGQKRRKQGWNTA
2020- 3-29 22:39:24
But the password is in uppercase

第一条信息提示在ctfwiki的crypto分类中可以找到这种密码,对应链接在这里,经过尝试是键盘密码的一种

解密后得到明文为

大写:VERACRYPTPASSWORDISKEYBOARDDRAOBYEK
小写:veracryptpasswordiskeyboarddraobyek

小写可以看出是VeraCrypt的密码为KEYBOARDDRAOBYEK(txt中提示了密码大写)

再看secret那个文件,用VeraCrypt这个工具挂载加密卷,密码是刚得到的字符串,挂载后得到一个vhd文件,vhd文件可以挂载,方法如下

此电脑 → 管理 → 选中一个分区 → (右键)磁盘管理 → 附加VHD

附加后打开新建的那个新加卷,得到一个flag.txt(文件被隐藏)以及一个假flag,取消文件隐藏后cmd查看,发现为NTFS隐写,notepad查看一下即可得到flag

dir /r
notepad flag.txt:hahaha.txt

flag:flag{4a02f6dc603c377a234df479609d237c}

入门reverse

下载附件得到一个exe文件,丢进ida,F5到关键部分

在下面的for循环中涉及到了i - 112,但是很明显i最大才为v5的长度,所以直接编写程序肯定不对,观察v5和v6后面注释的内容,A0h-30h恰好为70h,换成十进制也就是112,所以for循环中v6的i - 112也就是v5数组,再根据这个加密过程编写解密代码即可得到flag

#include<bits/stdc++.h>
using namespace std;

int main(){
    char v5[10010]="akhb~chdaZrdaZudqduvdZvvv|";
    for(int i=0;i<strlen(v5);++i)
        v5[i]=(v5[i]-1)^6;
    cout<<v5;
    return 0;
} 

得到flag:flag{daef_wef_reverse_sss}

全部评论

info 评论功能已经关闭了呐!