# Hackergame 启动
利用 burpsuite 拦截发送相似度的报文,对相似度修改为 100 即可。
# 猫咪小测
第一问搜索得值中科大中外书籍存在西区图书馆 12 楼,第二问在 arXiv 上搜索 chick 即可,当然也可以暴力,第三问 gpt 或者 CSDN,第四问 Google 搜索关键词 python typing check,halting problem, 检索 2023 年的文献即可得到 ECOOP 为会议。
# 更深更暗
直接在浏览器 F12 和 ctrl+f 搜索 flag 即可
# 旅行照片
根据图片或奖得主锁定东京大学,google 即可的出东京大学诺贝尔奖得主信息。
再实景地图找公园,锁定活动在 googl 找到相关线上志愿报名,门票钱搜索可知东京大学学生免费。
# 赛博井字棋
burpsuite 抓包发现下的棋子通过 x 和 y 定位,在棋盘本身不能下到电脑下过的地方,试一下修改 x,y 值到电脑下过的地方,发现覆盖,即可获胜。
# 奶奶睡前的 flag
这道题之前做过类似的似乎(虽然我做的题很少很少,但还是想起来最近某次比赛一道没做出来的 MISC 里有这么一道,当时是 windows 的 snipping tools 的 bug),遂搜索,发现 google 手机也能利用这个漏洞,在 github 上翻出源码,执行选择最老的 google 手机即可获取 flag。
通过抓包获取撤回信息的格式,直接上脚本:
import requests import re import time # 定义基本的 URL 和请求头 BASE_URL = "http://202.38.93.111:10021" HEADERS = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.5615.121 Safari/537.36", "Content-Type": "application/json", "Origin": "http://202.38.93.111:10021", "Referer": "http://202.38.93.111:10021/", "Cookie": "session=eyJ0b2tlbiI6IjQ1MzpNRVVDSUJ3ZE1jd1RURkR2RlZwSGFRcXE0Tm94bzBSdnVGRDZzdExFNTJHOU42NlNBaUVBOEdXWGRXY1orN2pIeXFneUxxQTIyWDZDc2RoY3ZLblVPNjNjemFLMy8xUT0ifQ.ZTz5oQ.59uj_HyyOdElcS6oMKyqOq2koDo" } # 获取消息 def get_messages(): response = requests.post(f"{BASE_URL}/api/getMessages", headers=HEADERS) if response.status_code == 200: return response.json() return [] # 删除消息 def delete_message(message_id): payload = {"id": message_id} response = requests.post(f"{BASE_URL}/api/deleteMessage", headers=HEADERS, json=payload) if response.status_code == 200: print("delete message: ",message_id,' ', response.text,'\n') def get_flag(): response = requests.post(f"{BASE_URL}/api/getflag", headers=HEADERS) if response.status_code == 200: return response.text return None # 主执行逻辑 start_time = time.time() messages = get_messages() print(messages) i = 0 lastmessage = '' for message in messages['messages']: match = re.search(r'hack\[[a-z]+\]', message['text']) if match: while(1): # print(i) end_time = time.time() if end_time - start_time > message['delay'] : delete_message(i) # 这里假设每个消息还有一个'id'字段。如果没有,你需要根据实际情况进行调整。 break print(' ',message,'\n') i = i + 1 lastmessage=message time.sleep(7) flag = get_flag() print("Received flag:", flag)
这里有个坑是发送时间不能在 delay 的时间之前发送,会显示时空错误 ,另外完成后要等待 7 秒左右再连接 getflag 接口,否则还是告诉你出错。
这道题要根据文字提示,告诉你这种方式可以接受 ISS 的图片,之后上网搜索,得值通过 SSTV 的方式获取 ISS 定时发送的图片。下载音频后下载相关的软件即可,这里由于声音较为刺耳,下载了虚拟音频驱动来播放(怕被室友打),第一次费好大劲下的 MMSSTV 还用不了,我还以为思路错了,之后用 RXSSTV 即可成功获取 flag。
# JSON 属于 YAML?
搜索即可
# HTTP 集邮册
获取状态吗:
GET /file HTTP/1.1\r\n Host: www.example.com\r\n Range: bytes=5000-10000\r\n\r\n 416 Requested Range Not Satisfiable
GET / HTTP/1.1\r\n Host: www.example.com\r\n Range: bytes=0-999\r\n\r\n 206 Partial Content
GET /index.html HTTP/1.1 Host 400 Bad Request
POST /index.html HTTP/1.1\r\n Host: www.example.com\r\n\r\n 405 Not Allowed
GET /index.html HTTP/1.1\r\n Host: www.example.com\r\n Content-Length: 10000000\r\n \r\n {appl} 413 Request Entity Too Large
GET /index.html HTTP/1.1\r\n Host: www.example.com\r\n EXPECT: 100-continue\r\n \r\n 100 Continue
GET /verylongpath/...[repeat many times]... HTTP/1.1\r\n Host: www.example.com\r\n\r\n 414 URI Too Long
GET / HTTP/2.1\r\n Host: www.example.com\r\n\r\n 505 HTTP Version Not Supported
GET / HTTP/1.1\r\n Host: www.example.com\r\n\r\n 200 OK
GET /thispagedoesnotexist HTTP/1.1\r\n Host: www.baidu.com\r\n\r\n 404 Not Found
GET / HTTP/1.1\r\n Host: www.example.com\r\n If-Modified-Since: Tue, 15 Aug 2023 17:03:04 GMT\r\n\r\n 304 Not Modified
GET / HTTP/1.1\r\n Host: www.example.com\r\n If-Match: 121\r\n\r\n 412 Precondition Failed
# Docker for Everyone
题目给出了提示,通过 docker 提权即可,再启动 docker 时 -------- 之后 cat 软连接即可
# 惜字如金
需要写脚本暴力,代码给出提示,
check_equals(set(len(s) for s in code_dict), {24})
每个有 24 个字符,而上面经过惜字如金处理之后为 23 个,故暴力出所有可能即可。
上代码:(写的不好,这里纯纯自己手打获取的所有可能
my_str = 'nymeh1niwemflcir}echaet' index = 0 strs1 = [] vowels = set("AEIOUaeiou") for s in my_str: if s not in vowels: new_str = my_str[:index] + s + my_str[index:] strs1.append(new_str) index += 1 # for str1 in strs1: # print(str1) strs1.append('nymeh1niwemflcir}echaete') print(strs1) my_str2 = 'a3g7}kidgojernoetlsup?h' index = 0 strs2 = [] vowels = set("AEIOUaeiou") for s in my_str2: if s not in vowels: new_str = my_str2[:index] + s + my_str2[index:] strs2.append(new_str) index += 1 # for str1 in strs1: # print(str1) strs2.append('a3g7}kidgojernoetlsup?he') strs2.append('a3g7}kidgojernoetlsupe?h') print(strs2) my_str3 = 'ulw!f5soadrhwnrsnstnoeq' index = 0 strs3 = [] vowels = set("AEIOUaeiou") for s in my_str3: if s not in vowels: new_str = my_str3[:index] + s + my_str3[index:] strs3.append(new_str) index += 1 # for str1 in strs1: # print(str1) strs3.append('ulwe!f5soadrhwnrsnstnoeq') strs3.append('ulw!f5soadrhwnrsnstnoeqe') print(strs3) my_str4 = 'ct{l-findiehaai{oveatas' index = 0 strs4 = [] vowels = set("AEIOUaeiou") for s in my_str4: if s not in vowels: new_str = my_str4[:index] + s + my_str4[index:] strs4.append(new_str) index += 1 # for str1 in strs1: # print(str1) strs4.append('cte{l-findiehaai{oveatas') strs4.append('ct{le-findiehaai{oveatas') strs4.append('ct{l-findiehaai{oveatase') print(strs4) my_str5 = 'ty9kxborszstguyd?!blm-p' index = 0 strs5 = [] vowels = set("AEIOUaeiou") for s in my_str5: if s not in vowels: new_str = my_str5[:index] + s + my_str5[index:] strs5.append(new_str) index += 1 # for str1 in strs1: # print(str1) strs5.append('tye9kxborszstguyd?!blm-p') strs5.append('ty9kxborszstguyde?!blm-p') strs5.append('ty9kxborszstguyd?!blme-p') strs5.append('ty9kxborszstguyd?!blm-pe') print(strs5) print(len(strs5))
暴力即可
#!/usr/bin/python3 # Th siz of th fil may reduc after XZRJification def check_equals(flag,left, right): # check whether left == right or not if left == right: print(flag) def decrypt_data(input_codes): # retriev th decrypted data output_chars = [cod_dict[c] for c in input_codes] return ''.join(output_chars) if __name__ == '__main__': # check som obvious things # check th flag flags = [] for i in range(len(strs1)): for j in range(len(strs2)): for k in range(len(strs3)): for d in range(len(strs4)): for m in range(len(strs5)): cod_dict = [] cod_dict += strs1[i] cod_dict += strs2[j] cod_dict += strs3[k] cod_dict += strs4[d] cod_dict += strs5[m] tttttt = [53, 41, 85, 109, 75, 1, 33, 48, 77, 90, 17, 118, 36, 25, 13, 89, 90, 3, 63, 25, 31, 77, 27, 60, 3, 118, 24, 62, 54, 61, 25, 63, 77, 36, 5, 32, 60, 67, 113, 28] output_chars = [cod_dict[c] for c in tttttt] flag = ''.join(output_chars) if flag not in flags: if 'flag{' in flag and '}' in flag: check_equals(flag,flag.index('flag{'), 0) check_equals(flag,flag.index('}'), len(flag) - 1) flags.append(flag)
flag{nou-v}-r3lovmr3d-7hm-an5w3r-rhght?} flag{you-v}-r3lovmr3d-7hm-an5w3r-rhght?} flag{you-v}-r3lover3d-7he-an5w3r-rhght?} flag{you-v}-r3lover3d-7he-an5w3r-r1ght?} flag{you-v}-r3cover3d-7he-an5w3r-r1ght?} flag{you-ve-r3cover3d-7he-an5w3r-r1ght?} flag{you-ve-r3cover3d-7he-an5w3r-r1ght?}
这里调后面的即可
# 高频率星球
我还专门下载了 asciinema(只能再 linux 上使用),这题主要是解码 json 再删去记录的相应的操作字符即可,直接 python 提取 json 内容再转到 notepad++ 上替换操作字符串。
另外 windows 直接改后缀无法打开(菜我不知道为什么,还以为自己没替换好),必须在 linux 下 Node flag.js 才可。
# 流式星球
这题先跟着视频如何转换为字节流的代码反向写一个字节流转换为视频的代码
import cv2 import numpy as np def bin_to_video(bin_file, output_video, frame_width=1280, frame_height=640): buffer = np.fromfile(bin_file, dtype=np.uint8) frame_count = len(buffer) // (frame_width * frame_height * 3) reshaped_buffer = buffer[:frame_count * frame_width * frame_height * 3] reshaped_buffer = reshaped_buffer.reshape((frame_count, frame_height, frame_width, 3)) fourcc = cv2.VideoWriter_fourcc(*'mp4v') out = cv2.VideoWriter(output_video, fourcc, 30.0, (frame_width, frame_height)) for i in range(frame_count): out.write(reshaped_buffer[i]) out.release() if __name__ == "__main__": bin_to_video("video.bin", "deo.mp4")
发现能模糊的看到 BangDream 几个字,之后去 B 站搜索了下,并找到相应的原视频(原视频为 360*640,改了一下 frame_width 和 frame_height,发现视频更加模糊),自己用题目给出的转化代码转换原视频,再自己手动测试,发现规律,在 frame_width 正确的情况下,frame_height 如何改变,视频只会出详上下移动的效果,而 frame_width 错误则视频极有可能十分模糊。直接上暴力,暴力 frame_width 直到找到正确的答案。似乎是 346. 之后就能得到清晰的视频
# 异星歧途
主要是了解游戏机制,观看游戏里逻辑控制器的指令。第一个二进制序列很简单,照着打就行。
第二个指令需要进行运算,指令给出 sw1-8 组成了 number,number == fl0 时能够运行,fl0 只能为数的平方,且 SW1 = SW6 = 1,直接一步步试一下就行。 第三个指令序列需要看游戏机制,在满足反应堆冷却液充足的情况下打开传送带开关即可。第四个指令序列也要了解游戏机制中焚化炉的作用,合理关闭烧毁发电材料的焚化炉即可。(此游戏让我想到了异星工厂,另一款非常好的传送带工厂游戏)