1.magic_word-西南科技大学
magic_word.docx
后缀改成zip,然后解压,打开\word\document.xml
- 复制这一段,必须向上图那样复制,不然末尾一段零宽字符会没复制上 零宽网站:
https://www.mzy0.com/ctftools/zerowidth1/
unctf{We1come_new_ctfer}
2.syslog-浙江师范大学
- 打开syslog,我搜索了几个关键字,key,password的时候,搜索出现了
cGFzc3dvcmQgaXMgVTZudTJfaTNfYjNTdA==
—> base64 —>
password is U6nu2_i3_b3St
- 用密码解压flag.zip,得到flag:
unctf{N1_sH3_D0n9_L0g_dE!}
3.巨鱼-河南理工大学
- 打开fish.png,尾部有zip,我是复制然后粘贴出来的(foremost应该也可以)
- 我的看图软件(ImageGlass)打不开图片,所以大概率宽高不对,crc32爆破一下。
- 打开图片
- 用密码
无所谓我会出手
,解开之前尾部保存的zip文件,得到flag.txt, flagisnothere.zip
flag.txt:
我提交了一下,是不对的。
- flagisnothere.zip是伪加密的,我用的
ZipCenOp
解开的。
pass.png:
- 我用识图工具找了一下是
六氯环己烷
别名叫六六六,所以flag.pptx的打开密码就是
666
(当然也是试了好几次出来的)
- 我们要关闭文档保护,也就是不使用密码
上面密码留空,然后确定,文档的密码就没了。
- 修改后缀名为zip,然后解压,用vscode打开,
ctrl+shift+f
搜索unctf
UNCTF{y0u_F1nd_1t!}
4.找得到我吗-闽南师范大学
找得到我吗.docx
后缀名改成zip,解压。- vscode搜索
flag{You_find_me!}
5.社什么社-湖南警察学院
- 打开txt,放大缩小,弄到一个合适的情况后
- 结合出题人的位置
湖南
,加上古城。
所以就是
凤凰古城
,然后md5,再大写。
UNCTF{4F0198127A45F66C07A5B1A2DDA8223C}
6.zhiyin-中国人民公安大学
- 解压后发现
lanqiu.jpg
打不开,那我们就先解决它。
010editor打开一看就是reverse了,所以我们reverse一下就能回去,这个太简单了,我没写代码,你们不会的百度找个代码吧,我用的是自己的集合的那种脚本。
得到关键字:
Go_p1ay
(注意是1不是l,我就被这个卡半天了)
- 010editor打开
zhiyin.png
,尾部明显的morse密码。
使用CyberChef,链接:https://ctf.mzy0.com/CyberChef3/
得到关键字:
_UNC7F!!!
—> 小写 —>
_unc7f!!!
(我就因为没有小写,然后解压不开flag.zip,卡了半天)
所以正确的密码是:
Go_p1ay_unc7f!!!
- 解压flag.zip,得到flag:
flag{M1sic_1s_greAt}
7.清和fan-江西警察学院
去哔哩哔哩搜索清和,第一个就是,它的内容刚刚好和手办有关系。
所以解压密码为:
MKM.png
有lsb隐写,所以解压密码为:qq857488580
,解压阿和的真实竟然身份是?.zip
神秘电波.wav
,打开一听就是rot36,再加上36s我更加确定,我使用的是MMSSTV
又得到关键字:
V@mpir3
,解压
flag.zip
- 打开
flag.txt
,这一看就是有零宽。
unctf{wha1e_wants_a_girlfriend_like_alicia}
8.芝麻开门-广东海洋大学
- 打开
key.txt
,找到最下面的a2V5MQ==
—> base64 —>key1
- 在StegSolve观察了一下,明显有lsb,再加上给了密码,所以使用
cloacked-pixel
- 打开
out
就是看到flag了
flag{faf5bdd5-ba3d-11da-ad31-d33d75182f1b}
然后改一下格式:
UNCTF{faf5bdd5-ba3d-11da-ad31-d33d75182f1b}
9.In_the_Morse_Garden-陆军工程大学
- 打开
In_the_Morse_Garden.pdf
UNCTF{5L6d5Y+k5q+U5Y+k546b5Y2h5be05Y2h546b5Y2h5be05Y2hIOS+neWPpOavlOWPpOeOm +WNoeW3tOWNoSDnjpvljaHlt7TljaHkvp3lj6Tmr5Tlj6Qg5L6d5Y+k5q+U5Y+k5L6d5Y+k5q+U5Y+k5 46b5Y2h5be05Y2h546b5Y2h5be05Y2h5L6d5Y+k5q+U5Y+k546b5Y2h5be05Y2hIOS+neWPpOavlO WPpOeOm+WNoeW3tOWNoSDnjpvljaHlt7TljaHkvp3lj6Tmr5Tlj6Qg5L6d5Y+k5q+U5Y+k5L6d5Y+k 5q+U5Y+k546b5Y2h5be05Y2h546b5Y2h5be05Y2h5L6d5Y+k5q+U5Y+k546b5Y2h5be05Y2hIOeOm +WNoeW3tOWNoeeOm+WNoeW3tOWNoSDkvp3lj6Tmr5Tlj6TnjpvljaHlt7TljaEg546b5Y2h5be05Y 2h5L6d5Y+k5q+U5Y+k546b5Y2h5be05Y2hIOS+neWPpOavlOWPpOeOm+WNoeW3tOWNoSDkvp3 lj6Tmr5Tlj6Tkvp3lj6Tmr5Tlj6TnjpvljaHlt7TljaHnjpvljaHlt7TljaHkvp3lj6Tmr5Tlj6TnjpvljaHlt7TljaEg54 6b5Y2h5be05Y2h5L6d5Y+k5q+U5Y+k5L6d5Y+k5q+U5Y+k5L6d5Y+k5q+U5Y+kIOS+neWPpOavlOW PpOeOm+WNoeW3tOWNoSDnjpvljaHlt7TljaHkvp3lj6Tmr5Tlj6TnjpvljaHlt7TljaEg5L6d5Y+k5q+U5Y +k546b5Y2h5be05Y2hIOS+neWPpOavlOWPpOeOm+WNoeW3tOWNoSDkvp3lj6Tmr5Tlj6Tnjpvlja Hlt7TljaEg5L6d5Y+k5q+U5Y+k546b5Y2h5be05Y2hIOS+neWPpOavlOWPpOeOm+WNoeW3tOWN oSDnjpvljaHlt7TljaHkvp3lj6Tmr5Tlj6TnjpvljaHlt7TljaHkvp3lj6Tmr5Tlj6TnjpvljaHlt7TljaHnjpvljaHlt7T ljaE=}
- base64解码
依古比古玛卡巴卡玛卡巴卡 依古比古玛卡巴卡 玛卡巴卡依古比古 依古比古依古比古玛卡巴卡玛卡巴卡依古比古玛卡巴卡 依古比古玛卡巴卡 玛卡巴卡依古比古 依古比古依古比古玛卡巴卡玛卡巴卡依古比古玛卡巴卡 玛卡巴卡玛卡巴卡 依古比古玛卡巴卡 玛卡巴卡依古比古玛卡巴卡 依古比古玛卡巴卡 依古比古依古比古玛卡巴卡玛卡巴卡依古比古玛卡巴卡 玛卡巴卡依古比古依古比古依古比古 依古比古玛卡巴卡 玛卡巴卡依古比古玛卡巴卡 依古比古玛卡巴卡 依古比古玛卡巴卡 依古比古玛卡巴卡 依古比古玛卡巴卡 依古比古玛卡巴卡 玛卡巴卡依古比古玛卡巴卡依古比古玛卡巴卡玛卡巴卡
根据题目的Morse的提示,所以这是摩斯密码。
摩斯密码在线网站:
http://www.all-tool.cn/Tools/morse/
UNCTF{WAN_AN_MAKA_BAKAAAAA!}
10.我小心海也绝非鳝类-中国计量大学现代科技学院
- 010editor打开
我小心海也绝非鳝类.png
,发现尾部base64字符串。
RUFTWUxTQg==
—> base64 —>
EASYLSB
,得到关键信息:
EASYLSB
得到关键信息:
flaginmd5
- 使用
cloacked-pixel
- 得到out
8FA14CDD754F91CC6554C9E71929CCE72DB95E8E1A9267B7A1188556B2013B330CC175B9C0F1B6A831C399E269772661B2F5FF47436671B6E533D8DC3614845DF95B70FDC3088560732A5AC135644506F1290186A5D0B1CEAB27F4E77C0C5D68E1671797C52E15F763380B45E841EC322DB95E8E1A9267B7A1188556B2013B334A8A08F09D37B73795649038408B5F33D95679752134A2D9EB61DBD7B91C4BCC6F8F57715090DA2632453988D9A1501BE1671797C52E15F763380B45E841EC32B14A7B8059D9C055954C92674CE60032E358EFA489F58062F10DD7316B65649ED95679752134A2D9EB61DBD7B91C4BCCB14A7B8059D9C055954C92674CE600326F8F57715090DA2632453988D9A1501B865C0C0B4AB0E063E5CAA3387C1A874103C7C0ACE395D80182DB07AE2C30F0344A8A08F09D37B73795649038408B5F33CBB184DD8E05C9709E5DCAEDAA0495CF
- 根据提示md5,md5的话是32位
out的文本内容能被32整除,所以大概率就是32位md5代表一个字符,和本次比赛的Crypto方向的md5-1,基本一模一样。写个python代码:
import string
import hashlib
# 1.create dic
dic ={hashlib.md5(i.encode()).hexdigest().upper(): i for i in string.printable}withopen("out.txt","r")as f:
data = f.read()for i inrange(0,len(data),32):print(dic.get(data[i:i+32]), end="")
flag{welcome_to_misc}
改一下格式:
UNCTF{welcome_to_misc}
11.剥茧抽丝-内蒙古警察职业学院
这题我的wp应该是非常规解法,为什么是非常规,这个锅必须
sublime text
背!!!
1.txt
可以看到是有零宽的
很明显,我得到了乱码,所以这个地方我开始就没做出来。
- 我先来说出题人的正确想法:
2.txt
的crc32是
1E153DBB
,原本的
1.txt
的crc32是
5CE71FFF
,所以这两个内容肯定不相同,所以不能明文攻击。
但是,你只要自己新建一个文件,然后写上
线索就在眼前,你能利用并找到flag吗
现在crc32和文件里面的crc32一样了,现在可以用压缩攻击压缩然后明文攻击了。
- 说完出题人,现在说我的解法:
我为什么没有人出题人的解法呢?因为
sublime text
首先,我复制了
1.txt
的内容到了
1 - 副本.txt
,然后我把能看见的零宽字符删掉了,也就下图这样:
crc32显示
c5c55f26
,所以我就没办法明文攻击了。
可能有人就好奇了,为什么你把零宽都删掉了,怎么crc32不一样啊,有没有一种可能,我根本就没把零宽字符删干净,我们把
1 - 副本.txt
复制到kali里面去。
使用vim打开,你会发现还有一堆的零宽字符,所以说我们根本没有删干净,但是sublime text上面并没有显示零宽字符了!
所以我就没办法明文攻击,但是虽然不能攻击2.txt,但是我们可以攻击flag.zip。
为什么可以攻击flag.zip,这是因flag.zip的算法为
ZipCrypto Store
- 实现攻击的仓库是用的
https://github.com/kimci86/bkcrack
,不太会的可以看我之前的一个视频教程,戳我打开。
首先我构造了一个zip的文件尾部,但是我当时也没有把握能攻击出来,因为压缩文件如果有注释的话,那我百分比攻击不出来,有注释的话偏移就变了。(也就是以前在这个位置上,现在不在这个位置了)
攻击命令如下:
-o 239
是根据
flag.zip的大小 - 22字节
得到的。
-x 0 504B03041400
这个是zip的文件头部。
可以看到成功得到了12字节的key。
修改压缩包的密码为
easy
- 使用密码
easy
去解压,得到一个新的flag.zip
,这里面就是flag了,但是需要密码
这个压缩包的密码就在一开始零宽里面。
然后我们下载解密后的隐藏数据,使用sublime text打开
密码:
PAsS_w0rD
这个地方花了我很久时间,因为我是真的忘记了还可以隐藏二进制数据,因为上面的文本一直得不到有意义的文字,我滑动到了下面的窗口,然后我试了一下,果然是二进制数据。
解压
新的flag.zip
,得到flag:
unctf{d4a3a242-cd32-4dd5-bac6-84bdf13f527f}
改一下格式:
UNCTF{d4a3a242-cd32-4dd5-bac6-84bdf13f527f}
12.MY PICTURE-信阳师范
Picture
添加后缀zip,解压,得到两个文件:dat
和flag.png
dat
用010editor打开乱码,所以我就用我的脚本试了一下,也就是检测文件头和文件尾的,出来了异或0x8e
这个时候就有人说了,那我没有你的脚本这题咋办呢??也好办!
你的电脑肯定有python吧,
pip3 install xortool
,pip3或者pip都可以,只要你能安装这个库到你的python3上就可以。
使用
xortool.exe -c 00 dat
这个
0.out
打开一看你会发现就是zip的了,这个
xortool
会自动帮你进行检测然后保存。
-c 00 一般软件或者文件使用, -c 20 一般是文本文件使用
- 我当时没有使用xortool,所以我使用010editor对文件进行二进制异或,操作如下:
无符号字节,操作数8e,十六进制,确定。
一看就是zip了,修改备注为zip,没有密码,解压得到
encode.py
from PIL import Image as im
flag = im.open('flag.jpg','r')
l,h=flag.size
puzzle=im.new('RGB',(h,l))print(puzzle)for i inrange(l):for j inrange(h):
r,g,b=flag.getpixel((i,j))
r=r^g
g=g^b
b=b^r
puzzle.putpixel(((i*787+j)//1200,(i*787+j)%1200),(b,g,r))
puzzle.save('flag.png')
flag.close()
puzzle.close()
根据加密流程写一个解密:
from PIL import Image
img = Image.open("flag.png")withopen("bgr.txt","w")as f:for x inrange(img.width):for y inrange(img.height):
b, g, r = img.getpixel((x, y))
b = b ^ r
g = g ^ b
r = r ^ g
f.write(f"{b}{g}{r}"+"\n")
如果你实在不知道为什么要向上面那样写解密脚本:
# 这是刚刚的加密,解密的脚本
r, g, b =3,4,5# 加密
r = r ^ g
g = g ^ b
b = b ^ r
print(r, g, b)# 解密
b = b ^ r
g = g ^ b
r = r ^ g
print(r, g, b)
运行结果:
7 1 2
3 4 5
所以说有时候加密流程搞不懂,你就写个demo试试。
运行解密脚本后,会得到一个
bgr.txt
文件
运行该脚本之前,手动新建一个
images
的文件夹,因为我这个脚本会把图片写入的
images
的文件夹里面。
import cv2
import numpy as np
withopen("bgr.txt","r")as f:
data = f.read().splitlines()
img =[]for line in data:
img.append(list(map(lambda x:int(x), line.split(" "))))
img = np.array(img, dtype=np.uint8)for width, height in{1:944400,2:472200,3:314800,4:236100,5:188880,6:157400,8:118050,10:94440,12:78700,15:62960,16:59025,20:47220,24:39350,25:37776,30:31480,40:23610,48:19675,50:18888,60:15740,75:12592,80:11805,100:9444,120:7870,150:6296,200:4722,240:3935,300:3148,400:2361,600:1574,787:1200,1200:787,1574:600,2361:400,3148:300,3935:240,4722:200,6296:150,7870:120,9444:100,11805:80,12592:75,15740:60,18888:50,19675:48,23610:40,31480:30,37776:25,39350:24,47220:20,59025:16,62960:15,78700:12,94440:10,118050:8,157400:6,188880:5,236100:4,314800:3,472200:2}.items():
img = img.reshape(height, width,3)
cv2.imwrite(f"./images/{width}_{height}.png", img)
images目录下面出现了很多的图片了
我们肉眼可以看到
1200x787.png
是一张完美的图片,我们打开后,左转90°,再垂直翻转一下,就得到了flag。
UNCTF{93bb442f-2a76-2b6f-c42f-c2297f5fdaf9}
补充:
我是如何得到那些宽高的?
bgr.txt
一共有944400个像素点,我们就找能被整除的数,也就是假设一个width,如果944400 % width == 0,那你们能被整除,那它们就有可能是真实的宽度和高度。
'''
Example:
N = 61366
输出:
{1: 61366, 2: 30683, 61: 1006, 122: 503, 503: 122, 1006: 61, 30683: 2}
{X1: Y1, X2: Y2, ..., Xn: Yn}
'''import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-t',type=int, default=None, required=True,help='输入数字')
args = parser.parse_args()
N = args.t
ret ={X:int(N / X)for X inrange(1, N)if N % X ==0}print(f"一共有 {len(ret)} 种情况:")print(ret)
13.CatchJerry-华中科技大学
题干:
Tom和Jerry是一对欢喜冤家,这天Jerry偷走了芝士,Tom需要把他抓回来。
Jerry一会跳到屏幕上,一会跳到键盘上,Tom很是头晕。
你能帮助Tom看清Jerry的踪迹吗?
说明:
flag内容由若干大写英文单词组成,单词间以"_"间隔,flag格式:UNCTF{解出的字符串}
- 下载文件后,得到了一个流量包,打开分析了一下基本都是usb流量。
过滤命令:tshark.exe -r .\CatchJerry.pcapng -Y "usbhid.data" -T fields -e usbhid.data > out.txt
out.txt:
0000000000000000
0000010000000100
0000010000000100
0000020000000200
0000010000000100
0000020000000200
...
使用代码把这个数据转换为鼠标的坐标:
withopen("out.txt","r")as f:
keys = f.read().splitlines()withopen("LEFT.txt","w")as left,open("RIGHT.txt","w")as right,open("ALL.txt","w")asall:
posx, posy =0,0for line in keys:
x =int(line[2:4],16)
y =int(line[5:7],16)if x >127:
x -=256if y >115:
y -=256
posx += x
posy += y
# 1 for left , 2 for right , 0 for nothing
btn_flag =int(line[:2],16)if btn_flag ==1:# 1 代表左键,2代表右键
left.write(f'{posx}{str(-posy)}'+'\n')elif btn_flag ==2:
right.write(f'{posx}{str(-posy)}'+'\n')all.write(f'{posx}{str(-posy)}'+'\n')
得到3个文件分别是
ALL.TXT
,
LEFT.txt
,
RIGHT.txt
,
RIGHT.txt
没有内容,也就是说没有右键的流量。
复制
LEFT.txt
到kali中,安装
gnuplot
,不会安装的百度一下。
得到关键字:
TOM
,
JERRY
,
FRIENDS
根据题干所以还有flag在键盘流量里面,但是我们如果在
wireshark
中过滤器用
usb.capdata
,你会发现没有任何流量,所以说键盘的流量也在
usbhid.data
里面。
根据 USB协议数据部分在Leftover Capture Data域中,数据长度为八个字节,刚好所有数据都是八字节。
击键信息集中在第3个字节,每次击键都会产生一个数据包。
所以下面的代码就是读取第3个字节,然后输出键盘按键的信息。
mappings ={0x04:"A",0x05:"B",0x06:"C",0x07:"D",0x08:"E",0x09:"F",0x0A:"G",0x0B:"H",0x0C:"I",0x0D:"J",0x0E:"K",0x0F:"L",0x10:"M",0x11:"N",0x12:"O",0x13:"P",0x14:"Q",0x15:"R",0x16:"S",0x17:"T",0x18:"U",0x19:"V",0x1A:"W",0x1B:"X",0x1C:"Y",0x1D:"Z",0x1E:"1",0x1F:"2",0x20:"3",0x21:"4",0x22:"5",0x23:"6",0x24:"7",0x25:"8",0x26:"9",0x27:"0",0x28:"\n",0x2a:"[DEL]",0X2B:" ",0x2C:" ",0x2D:"-",0x2E:"=",0x2F:"[",0x30:"]",0x31:"\\",0x32:"~",0x33:";",0x34:"'",0x36:",",0x37:"."}
nums =[]withopen('out.txt',"r")as f:
data = f.read().splitlines()for i in data:
num =int(i[4:6],16)if num in mappings:print(mappings[num], end="")
得到关键字:
AND
,
BEST
所以flag为:
UNCTF{TOM_AND_JERRY_BEST_FRIENDS}
14.贝斯家族的侵略-中国地质大学武汉
提示1:如果明文攻击失败,尝试使用bandzip
提示2:会动的鼠标
- 使用bandzip,极限压缩然后明文攻击。
得到密码:
b4s31sN1ce
- 解压文件,打开
flag
的文件
一堆base64,base64隐写了,用我的软件也可以,因为软件偷懒没写多线程,然后这个base64文本又比较多,所以会出现卡死,但是并不是真的死了,需要稍微等一会,Github链接:https://github.com/Byxs20/Base64-Tools,打开后在右边的Release下载。(目前最新版本已经增加多线程,但是由于这个base64文本40mb,文本添加到输出框的时候还是会有点小卡顿,请等一会儿!)
复制下面的然后粘贴到CyberChef上面
然后保存这个文件保存下来
这个时候,就开始难起来了,
Macro
翻译是宏,
.mrd
这个格式找了半天也没找到啥软件。
不过我的思路就是肯定是一款软件,而且他是鼠标宏的,因为
提示2:会动的鼠标
,鼠标和宏一起,就是鼠标宏,鼠标宏才会动,鼠标是不会莫名其妙的移动的。
现在就是必须要找到那款软件。
最终下载了一款叫
MacroRecorder
的软件,官网链接:https://www.dcode.fr/solveur-sudoku
打开
Macro.mrd
这个时候打开画图软件,点一下Play
你的鼠标就会变成移动的鼠标喽~嘎嘎乱动
UNCTF{b4s3_1s_v3ry_g0od!!}
15.峰回路转-内蒙古警察职业学院
这个时候距离比赛还有4小时左右,我一觉睡醒,这题0解变成2解,我一看就知道排名掉了,果然20名开外,然后我就硬肝这题了,还好肝出来了!
提示1:带密码的eye
- 这两个文件,肯定是可以crc32爆破的,我用的是我开源项目:Byxs20/zip-crc-tools
如果使用我的项目的话,需要手动去添加一些字符集,添加字符集,才可被爆破出来,不然爆破不出来;另外这个crc32的项目也是需要手动下载的,详细看我github项目的食用教程!
配置好后,运行效果如下:
2.txt
对应
W0RD
,
3.txt
对应
P@Ss
,组合一起就是
W0RDP@Ss
,去解压这个zip,没成功。
然后我把顺序换了一下,使用
P@SsW0RD
这个密码解压就成功了!
- 这个图片的隐写完全就是多尝试了,我也是试了好久。
为什么要这样?因为bmp里面没有密码可以更改了,而且提示是
带密码的eye
,但是bmp就没有密码修改的地方,所以我想起来了之前bugku做的一道题目,就是用了上面的手段,题目叫什么我忘记了。
所以我就各种尝试,最后试出来了:
Image quality: normal,Type:AES256,Key:P@SsW0RD
。
- 这一步的时候,
flag.txt
是加密的,而看好你.jpg
是没有加密的。
- 大胆猜测伪加密,直接010editor改了一下
- 现在一看就没有密码了吧
flag.txt
内容如下:
3(%2 .V%QSQTP KRPV_K" 'RKPWS KWQ%Q'W$QWPS".
还有一张图片
看好你.jpg
:
- 我还以为还有隐写,试了很多工具,试了
3(%2 .V%QSQTP KRPV_K" 'RKPWS KWQ%Q'W$QWPS".
和P@SsW0RD
作为密码,都没成功,又卡住了。 - 我就试了rot47甚至在cyberchef中各种尝试
- 我也试过xortool,不太行,可能是因为这个的字符太少了;最后原来还是xor。
UNCTFH0C75726F-4609-DFA4-615F-17C7A1B7165DH
- 这个一看就是uuid生成的flag,根据uuid的格式
8-4-4-4-12
,很明显就能知道,需要替换那两个英文字符喽!
UNCTF{0C75726F-4609-DFA4-615F-17C7A1B7165D}
版权归原作者 Byxs20 所有, 如有侵权,请联系我们删除。