找回密码
 立即注册
首页 业界区 安全 西电CTF平台——NewStar CTF 2024 WriteUP

西电CTF平台——NewStar CTF 2024 WriteUP

梨恐 昨天 10:32
Week1-Misc杂项

Labyrinth

图片题,kali里file、strings、zsteg命令一顿梭,没有发现。只能用stegsolve工具了,查看各个通道的图片,在green plane 0、Red plane 0、Blue plane 0三个通道都能看到一张二维码。



用在线二维码扫描工具扫一下,结果都是一样的。

decompress(公开赛道)

解压得到decompressit.zip和passwd_regex_hint.txt,打开txt文件,里面有提示。

正则表达式,提示我们密码的格式是3个小写英文字母1个阿拉伯数字1个小写英文字母,根据这个格式生成密码字典。
  1. import stringalpha = string.ascii_lowercasedigit = string.digitsres = []for i in alpha:    for j in alpha:        for k in alpha:            for m in digit:                for n in alpha:                    res.append(i+j+k+m+n)with open("password.txt", "w") as file:    for passwd in res:        file.write(passwd+"\n")
复制代码
进行字典爆破,得到密码为xtr4m。

解压,再把flag.zip.001解压得到flag.txt,拿到flag。

decompress(校内赛道)

解压得到16个文件,只需要bindzip打开flag.zip.001解压出flag.txt。

全部内容计算完md5后,套上flag即可。

flag{c6edaba55bac51875a215e2de11c35dd}
pleasingMusic

audacity打开音频,往后拉能看到明显的摩斯密码特征。

提取出来进行解密,是乱码。
./..-/---/.-.-/-.--.././.../.-./---/--/-.--../..--/.

奇怪了,看下题目描述,一首歌可以好听到正反都好听,将提取出来的摩斯密码倒一下再解密成功。


全部变为小写就是flag。
兑换码

根据题目描述,就可以猜到图片的长和宽和图片的crc校验值不符,需要修改宽高,放到kali里显示不出来也可以验证是这个问题。

先获得图片的crc校验值1c204acf。

利用脚本爆破正确的长款。
  1. import structimport binasciiimport osm = open("./荣花与炎日之途.png", "rb").read()k = 0for i in range(5000):    if k == 1:        break    for j in range(5000):        c = m[12:16] + struct.pack('>i', i) + struct.pack('>i', j) + m[24:29]        crc = binascii.crc32(c) & 0xffffffff        if crc == 0x1c204acf:            k = 1            print(hex(i), hex(j))        # 0xa00 0x4e9            break
复制代码
修改图片的长宽如下。

打开图片拿到flag。

Week1-Crypto 密码学

Base

经过16进制解码,base32解码,base64解码拿到flag。

Strange King

根据“抽锐刻 5 的皇帝”可以想到凯撒密码,“娶了个模,回到原点”说明有取模运算。再对照ksjr和flag之间的映射关系,每次的增量为2。编写脚本:
  1. base = 5ciphertext = "ksjr{EcxvpdErSvcDgdgEzxqjql}"plaintext = ""for i in ciphertext:    if i == "{" or i == "}":        plaintext += i    else:        start = ord("A") if i.isupper() else ord("a")        plaintext += chr((ord(i) - start - base) % 26 + start)    base += 2print(plaintext)        # flag{PleaseDoNotStopLearing}
复制代码
xor

异或的特性:ab=c,ac=b,b^c=a,知道这个就可以写脚本还原了。
  1. from pwn import xorfrom Crypto.Util.number import bytes_to_long, long_to_bytesc1= 8091799978721254458294926060841c2= b';:\x1c1*\x10\x11u;'key = b'New_Star_CTF'flag_first = long_to_bytes(c1 ^ bytes_to_long(key))flag_end = xor(c2, key)print(flag_first+flag_end)        # b'flag{0ops!_you_know_XOR!}'
复制代码
如果没有pwn库,使用pip install pwn命令安装即可。
一眼秒了

