Misc
cheekin
公众号发送flag
获取图片后查看lsb隐写
syc{s4y_he110_t0_syclover}
ez_smilemo
附件是一款叫smilemo的游戏,玩了一下非常折磨人,想要正常通关是不现实的
还给了一个data.win的文件,拖进010editor中查看,可以看到里面有一块是专门存放游戏中的静态字符串的区域,猜测flag应该也以字符串的形式存储,在010中一直往下翻,最终找到了flag字符串
SYC{sm1le_1s_@_n1ce_g@me}
DEATH_N0TE
题目描述:
"o2takuXX突然失踪了,你作为他的好朋友,决定去他的房间看看是否留下了什么线索..."。
前置剧情题,flag有两段,隐写的信息有点多记得给信息拿全。
首先stegsolve查看附件图片通道,有明显的lsb隐写痕迹,提取出flag前半段
放大图片能看到排列均匀的像素点,用脚本把他们提取出来
from PIL import Image
im = Image.open('kamisama.png')
width, height = im.size
im_new = Image.new('RGB',(width//10,height//10))
for i in range(width//10):
for j in range(height//10):
box = (5+i*10, 5+j*10)
tmp = im.getpixel(box)
im_new.putpixel((i, j), tmp)
im_new.save('new.png')
得到:
百度识图后可知这是哥特体字母,通过对照表https://www.ffonts.net/Manuskript-Gothisch.font转换再解base64即可得到flag后半段
最终flagSYC{D4@Th_N0t4_NAME_o2takuXX}
下一站是哪儿呢
题目描述:
和yxx去旅游,前一天还好好的,玩完《指挥官基恩》这个游戏就睡觉了,
第二天晚上吃完饭她人就不见了,走之前留下了两张图片就消失了。
你能帮我找找她坐哪个航班去哪个地方了嘛?
flag格式:SYC{航班号_城市拼音},城市拼音首字母大写噢
解压后->about文件夹下给了一个聊天记录图片,从中得知出发时间是8.25 20:23左右
还有一个机场图片,识图后是深圳宝安国际机场
about->find文件夹下图片1.jpg能分离出一个压缩包
里面有一段文本和图片
宝,或许你还记得我们昨天玩的那个游戏嘛!
这里的游戏就是《指挥官基恩》,图片上的文字来源于此游戏,称为银河文字
对照翻译过来是I want to go to liquorcity
,liquorcity是酒城的意思
搜索中国酒城得到四川的泸州
此时搜索范围已经确定,接下来就是逐一排查符合要求的航班号
在https://www.flightera.net/网站里可以按机场查询航班号,机场选择深圳宝安国际机场(SZX)
在8月25号18:00到22:00排查到泸州的航班,可以找到这一条记录
最终flag为SYC{CZ8579_Luzhou}
Qingwan心都要碎了
这张图片有明显的重庆字样,可以得知地点在重庆
这张图上有三峡工程相关的文件,
搜索关键词重庆、三峡,可以找到下图所示地点
SYC{重庆中国三峡博物馆}
xqr
题目描述:Qrcode can deliver binary msg
附件给了一张二维码图片,直接扫得到SYC{this_is_not_flag}
,显然不是flag,
图片末尾可以分离出另一张图片,也是二维码,
补上定位符等信息还是扫不出来,从二维码的生成角度入手,参考这篇文章https://blog.csdn.net/whatday/article/details/91990475
从中我们得知二维码信息是从右下角开始读取的,并且存储的不是明文而是和蒙板异或后的信息
这张图片右下角的信息非常有规律并且真正的flag也是以SYC开头,题目描述也说了二维码能够发现二进制信息,尝试将这两张图片通过某种操作结合,
题目是xqr不难联想到xor,也就是异或操作,异或后得到真正的flag
SYC{hOp3_u_h@ve_Fun}
DEATH_N1TE
题目描述:
"你看见了《DEATH NOTE》上面的名字,这时,Arahat0给你传了两个文件,并留言:" "[他拥有死神之眼,请小心,他在找你,还剩1920秒...]" "<当前时间 10:52>"。flag有两段
附件中有一个MP3文件和一个webp文件,MP3用rxsstv扫描得到flag前半段
webp是一个动态图,用在线网站WEBP to GIF | CloudConvert转化为gif格式
再用convert命令分离每一帧
convert keller.gif flag.png
用 ImageMagick+gaps进行自动拼图,参考https://blog.csdn.net/m0_47643893/article/details/113778577
magick montage *.png -tile 40x22 -geometry +0+0 flag.png
因为要拼的图是880张,假设图片长1920像素,每张48x48像素,所以是大小是40x22
再使用gaps进行拼图
gaps --image=flag.png --generation=30 --population=300 --size=48
拼好之后XzE0X0tpMTE0Un0=
解base64得后半段flag
最终flagSYC{H4xr0t0r_14_Ki114R}
窃听风云
追踪http流提示密码在rockyou字典中
下面这些字符串是NTLM认证的过程
参考https://cloud.tencent.com/developer/article/2227928构造NTLMv2爆破文件:
jack::WIDGETLLC:2AF71B5CA7246268:2D1D24572B15FE544043431C59965D30:0101000000000000040D962B02EDD901E6994147D6A34AF200000000020012005700490044004700450054004C004C004300010008004400430030003100040024005700690064006700650074004C004C0043002E0049006E007400650072006E0061006C0003002E0044004300300031002E005700690064006700650074004C004C0043002E0049006E007400650072006E0061006C00050024005700690064006700650074004C004C0043002E0049006E007400650072006E0061006C0007000800040D962B02EDD90106000400020000000800300030000000000000000000000000300000078CDC520910762267E40488B60032835C6A37604D1E9BE3ECEE58802FB5F9150A001000000000000000000000000000000000000900200048005400540050002F003100390032002E003100360038002E0030002E0031000000000000000000
使用hashcat和rockyou字典进行爆破
hashcat -m 5600 crack.txt /usr/share/wordlists/rockyou.txt
SYC{iamjackspassword}
窃听风云v2
方法其实和前面那道题一模一样,但是服务器名要变一下,应该是WidgetLLC.Internal
构造NTLMv2爆破文件:
jack::WidgetLLC.Internal:3E3966C8CACD29F7:DDD46FD8F78C262EAE16918F66185497:010100000000000050FD26D235EDD9011219408CCB8A364800000000020012005700490044004700450054004C004C0043000100100043004C00490045004E00540030003300040024005700690064006700650074004C004C0043002E0049006E007400650072006E0061006C000300360043004C00490045004E005400300033002E005700690064006700650074004C004C0043002E0049006E007400650072006E0061006C00050024005700690064006700650074004C004C0043002E0049006E007400650072006E0061006C000700080050FD26D235EDD90106000400020000000800300030000000000000000000000000300000C78E803920758EC5672C36696EE163F6A4E61C8B5463C247DAEF8571677995A40A001000000000000000000000000000000000000900200053004D00540050002F0075006E007300700065006300690066006900650064000000000000000000
使用hashcat和rockyou字典进行爆破
hashcat -m 5600 crack2.txt /usr/share/wordlists/rockyou.txt
syc{jack100589barney}
附:NTLMv2hash解析脚本:
import struct
import base64
import binascii
# ⼩端序读取数据
def little_endian(data):
padded_data = data.ljust(4, b'\x00')
integer_value = struct.unpack('<I', padded_data)[0]
result = integer_value & 0xFFFF
return result
# 解析字段 security buffer的函数
def security_buffer(offset, length):
len_buffer = d_type3[offset:offset + length][0:2]
offset_buffer = d_type3[offset:offset + length][4:8]
l_len = little_endian(len_buffer)
l_offset = little_endian(offset_buffer)
return d_type3[l_offset:l_offset + l_len]
# ⼩端序读取数据,然后转为明⽂内容的函数
def decode_security_buffer(buffer, byte_size=2):
res = [chr(little_endian(buffer[i:i + byte_size])) for i in range(0, len(buffer), byte_size)]
return "".join(res)
# Net-NTLMv2 Hash 格式如下
# [User name]::[Domain name]:[NTLM Server Challenge]:[HMAC-MD5]:[blob]
type1 = input("请输⼊NTLM认证 Type1阶段: ")
type2 = input("请输⼊NTLM认证 Type2阶段: ")
type3 = input("请输⼊NTLM认证 Type3阶段: ")
d_type1 = base64.b64decode(type1)
d_type2 = base64.b64decode(type2)
d_type3 = base64.b64decode(type3)
# Challenge
# Offset: 24
# Length: 8 bytes
challenge = d_type2[24:24 + 8]
server_challenge = binascii.hexlify(challenge).decode('utf-8')
# User Name Security Buffer
# Offset: 36
# Length: 8 bytes
user_name_buffer = security_buffer(36, 8)
user_name = decode_security_buffer(user_name_buffer) # ⼩端序解出user_name
# Domain name Security Buffer
# Offset: 28
# Length: 8 bytes
domain_name_buffer = security_buffer(28, 8)
domain_name = decode_security_buffer(domain_name_buffer) # ⼩端序解出domain_name
# NTLM/NTLMv2 Response Security Buffer
# Offset: 20
# Length: 8 bytes
ntlm_response = security_buffer(20, 8)
hmac_md5 = binascii.hexlify(ntlm_response[0:16]).decode('utf-8')
blob = binascii.hexlify(ntlm_response[16:]).decode('utf-8')
print("Net-NTLMv2 Hash如下:\n" +user_name + "::" +domain_name + ":" +server_challenge + ":" +hmac_md5 + ":" +blob)
extractMe
查看压缩包可以发现每个文件大小为4字节,可以通过crc爆破出每个文件的内容
利用github上的7z-crc-cracker-master工具,按顺序连接起来就行
python 7zcrc_cracker.py extractMe.7z
SYC{_cR@ck_1s_Useful_sometime$_}
时代的眼泪
7z查看vmdk文件,在Tears_of_the_times-disk1.vmdk\Documents and Settings\Administrator\Local Settings\Application Data\Microsoft
目录下找到一张图片,打开就能看到flag
SYC{You_defeated_me_after_22_years}
SimpleConnect
非预期解法:在goerli测试网中搜索合约地址,能看到交易记录
提交别人的地址就能获得flag
SYC{kajd_u_iaak___hdskj_a}
give_me_Goerlieth
和SimpleConnect同理,搜索交易地址,复制别人的交易哈希
SYC{rsiiasx_13njsa_13klsa__sa}
DEATH_N2TE
题目给了一个mp4文件,仔细看可以发现中间有规律地插入了像素,
猜测要提取其中的像素,提取之后可以看到有些图片中存在一列白色像素,并且是按从左到右的顺序,尝试把这些列拼接起来,即可得到flag
解题代码:
import cv2
from PIL import Image
def extract_frames(video_path, output_path):
video = cv2.VideoCapture(video_path) # 打开视频文件
fps = video.get(cv2.CAP_PROP_FPS) # 获取视频的帧率
frame_count = 0 # 设置帧计数器
while True:
ret, frame = video.read() # 读取帧
if not ret:
break
output_filename = f"{output_path}/{frame_count}.png" # 生成输出文件名
cv2.imwrite(output_filename, frame) # 保存帧为图像文件
frame_count += 1 # 帧计数加1
video.release() # 释放视频对象
print("帧提取完成!")
video_path = "kira.mp4" # 输入视频文件路径
output_path = "frames" # 输出帧的文件夹路径
new_path = 'new'
extract_frames(video_path, output_path)
# 每帧间隔取像素
for k in range(192):
im1 = Image.open(f'{output_path}/{k}.png')
w, h = im1.size
im2 = Image.new("RGB", (w//10, h//10), (255, 255, 255))
for i in range(w//10):
for j in range(h//10):
im2.putpixel((i,j),im1.getpixel((i*10+5,j*10+5)))
im2.save(f'{new_path}/{k}.png')
print('像素提取完成!')
# 每帧取一列像素拼接
flag = Image.new("RGB", (192, 108), (255, 255, 255))
for k in range(192):
im1 = Image.open(f'{new_path}/{k}.png')
for j in range(108):
flag.putpixel((k,j),im1.getpixel((k,j)))
flag.save('flag.png')
print('flag提取成功!')
SYC{we1c0m4_T0_De@tH_W0r1d}