CpawCTF Writeup #ctf #writeup

cpawctf CTF

随時、更新予定!

今回は、CpawCTF の Writeup について、セキュリティの学習記録として記載する。

CpawCTF - Main page

Level 1

Q1.[Misc] Test Problem

問題文に記載のフラグを提出する。

 

Q6.[Crypto] Classical Cipher

シーザー暗号を使った問題。

cpawが現れるように3文字シフトした文字列を提出。

CyberChefの「ROT13」を使用することで出力することが可能。

#!/usr/bin/env python3

def caesar_decrypt(ciphertext, shift=None):
    """
    シーザー暗号を解読する関数
    
    引数:
        ciphertext (str): 解読する暗号文
        shift (int, optional): シフト量(指定しない場合は全シフトを試す)
    
    戻り値:
        list: (シフト量, 解読結果) のタプルのリスト
    """
    results = []
    
    # シフト量が指定されていない場合は全シフト(0-25)を試す
    shifts = [shift] if shift is not None else range(26)
    
    for s in shifts:
        plaintext = ""
        for char in ciphertext:
            if char.isalpha():
                # アルファベットの場合のみシフトを適用
                ascii_offset = ord('A') if char.isupper() else ord('a')
                # シフト後の文字を計算(26で割った余りを使用)
                decrypted_char = chr((ord(char) - ascii_offset - s) % 26 + ascii_offset)
                plaintext += decrypted_char
            else:
                # 非アルファベット文字はそのまま
                plaintext += char
        
        results.append((s, plaintext))
    
    return results

def main():
    print("シーザー暗号解読ツール")
    print("=" * 30)
    
    # ユーザーから暗号文を入力
    ciphertext = input("解読する暗号文を入力してください: ")
    
    # シフト量の入力(オプション)
    shift_input = input("シフト量を入力してください(空白の場合は全シフトを試します): ")
    
    if shift_input.strip():
        try:
            shift = int(shift_input)
            results = caesar_decrypt(ciphertext, shift)
        except ValueError:
            print("シフト量は整数で入力してください。全シフトを試します。")
            results = caesar_decrypt(ciphertext)
    else:
        results = caesar_decrypt(ciphertext)
    
    # 結果の表示
    print("\n解読結果:")
    print("-" * 30)
    for shift, plaintext in results:
        print(f"シフト量 {shift}: {plaintext}")

if __name__ == "__main__":
    main()

 

Q7.[Reversing] Can you execute ?

拡張子がないファイルについては、まずfileコマンドでファイルの種類を確認。

◼︎コマンド

file exec_me

◼︎出力結果

exec_me: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.24, BuildID[sha1]=663a3e0e5a079fddd0de92474688cd6812d3b550, not stripped

ELF ファイルのようなので、そのまま実行します。(実行権限がない場合は、chmodコマンドで権限付与)

◼︎コマンド

./exec_me

出てきたフラグを提出。

※筆者はmacosのターミナルで、コマンドラインシェルとして zsh を使用していたため、実行できず。仮想環境ツールなどを使用する必要あり

 

Q8.[Misc] Can you open this file ?

Q7同様に、まずはファイルの種類を確認。

◼︎コマンド

file open_me

◼︎出力結果

open_me: Composite Document File V2 Document, Little Endian, Os: Windows, Version 10.0, Code page: 932, Author: ?v??, Template: Normal.dotm, Last Saved By: ?v??, Revision Number: 1, Name of Creating Application: Microsoft Office Word, Total Editing Time: 28:00, Create Time/Date: Mon Oct 12 04:27:00 2015, Last Saved Time/Date: Mon Oct 12 04:55:00 2015, Number of Pages: 1, Number of Words: 3, Number of Characters: 23, Security: 0

どうやらWordで作成されたファイルのようなので、そのまま開いて出てきたフラグを提出。

※Wordがない場合は、Googleドキュメントでも中身を確認することができた。

 

Q9.[Web] HTML Page

HTMLに関する問題。

Chromeのデベロッパーツールでページソースを確認。

meta name=”description” にフラグが記載されていた。

 

Q10.[Forensics] River

画像から情報を読み取る問題。

写真に写っている川の名前を特定する必要があるため、とりあえずGoogle画像検索したら同じような画像が出てきた。

川の名前は特定できたので、フォーマットに従って提出。

※検索汚染されているような状態なので、本来であればEXIFファイルの位置情報から特定するのが正攻法かと思われる。exif情報表示ツールを使用。

 

