蓝盾杯-base64
2017-10-28 本文已影响0人
2mpossible
之前有想过是base64隐写,但是由于没有找到base64字符串所以最后也就没做出来。今天经大佬提点找到了流量包中的base64字符串也就顺便做出来了
0x1
首先在流量包中找到隐藏在其中的base64字符串,
在这里发现一共有17个txt,每个txt里面都有base64字符串
分别把他们扣下来
然后对其中一个base64解码看看 会发现解码后还是几行base64
这就让我想到了之前看到师傅的一篇有关base64隐写的文章
https://www.tuicool.com/articles/RRr2miE
0x2
于是写脚本把全部的第一层base64先解码,再用脚本跑隐写
import base64
b64=""
for i in range(17):
file="base64/"+str(i)+".txt"
f=open(file)
base=f.read()
b64+=base
f.close()
base64_decode=base64.b64decode(b64)
print base64_decode
with open("base64/base64.txt","w") as f1:
f1.write(base64_decode)
f1.close()
然后再用师傅现成的脚本跑一跑出结果
def get_base64_diff_value(s1, s2):
base64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
res = 0
for i in xrange(len(s2)):
if s1[i] != s2[i]:
return abs(base64chars.index(s1[i]) - base64chars.index(s2[i]))
return res
def solve_stego():
with open('base64/base64.txt', 'rb') as f:
file_lines = f.readlines()
bin_str = ''
for line in file_lines:
steg_line = line.replace('\n', '')
norm_line = line.replace('\n', '').decode('base64').encode('base64').replace('\n', '')
diff = get_base64_diff_value(steg_line, norm_line)
pads_num = steg_line.count('=')
if diff:
bin_str += bin(diff)[2:].zfill(pads_num * 2)
else:
bin_str += '0' * pads_num * 2
res_str = ''
for i in xrange(0, len(bin_str), 8):
res_str += chr(int(bin_str[i:i+8], 2))
print res_str
solve_stego()