最入门的rsa题目了,直接对n进行大素数分解,得到p和q,接下来就轻而易举了。(大素数分解可用在线网站或者yafu工具)
  1. from Crypto.Util.number import *from gmpy2 import *import binasciie = 65537c = 48757373363225981717076130816529380470563968650367175499612268073517990636849798038662283440350470812898424299904371831068541394247432423751879457624606194334196130444478878533092854342610288522236409554286954091860638388043037601371807379269588474814290382239910358697485110591812060488786552463208464541069p = 7221289171488727827673517139597844534869368289455419695964957239047692699919030405800116133805855968123601433247022090070114331842771417566928809956044421q = 7221289171488727827673517139597844534869368289455419695964957239047692699919030405800116133805855968123601433247022090070114331842771417566928809956045093phi_n = (p-1)*(q-1)d = gmpy2.invert(e, phi_n)m = powmod(c,d,p*q)print(long_to_bytes(m))        # b'flag{9cd4b35a-affc-422a-9862-58e1cc3ff8d2}'
复制代码
Week2-Misc杂项

Herta's Study

wireshark打开,导出http对象。

在upload.php里看到一串代码,是base64编码的,还原看一下。

传入的字符串先进行base64编码,然后对字符串中奇数位的字符进行rot13的转换。在多个文件中都可以看到base64编码的字符串,可以一个一个试,真正的字符串在horse.php%3fpayload=type%20f.txt中。
  1. [/code][size=5]wireshark_checkin[/size]
  2. wireshark打开,导出http对象,flag就在flag.txt中。
  3. [align=center][img]https://img2024.cnblogs.com/blog/3369335/202507/3369335-20250701210213661-149020455.png[/img][/align]
  4. [size=5]wireshark_secret[/size]
  5. wireshark打开,导出http对象,flag就在secret.png中。
  6. [align=center][img]https://img2024.cnblogs.com/blog/3369335/202507/3369335-20250701210432097-461320843.png[/img][/align]
  7. [size=5]你也玩原神吗[/size]
  8. 下载得到gif文件,看的时候会看到有东西一闪而过,用stegsolve工具一帧帧查看,第37帧看到内容,保存下来。
  9. [align=center][img]https://img2024.cnblogs.com/blog/3369335/202507/3369335-20250701213544684-12312590.png[/img][/align]
  10. 根据题目关键字原神提瓦特文字搜索得到映射图片。
  11. [align=center][img]https://img2024.cnblogs.com/blog/3369335/202507/3369335-20250701213639771-590419844.png[/img][/align]
  12. 将图片里的文字进行翻译。
  13. 中间5行翻译出来,一堆垃圾,无用。
  14. [code]lorem ipsum dolor sit ametconsectetur adipiscing elitsed do eiusmod temporincididunt ut laborc ctdolorc magna aliqua quis
复制代码
左上角
  1. flagisasentence
复制代码
右上角
  1. iiaaelgtsfkfa
复制代码
左下角
  1. doyouknowfence
复制代码
右下角
  1. mesioaabgnhnsgogmyeiade
复制代码
还需要进行栅栏解密,右上角的是假flag,右下角是真的。

字里行间的秘密

key.txt用sublime工具打开,发现零宽字符,用零宽字符网站解密。


拿到隐藏文本,打开flag.docx文件,需要密码,将隐藏文本输入,打开。

直接全选,复制到sublime中拿到flag。

热心助人的小明同学

内存取证题需要用到volatility神器,kali系统或者windows系统都可以。
使用下述命令即可拿到登录密码。

故flag为flag{ZDFyVDlfdTNlUl9wNHNTdzByRF9IQUNLRVIh}
用溯流仪见证伏特台风

看视频,大概5分50秒左右看到domain和其下方的内容,但是不清晰。

直接豆包搜索我需要2024年7月8日伏特台风II的威胁盟报告原文件,给出了以下两种途径。

访问中国国家计算机病毒应急处理中心官网,在首页就能看到2024年7月8日的报告。