Q11.[Network]pcap

pcapファイルを解析する問題。

pcap ファイルの詳細は以下のサイトを参照。

.pcapファイルとは - IT用語辞典 e-Words
.pcapファイルとは、パケットキャプチャツールが捕獲したパケットを時系列に記録するためのファイル形式。pcapライブラリやこれを組み込んだキャプチャツールなどで利用できる。標準のファイル拡張子は「.pcap」。パケットキャプチャツールはコ...

pcap ファイルは、Wireshark などのツールで解析できる。

Wireshark のダウンロードサイトは以下の通り。

Wireshark ??? Download
Wireshark: The world's most popular network protocol analyzer

Wireshark で pcap ファイルを読み込むと、解析結果にフラグが記載されていた。

 

Q12.[Crypto]HashHashHash!

ハッシュ関数の問題。

SHA-1は、任意の長さのデータから、常に固定長の160ビットのハッシュ値を生成する「一方通行」の関数。

基本的にハッシュ化されたデータから元のデータを復元することは困難だが、レインボーテーブルと呼ばれる事前に計算されたハッシュ値と元のパスワードの組み合わせを保存したテーブルがネット上にあるので、頻出の単語などは復元できてしまう。

今回は以下のサイトを活用して、デコードした。

Hash, hashing, and encryption toolkit

 

Q14.[PPC]並べ替えろ!

配列をソートする問題。

今回は、Pythonで実装した。

#!/usr/bin/env python3

input_array = [15,1,93,52,66,31,87,0,42,77,46,24,99,10,19,36,27,4,58,76,2,81,50,102,33,94,20,14,80,82,49,41,12,143,121,7,111,100,60,55,108,34,150,103,109,130,25,54,57,159,136,110,3,167,119,72,18,151,105,171,160,144,85,201,193,188,190,146,210,211,63,207]

# 配列を降順に並べ替え
sorted_array = sorted(input_array, reverse=True)

# 並べ替えた配列の要素を連結
s = ''.join(str(x) for x in sorted_array)

# フラグ形式で表示
flag = f"cpaw{{{s}}}"
print(flag)

 

 

Level 2

Q13.[Stego]隠されたフラグ

モールス信号の問題。

以下のサイトで、復号できる。

Morse Code Translator by Various Words
Morse code conversion by various words

 

Q15.[Web] Redirect

リダイレクトに関する問題。

Chrome のディベロッパーツールで「Network」を確認するとフラグが記載されている。

 

Q16.[Network+Forensic]HTTP Traffic

パケットキャプチャファイルを解析する問題。

pcap ファイルを WireShark で開き、通信ファイルを復元。

「ファイル」→「オブジェクトをエクスポート」→「HTTP」 

network100(1) というファイルに html 拡張子をつけブラウザで開く。

css や js などはパスの指定に合うように、フォルダ配下に格納してやると正常に動作。

 

Q17.[Recon]Who am I ?

Twitter の投稿内容から答えを導く問題。

「@porisuteru スペシャルフォース2」などで検索。

正規ルートではない気がする、、、

 

Q18.[Forensic]leaf in forest

とりあえずファイルの情報を確認。

$ file misc100   
misc100: pcap capture file, microsecond ts (little-endian) - version 0.0 (linktype#1768711542, capture length 1869357413)

pcapファイルのようだが、Wiresharkで開けず、、、

とりあえず strings コマンド中身を見てみると、大量の “lovelive!” の文字が確認できる。

所々別の文字が見られたので、”lovelive!” の文字を取り除いてみる。

$ strings misc100 | sed -e 's/[lovelive!]//g'
CCCPPPAAAWWW{{{MMMGGGRRREEEPPP}}}

3文字ずつ同じ文字が繰り返されているようなので、フォーマットに合わせて提出。

 

Q19.[Misc]Image!

とりあえずファイル情報を確認。

$ file misc100.zip 
misc100.zip: OpenDocument Drawing

OpenDocument形式のファイルのようだ。

Word で開くと、フラグが記載されている。

 

Q20.[Crypto]Block Cipher

ソースコードを確認すると、引数に暗号文と数字を入れるとフラグが出てくるようである。

数字分先の文字と並べ替えているようなプログラムとなっているので、大文字のYを先頭に持ってくるために引数を 4 とするとフラグになる。

 

随時、更新予定!

コメント

タイトルとURLをコピーしました