前言
这次参加2020安洵杯CTF,感觉题目都并不是很难,除了web题,但是要狠狠的吐槽这个平台,太无语了,一直挂一直掉,提交flag一直卡,时不时网站直接404,简直无语了,下次这样就不想打了,没心情打。还好,第一次参加这个比赛取得了第32名的名次,虽然没有进前十,不过都尽力了,毕竟我太菜了,继续加油,争取下次打进线下。
题目附件链接:https://pan.baidu.com/s/1MfI7mcOUaUBAUlqBomHPEw 密码:pt72
MISC——签到
题目附件是一个jpg的二维码,扫码关注微信公众号
打开word文档把里面的
打开word文档把里面的表情解码一下就获得flag
解码网站http://www.atoolbox.net/Tool.php?Id=937
MISC——王牌特工
题目给的一个附件不知道是什么文件,直接在kali用file命令查询一波,结果是一个磁盘
然后挂载磁盘,发现里面有一个key.txt,打开一看有一个key和一个线索提示要使用的工具VeraCrypt
打开VeraCrypt工具选择这个挂载的磁盘flagbox,点击Mount挂载需要输入密码,我们可以输入key.txt密码点击ok即可在window系统挂载
打开M磁盘里面的flag.txt居然是一个假的flag。。。。。。
然后根据他给的提示,回过头看看走过的路???那应该是在前面kali挂载硬盘那里的解题步骤应该缺了某个细节吧?
接着再用strings命令使用查询key继续查看有一个隐藏的cool.key文件,我猜应该是一个真flag吧。
但是我开始挂载上去是没有看到的,我猜是不是文件被删了,尝试恢复一波
注:这里要说一个细节,做以下步骤先把上面kali挂载的磁盘先卸载
我们使用kali里面的一个磁盘恢复数据软件extundelete
安装工具完之后再挂磁盘上去
这里可以看到磁盘里面真的有两个文件被删除了,一般系统删了文件并不是完全在电脑完全移除,而是还会停留一段时间,系统的默认机制
话不多说,直接恢复一波
得出的一串base64编码,解码一下
然后再拿这个真的密码再用这个软件再挂上去
细心的人就会发现假的密码和真的密码挂载出来的磁盘大小是不一样的,而且最右边的类型是标明是隐藏的
flag{you_are_a_cool_boy}
MISC——套娃
压缩包有密码,但是password1文件夹里面的文本都是2字节,熟悉的CRC32碰撞
脚本运行环境是python2
#coding:utf-8
import binascii
import string
dic = string.printable
crc = 0xd6bb1bef # 记得要以0x开头
def CrackCrc(crc):
for i in dic :
for j in dic:
s=i+j
if crc == (binascii.crc32(s) & 0xffffffff):
print s
CrackCrc(crc)
注:在第八行代码那里以此类推输入每个文本的CRC32校验码进行CRC32碰撞
密码就是!qQIdEa@#!z)
解开又来继续解密码,真烦。。。。
先进行伪加密破解一下压缩包,居然redeme.txt能成功解开
这里仔细看了一下,redeme.txt和redeme.txt—副本,这两个文本是一样的原始大小,CRC32校验码也是一样的,所以直接明文攻击,这里要注意,当时我解题的时候用的压缩工具是bandizip一直攻击失败。
所以我就用winrar压缩工具选择zip格式压缩,就攻击成功,密码是%3#c$v!@
因为winrar工具的压缩算法是和win系统适配比较好,所以我居然没想到,害我浪费那么多时间,幸好能解开出来,winrar(yyds)
解开压缩包看到flag.txt里面是一串base64多次编码,写个多重解码base64脚本
得出一个栅栏密码再去解一下得出flag
flag{zip&crc_we_can_do_it}
MISC——BeCare4
题目给的附件就一个文本和一个加密的7z,翻译这段文字也没啥什么好看的,就按常规的解题思路,文本的话可能会存在宽字节隐写,直接去解一下
宽字节隐写网站https://yuanfux.github.io/zero-width-web/
密码是RealV1siBle
解压后一张美女的jpg图
就用SilentEye解,这个图应该就是LSB隐写,刚好这个软件是将信息隐藏到图像和声音中(LSB),完美直接拿flag,真简单
Crypto——密码学?爆破就行了
题目给的附件是一个sha256加密部分flag的脚本
直接根据题目的脚本写一个sha256解密脚本
import hashlib
broken_flag= '71b2b5616**2a4639**7d979**de964c'
str1="d0g3{71b2b5616"
str2="2a4639"
str3="7d979"
str4="de964c}"
cipher='0596d989a2938e16bcc5d6f89ce709ad9f64d36316ab80408cb6b89b3d7f064a'
def getdigest(content):
return hashlib.sha256(content).hexdigest()
alphabet="1234567890abcdef"
for a in alphabet:
for b in alphabet:
for c in alphabet:
for d in alphabet:
for e in alphabet:
for f in alphabet:
string=str1+a+b+str2+c+d+str3+e+f+str4
if getdigest(string)==cipher:
print string
跑一下得出flag
d0g3{71b2b5616ee2a4639a07d979ebde964c}