打开报告放大就能看清了。

powerj7kmpzkdhjg4szvcxxgktgk36ezpjxvtosylrpey7svpmrjyuyd.onion
进行md5加密就能拿到flag。

flag{6c3ea51b6f9d4f5e}
Week3-Misc杂项

BGM 坏了吗?

Adudacity打开,查看频谱图,发现左声道是噪音,右声道有信息。

先分离成单声道。

选中下半部分,复制。

新建一个文件,将刚刚复制的粘贴进来。

然后“文件”->“导出”->“导出为WAV”.

最后使用dtfm工具识别即可拿到flag。

flag:flag{2024093020241103}
OSINT-MASTER

先查看task.txt,告知flag格式是航班号+照片拍摄时飞机经过的地级市,查看图片属性。

得到时间为2024年8月18日下午2点半,在看图片,放大能看到B-2419。

网上搜索B-2419,进入flightera的官网。

点击搜索,将飞机型号输入,随便选择两项中的一项。

查看2024年8月份的航班。

一直翻到8月18号,只有4个航班,但是满足下午2点半这个时间还在飞的只有MU5156这一航班。

剩下的就是找途径的地级市了。一开始我根据航线将其附近的地级市都试了一遍,结果都不对。下载航班管家,首页->航班动态,搜索MU5156,查看飞行成就。

找到了北京飞往上海的航线图,将中间的几个城市试一下,得到结果为济宁市。

故flag为:flag{MU5156_济宁市}
Week4-Misc杂项

Alt

键盘流量,用tshark命令提取数据。tshark -r keyboard.pcapng -T fields -e usbhid.data | sed '/^\s*$/d' > usbdata.txt得到数据。

