BUUCTF-刷题记录-5

MISC

[GKCTF2020]code obfuscation

把给的二维码缩小一下,截个图,就可以用QR扫出来了,得到一个base(gkctf),同时binwalk分离出来一个存在密码的压缩包,猜测是某种base方法得到的结果为压缩包的密码。

最后尝试出来base58编码后的gkctf即为压缩包的密码,即CfjxaPF
解压出来一张图片和一段JS代码,JS代码去这个在线网站解密并且整理一下,得到

for n in a b c d e f g h i j k l m n o p q r s t u v w x y z do eval An = "n"
done
for n in A B C D E F G H I J K L M N O P Q R S T U V W X Y Z do eval An = "n"
done num = 0
for n in a b c d e f g h i j do eval Bn = "n"
num = $((num + 1)) 
done alert("Bk=' ';Bm='"';Bn='#';Bs='(';Bt=')';By='.';Cb=';';Cc=' < ';Ce=' > ';Cl='_';Cn='{';Cp='}';Da='0';Db='1';Dc='2';Dd='3';De='4';Df='5';Dg='6';Dh='7';Di='8';Dj='9';")

再把图片中的内容一一对换即可,最后得到flag{w3lc0me_4o_9kct5}

[安洵杯 2019]easy misc

压缩包有个密码,而且有注释

计算可得前面的算式答案为7

也就是密码应该为7位数字+NNULLULL,,爆破一下即可得到密码2019456NNULLULL,,注意最后的,

给的一张图片里面分离出来两张一样的图片,盲水印处理,得到提示


根据解压出来的东西和这个提示,猜测是统计11.txt的字频,然后取其前16个字符,替换一下,再进行一个解码,这里把文件中的空格和制表符也放进去一起统计了,脚本如下

alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()_+-  ={}[]"
f = open("11.txt", "r")
data = f.read()
result = {d:0 for d in alphabet}
 
def sort_by_value(d):
    items = d.items()
    backitems = [[v[1],v[0]] for v in items]
    backitems.sort(reverse=True)
    return [ backitems[i][1] for i in range(0,len(backitems))]

for d in data:
    for alpha in alphabet:
        if d == alpha:
            result[alpha] = result[alpha] + 1
print(sort_by_value(result))
print(''.join(sort_by_value(result)))

得到结果

etaonrhisdluygw

替换一下,得到

QW8obWdIWT9pMkF5REtRQSQWjVfXiE/WSFTajBtcw=

但是这题网上的解是有点奇怪的。。。为什么网上都是得到

QW8obWdIWT9pMkFSQWtRQjVfXiE/WSFTajBtcw==

无缘无故的去掉了两个字符,然后还更换了i和s的顺序,可能是题目出了点问题,根据这个,base64解码得到

Ao(mgHY?i2ARAkQB5_^!?Y!Sj0ms

再进行base85解码得到flag{have_a_good_day1}

派大星的烦恼

根据题目的提示,在图片中发现了一段0x22和0x44,提取出来

"换成0,D换成1,刚好一共是256个字符
直接按照顺序每8个二进制数,转换成字符的话,是乱码的

然后尝试反向输出,取每8位二进制数,反向输出字符,得到了flag

s = "0110110000101100000011000110110010011100101011000000110010000110101011000010110010001100000111000010110001000110001001101010110001100110101001100110110001000110011011001010011010101100010001100010110011000110101001100010110011001100000111001100110001001100"
flag= ""

for i in range(0,len(s),8):
    flag += chr(int(s[i:i+8][::-1],2))
    # flag += chr(int(s[i:i+8],2))

print(flag)
# 6406950a54184bd5fe6b6e5b4ce43832

[GKCTF2020]Harley Quinn


在图片的末端发现两段字符,像是base64,但是解码出来都是乱码
在音频的最后一段听见一段电话音,题目里面的提示也说了电话音,将电话音给剪出来,用dtmf2num工具识别一下,得到

也就是

22283334447777338866

对比频谱图发现,少了一位,加上去之后就是

222833344477773338866

然后根据提示九宫格,得到

ctfisfun

根据提示Free_File_Camouflage,发现这是一个可以把信息写进文件的软件,下载这个软件,解密信息,得到flag.txt

粽子的来历

一共有四个doc,每一个打开都是乱码,而且都有一句类似于这样的话

丢进010,发现是doc文件损坏了,要把每一个Icomefromxxxx这一段话全部改成ff即可修复

发现四个文件的内容全部一样,不过行高不同,把行高大的记作1,小的记作0,按照顺序来得到这个

100111100010
111110010011
100100100001
111100100001

然后按照提示,对其都进行md5加密,最后发现第三个的md5为flag

[MRCTF2020]Unravel!!

图片分离出来一张图片,叫做aes.png

然后在音频的末端发现了一段key

key=U2FsdGVkX1/nSQN+hoHL8OwV9iJB/mSdKk5dmusulz4=

根据图片的名称,去进行aes解密得到CCGandGulu,将得到的压缩包使用slienteye工具进行打开,解码,得到flag

[ACTF新生赛2020]明文攻击

在图片的文件末尾发现了一个文件头损坏的zip,修复之后得到flag.txt,然后进行明文攻击

然后就是明文攻击了,不过这个攻击要等很久很久

flag{3te9_nbb_ahh8}

真的很杂

分离出来一大堆图片和一个压缩包,压缩包解压后似乎是一个安卓应用

然后就是熟悉的安卓的操作了,这里记一下,因为这个总是记不太清,毕竟不是安卓逆向手:(

d2j-dex2jar.bat classes.dex

然后jd-gui打开即可
这里可以看得到flag是需要我们的一个爆破

最后尝试出来flag为flag{25f991b27fcdc2f7a82a2b34386e81c4}

[*CTF2019]otaku

一个doc和一个伪加密的压缩包,使用ZipCenOp工具修复,得到的加密的压缩包里面的文件内容是这样的

doc里面有一段隐藏文字,猜测这一段就是压缩包里面last words.txt的内容,不过把doc转换成txt的时候要注意编码,这题原题是有提示GBK的,还有注意不要把隐藏文字也给复制进去了,使用py即可对txt写入内容进行GBK编码

#encoding=GBK

f = open("last words.txt", "w")
s = "Hello everyone, I am Gilbert. Everyone thought that I was killed, but actually I survived. Now that I have no cash with me and I’m trapped in another country. I can't contact Violet now. She must be desperate to see me and I don't want her to cry for me. I need to pay 300 for the train, and 88 for the meal. Cash or battlenet point are both accepted. I don't play the Hearthstone, and I don't even know what is Rastakhan's Rumble."
f.write(s)
f.close()

本来应该是进行明文攻击的,不过压缩的一直有问题,明文攻击这种题目真的应该少出现,压缩问题太多了,最后这个密码是My_waifu,LSB发现flag

[MRCTF2020]Hello_ misc


LSB发现了一点东西,保存下来,得到压缩包的密码

并且这张图片分离出来一个压缩包,解密得到一个out.txt,一大堆的数字,然后我就没思路了,看到别人是说先把每个数字转换成二进制数字,然后把前面2位取出来重组,最后转换车字符串,脚本如下

with open('out.txt') as a_file:
    content = [x.strip() for x in a_file.readlines()]
bins = []
for i in content:
    bins.append(bin(int(i))[2:].zfill(8)[:2])
stringBins = ''.join(bins)
num = 0
flag = ''
for i in range(int(len(stringBins)/8)):
    flag+=chr(int(stringBins[num:num+8],2))
    num+=8
 
print(flag)
# rar-passwd:0ac1fe6b77be5dbe

刚好得到的是rar的密码,然后解密得到一个doc,最下面有一些白色的字体

base64解密得到的是一大串的10,也就是

110110111111110011110111111111111111111111111111101110000001111111111001101
110110110001101011110111111111111111111111111111111101111111111111110110011
110000101110111011110111111100011111111111001001101110000011111000011111111
110110100001111011110111111011101111111110110110101111111100110111111111111
110110101111111011110111101011101111111110110110101101111100110111111111111
110110100001100000110000001100011100000110110110101110000001111000011111111

简单进行一个替换,发现flagHe1Lo_mi5c~

[BSidesSF2019]zippy

foremost分离出来一个带着密码的压缩包,里面有着flag.txt,追踪tcp流发现密码

解压得到{this_flag_is_your_flag}

[ACTF新生赛2020]music

文件异常,并且有很多的A1,正常情况下m4a的文件头为

00 00 00 20 66 74 79 70 4D 34 41 20 00 00 00 00

这里再次将数据异或一个A1恢复原样,然后直接听出来flag

也就是abcdfghijk

voip

打开流量包,发现都是RTP协议,那就听一下

然后听flag即可flag{9001IVR}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值