2022级新生考核暨2023TYCTF一月赛WP
TYSEC新生考核暨TYCTF一月赛WP
MISC
ty-jump
下载文件后发现为是一个虚拟硬盘格式的文件(.vmdk)
正常情况下可以采取,利用虚拟机打开该虚拟机后进行解题,但也可通过直接将其拖入010Editor进行分析
通过在010Editor中查找TYCTF即可获得flag
你抓周树人,关我鲁迅什么事
下载文件后首先可以得到一个word文档,文档打开后没有发现有价值的信息(甚至可能直接打不开),通过观察发现该文档为(.docx)
的文档,因此我们将文件后缀更改为zip进行解压后继续分析,在media文件夹下发现文件theme.png
发现该文件也不能正常打开,用010Editor查看文件头,发现文件头为50 4B
是个zip文件,修改后缀打开后,得到flag.xml
进而得到一串emoji
1 | 🐰👘👘🐪🐰👜🐮👘🐤🐨👚👙👙🐤🐫🐮👘🐮🐤🐰🐰🐮👜🐤🐧🐰🐮🐫🐪🐯👜🐯🐬🐫👜🐫 |
得到flagTYCTF{9aa39e7a-1cbb-47a7-997e-097438e854e4}
RC4
下载文件后,通过010Editor进行查看,发现文件头为zip文件,一层层的解压下去后可以得到RC4key.zip的加密压缩包
我们将easyrc4.xlsx 拖入010 得到password 解开RC4key.zip 得到密钥
通过RC4解密,得到flag
flag{ef1a73d40977a49b99b871980f355757}
Wireshark
打开流量包,导出对象 http save all
一个一个搞进010 看看有什么线索
发现 %5(1)%5(4)中各含有一张png
提取出来得到
改宽高得到key 联想图片隐藏信息 找到解密网站 得到
解密网站可以用自己做题积累的 也可以用题目提示的 第一张图红框 搜索 图片 即可找到
Hex解码其中包裹的16进制 得到flag
今晚无月亮
图片被修改过宽高,从宽*高得到的图片大小和信息完全不符就能知道
修改宽高后得到完整图片
得到这个,补全二维码定位器得到二维码信息,问的是蓝莲花队名,密码蓝莲花
得到文本信息:
很简单,键盘码呗,对着敲就是MOON,注意下面还有_.也是flag一部分。
luna压缩包用来混淆视听,考察文件头,不累述。
where is flag
改变字体颜色后,发现埃特巴什码解码得到flag
isocad
为四方密码解密
给的提示是小狗在栅栏,那么key2被打乱了顺序,栅栏一下是littlepuppy
得到flag
此地无银三百两
trois为3,改文件头
いち:1:06位置的01改为00伪加密,得到第一部分
2同理
拼接flag
猜猜我是谁
010 Editor
打开,发现文件头是png
的
修改后缀为.png
,得到一张二维码,扫描结果如下:
010 Editor
打开直接搜索文本字符flag
丢失的新年礼物
wireshark
打开分析
过滤http
的包
发现这个包貌似是登陆,我们追踪一下这个包
得到了用户名和密码,我们md5一下即可获得flag
我佛慈悲
首先先处理zip伪加密
得到fo.txt
1 | _ooOoo_ |
直接进行与佛论禅加解密
坐忘道的阴谋
只要进行明文爆破即可得到flag
bindwatermark
附件压缩包里拥有盲水印脚本,执行脚本后即可获得flag
CRYPTO
TYsec-crypto1
找到运行脚本的方法即可
VScode可以对两个文档进行打开
TYsec-crypto2
Quoted-printable编码
在线解码网站:http://web.chacuo.net/charsetquotedprintable
TYsec-crypto3
下载文件后,用普通文本格式打开时,看到的是由不规则的A
B
所构成的一个文本。
我们将文件拖入010Editor打开后进行分析,发现了一些不一样的地方
我们能够看出与原文本不同的是,这里有0A
(也就是回车),应该是按照这里分割的,我们将0A替换成2F,使整个文本变成一段
此时文本全部都有A B和空格构成,猜测是否为摩尔斯电码
发现是可以解出来的,但显然得到的结果并不是我们想要的
1 | BKJOGDTKFOEJ PV GEX OKFBGPBX FSM VGRMJ DI GXBESPZRXV IDK VXBRKX BDHHRSPBFGPDS PS GEX OKXVXSBX DI FMCXKVFKPFW QXEFCPDK, NEPBE PV MPCPMXM PSGD BWFVVPBFW BKJOGDTKFOEJ FSM HDMXKS BKJOGDTKFOEJ. GEX HFPS BWFVVPBFW BPOEXK GJOXV FKX GKFSVODVPGPDS BPOEXKV, NEPBE KXFKKFSTX GEX DKMXK DI WXGGXKV PS F HXVVFTX. FS XFKWJ VRQVGPGRGPDS BPOEXK NFV GEX BFXVFK BPOEXK, PS NEPBE XFBE WXGGXK PS GEX OWFPSGXYG NFV KXOWFBXM QJ F WXGGXK VDHX IPYXM SRHQXK DI ODVPGPDSV IRKGEXK MDNS GEX FWOEFQXG. VPSBX GEX MXCXWDOHXSG DI KDGDK BPOEXK HFBEPSXV PS NDKWM NFK P FSM GEX FMCXSG DI BDHORGXKV PS NDKWM NFK PP, BKJOGDTKFOEJ HXGEDMV EFCX QXBDHX PSBKXFVPSTWJ BDHOWXY FSM PGV FOOWPBFGPDSV HDKX CFKPXM. HDMXKS BKJOGDTKFOEJ PV EXFCPWJ QFVXM DS HFGEXHFGPBFW GEXDKJ FSM BDHORGXK VBPXSBX OKFBGPBX; BKJOGDTKFOEPB FWTDKPGEHV FKX MXVPTSXM FKDRSM BDHORGFGPDSFW EFKMSXVV FVVRHOGPDSV. GEX TKDNGE DI BKJOGDTKFOEPB GXBESDWDTJ EFV KFPVXM F SRHQXK DI WXTFW PVVRXV PS GEX PSIDKHFGPDS FTX. BKJOGDTKFOEJ'V ODGXSGPFW IDK RVX FV F GDDW IDK XVOPDSFTX FSM VXMPGPDS EFV WXM HFSJ TDCXKSHXSGV GD BWFVVPIJ PG FV F NXFODS FSM GD WPHPG DK XCXS OKDEPQPG PGV RVX FSM XYODKG. PS VDHX ARKPVMPBGPDSV NEXKX GEX RVX DI BKJOGDTKFOEJ PV WXTFW, WFNV OXKHPG PSCXVGPTFGDKV GD BDHOXW GEX MPVBWDVRKX DI XSBKJOGPDS LXJV IDK MDBRHXSGV KXWXCFSG GD FS PSCXVGPTFGPDS. BKJOGDTKFOEJ FWVD OWFJV F HFADK KDWX PS MPTPGFW KPTEGV HFSFTXHXSG FSM BDOJKPTEG PSIKPSTXHXSG MPVORGXV PS KXTFKM GD MPTPGFW HXMPF.GEX IWFT PV 1M817I23-4X20-9405-QI6M-X83M055316M6, OWXFVX FMM IWFT VGKPST FSM QKFBXV JDRKVXWI, FSM FWW WXGGXKV FKX WDNXKBFVX. |
这里我们选择将其扔到quipqiup中获得flag
quipqiup: https://quipqiup.com/
TYsec-crypto4
打开python文件后,给变量i
赋值为5,运行代码即可获得flag
TYsec-crypto5
导入qsnctf
的python库
项目的GitHub地址:https://github.com/Moxin1044/qsnctf-python
首先将GitHub上的项目下载下来后可以文件中有一个setup.py
打开终端然后输入
1 | python setup.py install |
或者也可以直接使用pip来进行安装(由于本Python库仍在开发,所以pip可能不是最新版,如果您有较高的需求,可以直接clone本仓库进行安装)
1 | pip install qsnctf |
安装成功会显示
Successfully installed PyExecJS-1.5.1 qsnctf-0.0.4
如果你想知道具体怎么使用可以导入这个包,然后使用help(qsnctf)
查看库的用法
1 | >>> import qsnctf |
然后使用help(qsnctf.PACKAGE CONTENTS)来查看具体的使用方法
安装好库之后直接运行python代码即可
TYCTF{welcome_to_use_qsnctf.python}
AES
下载文件后,通过010Editor打开可得到
1 | U2FsdGVkX19QwGkcgD0fTjZxgijRzQOGbCWALh4sRDec2w6xsY/ux53Vuj/AMZBDJ87qyZL5kAf1fmAH4Oe13Iu435bfRBuZgHpnRjTBn5+xsDHONiR3t0+Oa8yG/tOKJMNUauedvMyN4v4QKiFunw== |
根据附件名提示aes加密,密钥根据gif动图得到ISCC,解密两次后得到flag
flag{DugUpADiamondADeepDarkMine}
简单编码
第一步:base100
第二步:base58
即可获得flag
babyrsa
表情符解密:
—–BEGINPUBLICKEY—–MDwwDQYJKoZIhvcNAQEBBQADKwAwKAIhAMAzLFxkrkcYL2wch21CM2kQVFpY9+7+ /AvKr1rzQczdAgMBAAE=—–END PUBLIC KEY—–求出私钥的flag以tysec{}格式提交
注:这里为表情符解密为9 7 ,应为9+7+少了两个+
1 | import rsa #rsa模块 |
base家族
1 | base32 |
1 | base92 |
1 | base58 |
1 | base91 |
1 | base16 |
RE
GetTheTable
进入64位ida,main函数
观察到加密特征表,类似base64加密,根据题目描述和加密过程,猜测是base58加密
HelloWorld
拿到题目先查下壳
64位,没有壳(壳是对代码的加密,起混淆保护的作用,一般用来阻止逆向)
然后拖进IDA(64位)进行反汇编
一般来说,先查看一下字符串,简单的题目会有flag或者敏感数据字符等信息,方便我们定位函数查看字符串的方法为shift+F12
找到了关于flag的信息,双击点进去找到这段字符串的位置
ctrl+x(交叉引用)查看是哪段函数调用了该字符串
点击“OK”进入该段程序,查看汇编代码
汇编代码对于初学者来说读懂比较困难,可以按“F5”查看伪C代码
代码界面如图
下面是详细解读:
第一步,定位
一是定位加密后的flag字符串,而是准确定位加密的函数(如何加密的flag)
一般来说,是先去找引用”flag”的代码段,然后一步步定位到关键部分,找到真正把flag加密的函数,然后手工逆向或者写解密脚本得到真正的flag
第二步,手搓或者写脚本逆向(有些简单的加密方式可以直接手算,节省时间)
大部分题目逆向脚本建议用python写,语法比较简单,写起来比较快
回归正题:
先定位”this is the right flag”代码段
不难猜测 “sub_1400111D1”是”printf”之类的输出函数。
strncmp(str1,str2,v3)是把str1与str2两字符串的前v3位数做一个比较,若str1=str2,返回0;大于返回正数,小于返回负数
if(!strncmp(str1,str2,v3))是一个判断语句,if()括号里面的内容如果为真,则输出
“this is the right flag”,这时我们只需要知道什么情况为真。
然后看括号里面的内容 !( strncmp(str1,str2,v3) )为真的情况
!为非,所以只要( strncmp(str1,str2,v3) )为0, !( strncmp(str1,str2,v3) )即为真;为0的情况已经在上面对strncmp函数的讲解说过了,str1,str2两个字符串相等返回值即为0。
继续往上分析
前面已经讲过sub_1400111D1是print函数,不难猜测sub_14001128F是scanf函数,所以字符串str1为我们输入的内容。接下来看字符串str2.
随便找一个str2,双击点进去之后就找到了str2 ‘{hello_world}’
别忘了我们的程序还没有分析完,继续往上分析
for循环是对str2做了一个转换的处理,str2里面ascii码为111的字符会被转换为ascii码为48的字符,在IDA中,选中数字按”R”键可以将数字转换为字符。
即str2中所有的”o”都被转换成了”0”
得到flag
XOR
Ida32,字符串找关键词,找到main函数,大致看一下,两个关键函数
从下向上
函数411433:
V9为明文,v6(已知)和str(输入)相加所得
函数4115FF:
Str和自身下标异或
脚本:
1 |
|
baby_reverse
脚本:
1 |
|
wasd
1 | __int64 __fastcall main(int a1, char **a2, char **a3) |
其中
从此函数判断v9,v10的意义
v9要乘8,推断一行有8个元素,v9变化1,乘8后上下移动一行
所以v10控制左右移动,v9控制上下移动
再进入4个if中的函数判断,知O–向左,o–向右,.–向上,0–向下
每次输入后也要在次函数判断走到‘ ’(32)或‘#’(35)都对
搞清如何移动后,脚本变一下迷宫格式,
OOXXXXXX 右下
XOOOXOOX 右右下
XXXOXOXX 下
XXOOXOXX 左下
XOOX#OOX 下 左左
XXOXXXOX 下 上
XXOOOOOX 右右右右 上
XXXXXXXX
十八次操作换成指定字符
o0oo00O000oooo..OO