DASCTF 六月团队赛

没有web手+pwn手伤不起~~

MISC

PhysicalHacker

提交flag时请提交{}里面的

已知数据包文件DASCTF_June.cap和hint.txt

由hint.txt脚本知某个密码使用的字典为00000000-99999999(10个值)。

Wireshark打开cap文件,发现里面只有802.11 wireless LAN协议流量,很有可能是WPA或WEP加密后的无线数据包。

Kali下使用工具 aircrack-ng + airdecap-ng 破解:

aircrack-ng DASCTF_June.cap

查看ESSID信息

image-20200626203334874

aircrack-ng DASCTF_June.cap -w password.txt

用上面的字典爆破密码

image-20200626203618153

得到密码 66666666,用ESSID和密码解密流量包

airdecap-ng DASCTF_June.cap -e DASCTF -p 66666666

得到新流量包,打开查看TCP数据包,在一个包中找到zip文件数据,导出解压得到flag.txt。

只有一句话“Welcome to DASCTF June, Flag is here but you will never find it noob hacker!”

但Ctrl+A全选发现下方有大量空白不可见字符,猜测为snow隐写,

使用snow隐写工具解密:

snow.exe -d flag.txt

得到字符串base32解码即可。

BaiduYun&Gcode

你了解百度网盘的秒传原理么?

hint:数据库中的xshadow.png与平台首页中xshadow.png的前256KB相同

已知一份百度云盘的用户数据文件夹users。这题出得不错,了解百度网盘的秒传原理。

秒传原理:通过检测文件大小和md5值,或者再加上其他如文件前256KB切片的md5值的信息,若云端有相同的文件,则直接进行云端拷贝。

参考:

利用BaiduPCS-Go批量秒传与备份

https://github.com/felixonmars/BaiduPCS-Go

下载BaiduPCS-Go工具,验证自己的百度云账号密码登录。

从users提取 BaiduYunCacheFileV0.db 中的数据库信息,用SQLite Expert查看器打开db文件,找到cache数据记录:

image-20200626205546766

由提示肯定是和xshadow.png有关了,用BaiduPCS-Go工具里的手动秒传功能

BaiduPCS-Go ru -length=<文件的大小> -md5=<文件的md5值> -slicemd5=<文件前256KB切片的md5值(可选)> -crc32=<文件的crc32值(可选)> <保存的网盘路径, 需包含文件名>

放入得到的xshadow.png信息:

BaiduPCS-Go ru -length=30038207 -md5=72b6273dc5c54e8af2490e4acd3a6a3f /temp

发现运行不成功,需要slicemd5值,那么需要 xshadow.png 的前256KB切片的md5了。

根据提示,在首页找到 https://www.linkedbyx.com/static/xshadow.png 下载,kali下取前256KB切片。

split -b 256K xshadow.png 生成文件xaa

md5sum xaa 求切片md5值

重新运行命令:

BaiduPCS-Go ru -length=30038207 -md5=72b6273dc5c54e8af2490e4acd3a6a3f -slicemd5=e973409c4ac718e158be4492ab5d9999 /temp

成功在百度网盘得到云上的xshadow.png文件。

下载,用binwalk提取出zip文件,解压得到flag.gcode。

了解到gcode文件为3D模型切片软件输出的文件类型,可以用下面三个任意一个网页在线预览:

http://gcode.ws/
https://ncviewer.com/
http://jherrm.com/gcode-viewer/

试了很多次在线加载,挂着两个虚拟机,300w+行代码,打开到一半直接内存不足网页崩溃,求助64G大内存神机大佬,在线绘制得到

image-20200626213136721

想到是3D绘制,尝试旋转各视角,在侧面发现玄机,调整好角度记录最终flag。

image-20200626213333283

膜出题大佬~~

Keyboard

I hid the flag. Go find it

已知文件Keyboard.raw和Secret,貌似是4月赛原题。

内存取证:

volatility -f Keyboard.raw imageinfo

得到profile信息 Win7SP1x64,

volatility -f Keyboard.raw --profile=Win7SP1x64 pslist