利用python脚本还原。
  1. normalKeys = {"04": "a", "05": "b", "06": "c", "07": "d", "08": "e", "09": "f", "0a": "g", "0b": "h", "0c": "i",              "0d": "j", "0e": "k", "0f": "l", "10": "m", "11": "n", "12": "o", "13": "p", "14": "q", "15": "r",              "16": "s", "17": "t", "18": "u", "19": "v", "1a": "w", "1b": "x", "1c": "y", "1d": "z", "1e": "1",              "1f": "2", "20": "3", "21": "4", "22": "5", "23": "6", "24": "7", "25": "8", "26": "9", "27": "0",              "28": "", "29": "", "2a": "", "2b": "\t", "2c": "", "2d": "-", "2e": "=", "2f": "[",              "30": "]", "31": "\", "32": "", "33": ";", "34": "'", "35": "", "36": ",", "37": ".", "38": "/",              "39": "", "3a": "", "3b": "", "3c": "", "3d": "", "3e": "", "3f": "",              "40": "", "41": "", "42": "", "43": "", "44": "", "45": "",              "59": "1", "5a": "2", "5b": "3", "5c": "4", "5d": "5", "5e": "6", "5f": "7", "60": "8", "61": "9",              "62": "0", }shiftKeys = {"04": "A", "05": "B", "06": "C", "07": "D", "08": "E", "09": "F", "0a": "G", "0b": "H", "0c": "I",             "0d": "J", "0e": "K", "0f": "L", "10": "M", "11": "N", "12": "O", "13": "P", "14": "Q", "15": "R",             "16": "S", "17": "T", "18": "U", "19": "V", "1a": "W", "1b": "X", "1c": "Y", "1d": "Z", "1e": "!",             "1f": "@", "20": "#", "21": "$", "22": "%", "23": "^", "24": "&", "25": "*", "26": "(", "27": ")",             "28": "", "29": "", "2a": "", "2b": "\t", "2c": "", "2d": "_", "2e": "+", "2f": "{",             "30": "}", "31": "|", "32": "", "33": """, "34": ":", "35": "", "36": "", "38": "?",             "39": "", "3a": "", "3b": "", "3c": "", "3d": "", "3e": "", "3f": "",             "40": "", "41": "", "42": "", "43": "", "44": "", "45": ""}file = open("usbdata.txt")res_usb_data = []for line in file.readlines():    if line[4:6] in normalKeys:        res_usb_data.append(normalKeys[line[4:6]])    elif line[4:6] in shiftKeys:        res_usb_data.append(shiftKeys[line[4:6]])    else:        continueres = ""for i in res_usb_data:    res += iprint(res)        # 1021089710312338190304242796937327951191051161049597108116952164431383251439549539553111487979481119537239125
复制代码
看开头的几个数字,就知道是flag{,说明没找错。
一开始看到以为是要把其前面的一个字符删除,但是发现翻译过来很多都是非ASCII字符。然后结合题目名字ALT,才知道Alt 加数字键也能打印出字符。看了下中间的数字,分成了以下几部分:
10210897103123 => flag{
38190304242796937327=> 这段不知道怎么翻译,感觉都不太对
95119105116104959710811695=>_with_alt_
216443138325143 => tB7
95495395531114879794811195=>_15_5o0OO0o_
37239125=>w}
这题就这样吧,哪位大佬解出来了告知一下。
扫码领取 flag

四个压缩包格式的文件通过file命令可判断为png。

改后缀,但是在kali里打不开,全部都是CRC校验错误,用脚本还原。
  1. import structimport binasciiimport osm = open("fla9.png", "rb").read()k = 0for i in range(5000):    if k == 1:        break    for j in range(5000):        c = m[12:16] + struct.pack('>i', i) + struct.pack('>i', j) + m[24:29]        crc = binascii.crc32(c) & 0xffffffff        if crc == 0xAD8705E1:        # 每张图片的crc码            k = 1            print(hex(i), hex(j))        # 0xfa 0xfa            break
复制代码
这四张图片的crc码都一致,将宽高都改为0xfa即可。

每个图片都是二维码的四分之一,拼完整如下。

扫描二维码没有内容,经过豆包查询知道这是阿兹特克码。

利用在线 AZTEC 二维码阅读器读取。

Week5-Misc杂项

zipmaster

解压得到5个加密文件,看到4个文件较小,可以使用crc值爆破出内容。
  1. # 参数crc 为压缩包里面文件CRC32的值import itertoolsimport stringimport binasciidic = string.ascii_letters + string.digits + '+/=_!@#$%^&*'crc = 0x03c90238        # 填每个文件的crcfor secret_number in itertools.product(dic, repeat=3):    secret_number = ''.join(secret_number)  # 转换元组为字符串    encoded_s = secret_number.encode('utf-8')  # 编码后的 s    if binascii.crc32(encoded_s) & 0xffffffff == crc:        print(secret_number)        exit(0)# this_is_key!
复制代码
密码为this_is_key!,解压得到0721.zip和hint.txt。

提示是明文攻击,看到114514.zip中的hint.txt和0721.zip中的hint.txtcrc值一致,可以确认是明文攻击。

将解压出来的hint.txt使用bindzip压缩成一个新的压缩包,确保压缩方法一致。

使用Advanced Archive Password Recovery软件利用明文攻击。

如果长时间没有解出来,就停止,也能得到解压后的压缩包flag.zip。

这些文件都很大,是个压缩包炸弹,利用HxD打开,拉到最下面,可看到base64编码的字符串。

将中间的.去掉,解码。

看到504b0304就知道是个压缩包,将数据复制到HxD中保存为111.zip。

解压需要密码,又看到最后一句话what the fuck i can not see the passwdf4tj4oGMRuI=,对f4tj4oGMRuI=base64解码,全是不可见字符。

只能利用python脚本解压了。
  1. import pyzipperimport base64# 加密的 ZIP 文件名zip_filename = "111.zip"# 解压到的目标文件夹extract_to = "."# 加密密码password = base64.b64decode('f4tj4oGMRuI=')with pyzipper.AESZipFile(zip_filename,'r') as zipf:    zipf.pwd = password    zipf.extractall(extract_to)
复制代码
解压得到Z1文件,用HxD打开拿到flag。


来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册