极客大挑战2023 misc 部分wp

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}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值