見出し画像

DawgCTF 2020 write-up

4/11(土) 7:00 〜4/13(月) 7:00(JST)に開催されたDawgCTF 2020にソロで参加しました。今回はあまり時間が取れなかったので解いた問題は少ないですが、295pt取得して全1237チーム中759位でした。

画像3

以下、write-upです。

--------- Web/Networking ---------

* The Lady is a Smuggler [25pt]

Our mysterious lady is smuggling a bit of extra information.
https://clearedge.ctf.umbccd.io/
Author: ClearEdge

指定のページにアクセスして、ソースを確認すると画像ファイル名の中にフラグが書いてある。

キャプチャ

Flag: DawgCTF{ClearEdge_ElizebethSmith}

--------- Reversing ---------

* Ask Nicely [50pt]

Remember your manners!
Author: Novetta

デコンパイルすると、main関数の中で条件が一致した場合にflag関数が呼ばれていることがわかる。flag関数のデコンパイル結果からフラグが読み取れる。

int flag(void)
{
   putchar(0x44);
   putchar(0x61);
   putchar(0x77);
   putchar(0x67);
   putchar(0x43);
   putchar(0x54);
   putchar(0x46);
   putchar(0x7b);
   putchar(0x2b);
   putchar(0x68);
   putchar(0x40);
   putchar(0x6e);
   putchar(0x4b);
   putchar(0x5f);
   putchar(0x59);
   putchar(0x30);
   putchar(0x55);
   putchar(0x7d);
   putchar(10);
   return;
}

Flag: DawgCTF{+h@nK_Y0U}

--------- Pwn ---------

* On Lockdown [50pt]

Better than locked up I guess
nc ctf.umbccd.io 4500
Author: trashcanna

ソースファイルとバイナリが与えられている。ソースは以下の通り。

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

void flag_me(){
	system("cat flag.txt");
}

void lockdown(){
	int lock = 0;
	char buf[64];
	printf("I made this really cool flag but Governor Hogan put it on lockdown\n");
	printf("Can you convince him to give it to you?\n");
	gets(buf);
	if(lock == 0xdeadbabe){
		flag_me();
	}else{
		printf("I am no longer asking. Give me the flag!\n");
	}
}

int main(){
	lockdown();
	return 0;
}

64文字+lockの文字数を渡せばflag.txtが表示されることがわかる。リトルエンディアンであることに注意して値を渡すとフラグが表示される。

$ nc ctf.umbccd.io 4500
I made this really cool flag but Governor Hogan put it on lockdown
Can you convince him to give it to you?
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbebaadde
DawgCTF{s3ri0u$ly_st@y_h0m3}

Flag: DawgCTF{s3ri0u$ly_st@y_h0m3}

--------- Crypto ---------

* Take It Back Now, Y'all [25pt]

Sanity check.
crypto.ctf.umbccd.io 13370
(no brute force is required for this challenge)
Author: pleoxconfusa

client0.pyの中身は以下の通り。

# -*- coding: utf-8 -*-
"""
Created for Spring 2020 CTF
Cryptography 0
10 Points
Welcome to my sanity check.  You'll find this to be fairly easy.  
The oracle is found at umbccd.io:13370, and your methods are:
   flg - returns the flag
   tst - returns the message after the : in "tst:..."
   
@author: pleoxconfusa
"""

import socket

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

server_address = ('crypto.ctf.umbccd.io', 13370)
sock.connect(server_address)

#available methods: flg, tst.


msg = 'tst:hello' ## modified msg = 'flg' to get flag ##


sock.sendall(msg.encode())
data = sock.recv(1024)
print(data.decode())
   
sock.close()

コメント部分に書いてるようにmsg = 'tst:hello'の部分をmsg = 'flg'に書き換えて実行するとフラグが手に入る。

Flag: DawgCTF{H3ll0_W0rld!}

* One Hop This Time, One Hop This Time [75pt]

One time pad is perfectly secure.
crypto.ctf.umbccd.io 13371
(no brute force is required for this challenge)
Author: pleoxconfusa

上記に続いて与えられたclient1.pyは以下の通り。

# -*- coding: utf-8 -*-
"""
Created for Spring 2020 CTF
Cryptography 1 
40 Points
Welcome to the one time pad oracle! 
Our oracle's function is enc := key ^ msg | dec := key ^ ct
The oracle is found at umbccd.io:13371, and your methods are:
   flg - returns the encrypted flag
   enc - returns the encryption of the message after the : in "enc:..."
   dec - returns the decryption of the ciphertext after the : in "dec:..."
   
@author: pleoxconfusa
"""

import socket


sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

server_address = ('crypto.ctf.umbccd.io', 13371)
sock.connect(server_address)

#available methods: flg, enc, dec.


msg = 'flg'.encode()
sock.sendall(msg)
flg = sock.recv(1024)
print(flg) #not decoded, because now the oracle sends encrypted bytes.

msg = 'enc:LET ME IN!!!'.encode()
sock.sendall(msg)
enc = sock.recv(1024) 

msg = b'dec:' + enc ## modified msg = b'dec:' + flg to get flag ##
sock.sendall(msg)
dec = sock.recv(1024)
print(dec) #sanity check

   
sock.close()

flgの取得方法とエンコード、デコード方法が書いてある。msg = b'dec:' + enc の部分をmsg = b'dec:' + flgに変更して実行すればフラグが手に入る。

$ python3 client1.py
b'r\xb2\xe1\xac\x15\xfeP\xae\x7f\x18\xe4\\\xe6\x17\x9e1\x9a\x1c7j\x0fB2\xc3\x0b\xd5r\xbf\xa6\xef\xed\xc4\x1a\xcf`N\xd6k\x12\xb4\xb1K'
b'DawgCTF{P@dding_M0r3_L1K3_S@dding_@mir!73}'

Flag: DawgCTF{P@dding_M0r3_L1K3_S@dding_@mir!73}

--------- Forensics ---------

* My First Pcap [50pt]

Find the flag in the network traffic
Author: freethepockets

easy.pcapが与えられるので、wiresharkで開いてTCP stream eq0を確認するとflga.txtのGETが確認できる。

キャプチャ

RGF3Z0NURntuMWMzX3kwdV9mMHVuZF9tM30=をbase64デコードするとフラグになる。

Flag: DawgCTF{n1c3_y0u_f0und_m3}

---------- Misc -----------

* Sanity Check [10pt]

Welcome to DawgCTF 2020! Challenges will be released on a rolling schedule. All new releases will be announced in the Discord.
DawgCTF{fr33_fl@gs}
Author: trashcanna

Flag: DawgCTF{fr33_fl@gs}

* Socialize with Social Distance [10pt]

Join our Discord! https://discord.gg/BPgvnvX
Author: trashcanna

Flag: DawgCTF{h3y_wh@ts_uP_h3ll0}


この記事が気に入ったらサポートをしてみませんか?