menu Ga1@xy's Wor1d
津门杯 & 红帽杯2021 Misc
1002 浏览 | 2021-05-10 | 阅读时间: 约 2 分钟 | 分类: wp,MISC | 标签: Misc,比赛wp
请注意,本文编写于 162 天前,最后修改于 162 天前,其中某些信息可能已经过时。

两个比赛撞到一天了,还好题量都不是很大,题目难度也不是特别高,不过质量也不是很高,但好歹也忙活了一天,最终以红帽第7,津门34(都去冲红帽了)的成绩收尾,也还算不错,在此简单记录下wp

津门杯

m0usb

最开始以为m0usb是个啥特殊的usb流量,结果放出了m1bmp才知道就是个题目序号:)

流量包里就是usb流量,内容也比较少,先提取出来

tshark -r usb.pcapng -T fields -e usb.capdata | sed '/^\s*$/d' > usbdata.txt

得到只有 1e 1f 21 25 27 这五种数据的流量,只有一字节的信息所以不可能是鼠标流量,而且坐标也不对,尝试按照键盘流量的方式来做

1e → 1
1f → 2
21 → 4
25 → 8
27 → 0

转换成只有 1 2 4 8 0 这五个数字的字符串,解云影密码

884 0 8 0 81 0 8821 0 81 0 8821 0 42 0 84 0 1 0 421
T H I S I S F L A G

得到flag

flag{THISISFLAG}

m1bmp

bmp隐写方式比较少,常见的就是LSB,直接zsteg一把梭了,再解个base64就是flag

flag{l5DGqF1pPzOb2LU919LMaBYS5B1G01FD}

tunnel

翻看流量包可以发现dns流量的域名都是一些奇怪的字符串

我们把第一个奇怪的域名复制出来丢进cyberchef,解base64后可以发现是zip的文件头

用tshark把域名信息过滤提取出来

tshark -r tunnel.pcap -T fields -e ip.src -e dns.qry.name -Y 'dns' | grep '192.168.1.103' | grep 'evil.im' > out.txt

再写个脚本还原压缩包,由于有部分丢包现象,所以要判断一下是否重复

import base64

f = open('out.txt', 'r').readlines()
f1 = open('flag.zip', 'w')
f2 = open('base.txt', 'w')

for i in range(len(f) - 1):
    if f[i] == f[i + 1]:
        continue
    a = f[i][14:].strip().replace('.evil.im', '')
    if len(a) % 4 == 2:
        a += '=='
    if len(a) % 4 == 3:
        a += '='
    #print a
    f2.write(a + '\n')
    f1.write(base64.b64decode(a))

a = 'QQAAAPs0AAAAAA=='    # 把最后一个补上
f2.write(a)
f1.write(base64.b64decode(a))
f1.close()
f2.close()

打开压缩包发现有密码,再结合一堆base64,想到base64隐写,脚本一把梭,得到压缩包密码

password: B@%MG"6FjbS8^c#r

解压得到flag(比赛公告中提到了本题的flag不带符号)

flag{D01nt_5pY_0nmE}

红帽杯

签到

txt打开是乱码,用010打开,复制十六进制,在线网站解一下

flag{we1c0me_t0_redhat2021}

colorful code

根据题目名可以想到一个有关颜色的编程语言(npiet),刚好不久之前的DASCTF三月赛也出过

data1中是数字0~19,共7067个,分解质因数为 37*191

data2中的数据仔细观察可以发现后面的数据都是有规律的填充,而在填充之前有60字节的数据

RGB三通道对应3个字节,总数60/3刚好对应20个数字,所以想到对应数字转换成颜色,先处理一下data2

000000 0000C0 00FFFF 00FF00 FFC0FF FFC0C0 C0C0FF C0C000 FF00FF FF0000 C00000 C000C0 FFFFFF FFFF00 FFFFC0 00C000 00C0C0 C0FFFF C0FFC0 0000FF

根据分解data1数字总长度唯一得到的长和宽画图

from PIL import Image

x = 37
y = 191
im = Image.new("RGB", (x, y))

f1 = open('data1', 'r').read().split(' ')
f2 = open('data2', 'r').read().split(' ')

flag1 = 0
for xx in range(0, x):
    for yy in range(0, y):
        rgb = f2[int(f1[flag1])]
        flag1 += 1
        r = rgb[0:2]
        g = rgb[2:4]
        b = rgb[4:6]
        im.putpixel((xx, yy), (int(r, 16), int(g, 16), int(b, 16)))
im.show()
im.save('out.png')

得到一张图

在线网站识别一下,得到flag

flag{88842f20-fb8c-45c9-ae8f-36135b6a0f11}

需要注意的是一定要保存为png格式,如果是jpg的话会进行有损压缩,无法准确识别到每个像素的信息,就无法得到flag

全部评论

info 评论功能已经关闭了呐!