(2021/05/29 - 少し復習しました。下の方に追記してます。)

URL: https://umdctf.io/challenges

1501 points を取り、175thでした。

umdctf_2021_Score.png
ほとんど解けてないです^^;

umdctf_2021_Challenges1.png

umdctf_2021_Challenges2.png

umdctf_2021_Challenges3.png


あんまり特記すべきこともないんですが、いくつか Writeup 残しておきます。



[Forensics]: Not Slick (150 points)


Challenge

My friend always messes with PNGs…. what did he do this time?

Attachment:

  • notslick.png

Solution

ファイル・タイプを確認します。正常な png ファイルではないようです。

$ file notslick.png
notslick.png: data

どうやら反転しているようです。
 $ xxd notslick.png | tail
00018c00: fb5d 6b9e b5ed 7bd9 8663 d71e 3d6b f6b5  .]k...{..c..=k..
00018c10: af7b 5efd ed75 c3df 7f7c d72b ae6d e3f7  .{^..u...|.+.m..
00018c20: 6fb8 4ce3 cf9c 66e0 3a7f 4621 42bb 8687  o.L...f.:.F!B...
00018c30: 1a42 6665 10ee a10f f42f e10e 515f e1dc  .Bfe...../..Q_..
00018c40: a5fe 10ca 1fe2 89a9 4e52 634e 4343 93dd  ........NRcNCC..
00018c50: 21c9 50df cadd 3926 a222 49a1 0e57 fdf7  !.P...9&."I..W..
00018c60: fff7 5cd9 7efc 0bdd ec5e 7854 4144 4900  ..\.~....^xTADI.
00018c70: 2000 002b 3a4e fb00 0000 0608 a903 0000   ..+:N..........
00018c80: 8007 0000 5244 4849 0d00 0000 0a1a 0a0d  ....RDHI........
00018c90: 474e 5089                                GNP.

$ python3
>>> open("notslick_rev.png", "wb").write(open("notslick.png", "rb").read()[::-1])

このやり方は、過去の何かのCTFイベントでやったやつです。どれだったかは覚えてないです。


Flag: UMDCTF-{abs01ute1y_r3v3r53d}





[Forensics]: Protocol One and Zero (200)


Challenge

We have noticed some suspicious pings on localhost that appear to hide a message. Can you recover the message?

Attachment:

  • protocol_one_and_zero.pcapng

Solution

タイトルの通りです。以下のように、0x00 のものと 0xFF のものがあるので、それぞれを0と1と見立てて2値化した後で文字にするだけです。

$ tshark -r protocol_one_and_zero.pcapng -T fields -e data.data | uniq
866e0d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
dc7f0d0000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
87910d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
1da40d0000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
f7b50d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
:
:
$ tshark -r protocol_one_and_zero.pcapng -T fields -e data.data | uniq | rev | cut -c -1 | tr -d "\n" | gsed -e 's/f/1/g' ; echo
01010101010011010100010001000011010101000100011000101101011110110110001000110001011011100101111101110000001100010100111001100111010111110101000000110000011011100110011101111101

Flag: UMDCTF-{b1n_p1Ng_P0ng}





[Forensics]: Pretty Dumb File (200)


Challenge

You find what looks to be a regular PDF, maybe Didier Stevens can help figure out what it contains.

Attachment:

  • paper.pdf

Solution

エキストエディタで開くと、Object 8 のstreamの部分に読めないバイナリがあるのがわかります。

umdctf_2021_paperpdf.png


pdf-parser.py を使って取り出します。

$ pdf-parser.py -o 8 -f -d obj8.dump paper.pdf
obj 8 0
 Type: /EmbeddedFile
 Referencing:
 Contains stream

  <<
    /Length 43
    /Filter /FlateDecode
    /Type /EmbeddedFile
  >>

$ file obj8.dump
obj8.dump: ASCII text

$ cat obj8.dump
UMDCTF-{actually_1ts_pr3tty_smart}

Flag: UMDCTF-{actually_1ts_pr3tty_smart}





[Crypto]: Celebration (100)


Challenge

I know these aren’t my usual card tricks, but these little men made me laugh. I hope they bring a smile to your face too :)

Attachment:

umdctf_2021_Celebration.png

Solution

この手のシンボルの問題は無数にあるので、いかにデコーダを見つけるかがキーになります。今回は、“CTF crypto symbol” をキーワードにGoogleで画像検索していたら見つかりました。

Dancing Men Cipher というそうです。


Flag: UMDCTF-{yo_ITS_A_PARTYYY}





[Rev]: Starbucks (150)


Challenge

Unfortunately, you have been forced to use Java, but you are only given a single class file which doesn’t seem to work.

Attachment:

  • IsThisTheFlag.class

Solution

jadを使ってデコンパイルしました。

$ jad IsThisTheFlag.class 
Parsing IsThisTheFlag.class...The class file version is 52.0 (only 45.3, 46.0 and 47.0 are supported)
 Generating Challenge.jad
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
// Decompiled by Jad v1.5.8e. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://www.geocities.com/kpdus/jad.html
// Decompiler options: packimports(3) 
// Source File Name:   Challenge.java

import java.io.PrintStream;

public class Challenge
{

    public Challenge()
    {
    }

    public static String f1(String s)
    {
        StringBuilder b = new StringBuilder();
        char arr[] = s.toCharArray();
        for(int i = 0; i < arr.length; i++)
            b.append((char)(arr[i] + i));

        return b.toString();
    }

    public static String f1_rev(String s)
    {
        StringBuilder b = new StringBuilder();
        char arr[] = s.toCharArray();
        for(int i = 0; i < arr.length; i++)
            b.append((char)(arr[i] - i));

        return b.toString();
    }

    public static String f2(String s)
    {
        int half = s.length() / 2;
        return (new StringBuilder(String.valueOf(s.substring(half + 1)))).append(s.substring(0, half + 1)).toString();
    }

    public static String f3()
    {
        return f1(f2("$aQ\"cNP `_\035[eULB@PA'thpj]"));
    }

    public static void main(String args[])
    {
        System.out.println("You really thought finding the flag would be so easy?");
    }
}

main()は文字列を表示しているだけです。

f3()がなんとなくフラグ生成関数っぽいので、main()からf3()を呼ぶようにしてコンパイルして実行します。

ファイル名が “Challenge.jad” になっているので、“Challenge.java” に変えておきます。

$ javac Challenge.java

$ java Challenge
UMDCTF-{pyth0n_1s_b3tt3r}

Flag: UMDCTF-{pyth0n_1s_b3tt3r}





orange_bar.png
ここから下はイベント終了後に行った復習です。



[Misc]: John’s Return (350 points)


Challenge

I received this network traffic from John, but I don’t what he’s trying to say? Can you figure it out?

Attachment:

  • received.pcapng

Solution

ワイヤレスのトラフィックが入ったpcapなので、まず aircrack-ng をやらないといけないやつでした。

最初に、received.pcapng は、Wireshark から Save As で pcap として保存しておいてから aircrack-ng にかけます。

$ aircrack-ng received.pcap
Reading packets, please wait...
Opening received.pcap
Read 76 packets.

   #  BSSID              ESSID                     Encryption

   1  00:23:69:AA:69:F5  linksys                   WPA (1 handshake, with PMKID)

Choosing first network as target.

Reading packets, please wait...
Opening received.pcap
Read 76 packets.

1 potential targets

Please specify a dictionary (option -w).

-w で辞書を指定するように言われるので、rockyou.txtを使ってみます。
$ aircrack-ng received.pcap -w /usr/share/wordlists/rockyou.txt
Reading packets, please wait...
Opening received.pcap
Read 76 packets.

   #  BSSID              ESSID                     Encryption

   1  00:23:69:AA:69:F5  linksys                   WPA (1 handshake, with PMKID)

Choosing first network as target.

Reading packets, please wait...
Opening received.pcap
Read 76 packets.

1 potential targets

                               Aircrack-ng 1.6

      [00:00:00] 59/10303727 keys tested (966.86 k/s)

      Time left: 2 hours, 57 minutes, 46 seconds                 0.00%

                           KEY FOUND! [ chocolate ]

:
(snip)
:

Key `chocolate` が見つかりました。
Wiresharkで wpa-pwd として指定します。 umdctf_2021_wpapwd.png
Configuration Test Protocol とかが見えるようになりました。その中にフラグが入ってます。 umdctf_2021_receivedpcap.png

Flag: UMDCTF-{wh3r3_j0hn}