发现可疑进程 keyboard-log.exe 和 VeraCrypt.exe,分别是键盘记录器和加密器,

搜索 keyboard-log 相关文件

volatility -f Keyboard.raw --profile=Win7SP1x64 filescan | grep keyboard

dump导出可疑 t.txt 文件。

image-20200626201151735

CTKQEKNHZHQLLVGKROLATNWGQKRRKQGWNTA 像是密码的密文,加密方法是上面的 CTFWIKI-CRYPTO-ABC,

猜测QWERTY键盘密码,脚本还原得VERACRYPTPASSWORDISKEYBOARDDRAOBYEK。

用VeraCrypt挂载加密分区文件Secret,得到一个vhd虚拟磁盘文件,再挂载得到flag.txt,打开发现为假flag,

NTFS隐写工具搜一搜,得到正确flag。

透明度

你知道RGBA吗?

已知一张png图,题面RGBA提示LSB隐写,用zsteg工具查看:

zsteg -a Rgba.png

image-20200626195144732

发现 b8,a,lsb,xy 区域有zip文件,导出内容:

zsteg -E "b8,a,lsb,xy" Rgba.png > out.zip

zip内txt文件名提示密码是 nep??

在ARCHPR中设置掩码爆破得zip密码为:nepnb,解压得flag。

CRYPTO

Gemini_Man

貌似N很大噢,耐心点总能解出来

已知很大的 $C$ 和 $N$,无法用常规方法分解,由开局的提示”孪生素数“或题目”Gemini_Man“,猜测 $q=p+2$。

代入 $pq=N$,解一元二次方程得到正确 $p,q$ 值。

题目未给 $e$ ,猜测为常见的 $e=65537$ ,常规脚本放到Kali环境跑出明文 $m$。

(未知原因Windows环境下 pow(C,d,N) 死活跑不出)

HardKnapsack1

HardKnapsack1

求解背包加密,在Sage中采用LLL算法现成脚本跑出结果:

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
30
31
32
33
34
35
###Sage###
import binascii
# open the public key and strip the spaces so we have a decent array
fileKey = open("pub.Key", 'rb')
pubKey = fileKey.read().replace(' ', '').replace('L', '').strip('[]').split(',')
nbit = len(pubKey)
# open the encoded message
fileEnc = open("enc.txt", 'rb')
encoded = fileEnc.read().replace('L', '')
print("start")
# create a large matrix of 0's (dimensions are public key length +1)
A = Matrix(ZZ, nbit + 1, nbit + 1)
# fill in the identity matrix
for i in range(nbit):
A[i, i] = 1
# replace the bottom row with your public key
for i in range(nbit):
A[i, nbit] = pubKey[i]
# last element is the encoded message
A[nbit, nbit] = -int(encoded)

res = A.LLL()
for i in range(0, nbit + 1):
# print solution
M = res.row(i).list()
flag = True
for m in M:
if m != 0 and m != 1:
flag = False
break
if flag:
M = ''.join(str(j) for j in M)
# remove the last bit
M = M[:-1]
print(M)

PS:带约束条件的HardKnapsack2用LLL跑不出结果,待学习。

REVERSE

easy_maze

走出来便是英雄!ps:将得到的字符串md5加密提交

迷宫题,IDA查看字符串发现迷宫阵字符串:

OOOO0000#000OO0OOOOOO0OO0000OO00OOOOO0OO0OOOO000OO00OO00OOOOO0OO0OOOOOO0000OOOOOOOOOOOOOOOOOOOOOOOO

结合main函数伪代码易知上下左右控制键对应ujhk,且迷宫大小为10×10,#为终点,0为路径,X(实际为空)为起点,调整为:

XOOOO0000#

000OO0OOOO

OO0OO0000O

O00OOOOO0O

O0OOOO000O

O00OO00OOO

OO0OO0OOOO

OO0000OOOO

OOOOOOOOOO

OOOOOOOOOO

得到路径字符串:jkkjjhjjkjjkkkuukukkuuhhhuukkkk,md5加密提交。