首页 > 其他分享 >[WUSTCTF2020]B@se

[WUSTCTF2020]B@se

时间:2022-12-04 15:57:42浏览次数:51  
标签:脚本 字符 join WUSTCTF2020 base64 hex se string

题目附件内容:

 

 

 首先通过观察题目字符特征很明显是base64编码,第一行的密文是通过下面给的base64的变表,但是仔细观察缺少了四个字符,因此我们需要写脚本把缺少的字符给还原出来

爆破脚本:

import string
c = 'JASGBWcQPRXEFLbCDIlmnHUVKTYZdMovwipatNOefghq56rs****kxyz012789+/'
for i in string.ascii_letters + string.digits: # string.ascii_letters所有字母 string.digits所有数字
if(i not in c):
print(i,end='')
# ju34

很明显爆破出来的是“ju34”,但是我们还不知道他的原始排列的顺序是什么?,因此需要我们对着四个字符与密文进行一个排列组合,并可以解出明文。
代码如下(这里是参考了一些大佬的脚本):
import binascii
import itertools
cipher = 'MyLkTaP3FaA7KOWjTmKkVjWjVzKjdeNvTnAjoH9iZOIvTeHbvD' # 全排列组合
s = ['j','u','3','4']
for i in itertools.permutations(s,4): # 4就是把s列表里的字母4个为一组排列
k = "JASGBWcQPRXEFLbCDIlmnHUVKTYZdMovwipatNOefghq56rs"+ "".join(i) + "kxyz012789+/" # "".join(i)排列的结果(join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串)
a = ""
for j in cipher:
a += bin(k.index(j))[2:].zfill(6)
print(binascii.a2b_hex(hex(eval("0b"+a))[2:-1])) # a2b_hex和binascii.unhexlify可以为16进制的 bytes 类型,也可以为十六进制 str 类型
# 举例:这里转为16进制后会出现0x471L,所以只有去掉0x和L就有了[2:-1]

运行结果:

 

 

 很明显图中框出来的地方就是最后的flag值

总结:此题考察了缺损的base64变表,需要使用爆破脚本破解出明文。

 
 

 

标签:脚本,字符,join,WUSTCTF2020,base64,hex,se,string
From: https://www.cnblogs.com/Rebirth-Dream/p/16949998.html

相关文章