https://ctf.cpaw.site/index.php

隠されたフラグ

写真の右上と右下にある黒い点を画像編集ソフトでくっつけるのかなと試行錯誤していましたがわかりませんでした。

Imgur

https://note.com/misoterasu/n/nd380797900e4

こちらは モールス信号 だったらしく .- で表すらしいです。 モールス信号変換ツールで変換しました。

Redirect

q15.ctf.cpaw.site にアクセスしようとすると自動的に q9 (9 問目) のサイトに飛ばされてしまいます。 ここで q15 に関するフラグを見つけろ、という問題です。

Imgur

q15.ctf.cpaw.site にアクセスするとレスポンスの http-statuscode として 302 Found が返されます。 これは求めているリソースが 一時的に Location Header にあるためリダイレクトしてね、ということを伝えています。 恒久であれば 301 Moved Permanently を使うようです。

url: https://developer.mozilla.org/ja/docs/Web/HTTP/Reference/Status/302
title: "302 Found - HTTP | MDN"
description: "HTTP の 302 Found リダイレクトレスポンスステータスコードは、リクエストされたリソースが一時的に Location で示された URL へ移動したことを示します。"
host: developer.mozilla.org
image: https://developer.mozilla.org/mdn-social-share.d893525a4fb5fb1f67a2.png
url: https://developer.mozilla.org/ja/docs/Web/HTTP/Guides/Redirections
title: "HTTP のリダイレクト - HTTP | MDN"
description: "URL リダイレクトは、「URL 転送」とも呼ばれ、ページ、フォーム、ウェブサイト全体、ウェブアプリケーションなどに 2 つ以上の URL のアドレスを与える技術です。 HTTP ではこの操作のために、特別な種類のレスポンスである **HTTP リダイレクト**を提供しています。"
host: developer.mozilla.org
image: https://developer.mozilla.org/mdn-social-share.d893525a4fb5fb1f67a2.png

上記のように DeveloperTool でみると Location にちゃんと q9 があります。 ここで、 X-Flag というカスタムヘッダで cpaw が設定されていました。これを提出します。

HTTP Traffic

pcap ファイルが与えられるため、そこでやり取りしていた HTML を含むウェブサイトを復元してフラグを獲得しろ、という問題でした。

Wireshark をつかって HTML / JS / CSS を得るのだろうなと思い、どうやるか調べました。

https://qiita.com/piza_tour/items/2ad83eca4f9b630d6df7

Wireshark の Export Objects で特定プロトコルに関するファイルをすべてオブジェクトとして吐き出せるようです。

Imgur

吐き出したところ複数の html, js, css が得られました。 js, css を取得できるように vscodeLiveServer を利用して、js, css が有効になるようにしました。 ボタンを押したところフラグが得られました。

Imgur Imgur

Wireshark で特定プロトコルに関するファイルが得られるのすごいですね。

leaf in forest

file が与えられるためフラグを探して、という問題です。

pcap キャプチャファイルと表示されるため wireshark で見てみます。

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

Imgur

misc100 を misc100.pcap に rename してもだめでした。 別の方法で考えます。

ファイルの中身を見てみると先頭にバイナリが入っておりあとは lovelive! が大量に入っています。

Ôò¡�������“e!lovelive!lovelive!l

よく見ると、大量の lovelive! のなかに loveWWWve! のようなものが入っていました。 そのため、 lovelive! というテキストを VSCode で消してみると のように XXX という文字が並んでいる箇所があらわれ CPAW{MGREP} のように抜き出せました。 これを投げることで通りました。

e!CCCelive!lovelivPPPovelive!loveAAAe!lovWWWve!{{{elive!loveliMMMelive!lovelGGG!lovelivRRRovelive!lEEElive!PPPelive!}}}

インターネットで他の人の writeup を見ると下記のように sed できれいにできるのですね。

 strings misc100.pcap | sed 's/[lovelive!]//g'
CCCPPPAAAWWW{{{MMMGGGRRREEEPPP}}}

Who am I ?

https://x.com/mage_1868/status/658468101474770944 https://x.com/porisuteru/status/653565663592607744

Google 検索します。 1つ目に貼ったツイートでアカウント名教えて下さい!とあるのでその期間にツイート調べればいいかなとおもったのですが Twitter → X にかわったからなのかツイートがでてこないですね… X への仕様変更の影響がでているのかも…

Image!

zip フォルダが与えられるため解凍してみると、複数の XML がでてきました。Imgur

特徴的なファイル名なので meta.xml, META-INF などを調べると OpenDocument という文書ファイルフォーマットのファイルのようです。

url: https://ja.wikipedia.org/wiki/OpenDocument
title: "OpenDocument - Wikipedia"
host: ja.wikipedia.org
favicon: https://ja.wikipedia.org/static/favicon/wikipedia.ico

XML ファイルを ZIP 圧縮したものが OpenDocumentFormat のようです。 XML で構成されているため、プロトコルとして便利ですね。

Imgur

.zip.odt.ods, .odp のように拡張子を変更して google drive にアップロードしたところ、 odp でヒットしました。 Imgur

よって、これを提出します。

Block Cipher

暗号化されたフラグと以下のソースコードが与えられるため復元してね、という問題です。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
int main(int argc, char *argv[]) {
  int i;
  int j;
 
  // anything number
  int key = atoi(argv[2]);
 
  // original Flag
  const char *flag = argv[1];
 
  printf("cpaw{");
 
  for (i = key - 1; i <= strlen(flag); i += key)
    for (j = i; j >= i - key + 1; j--)
      printf("%c", flag[j]);
  printf("}");
  return 0;
}

上記のプログラムは hololive という文字列と 4 が与えられたら olohevil のように key ごとに逆にする、という操作を行います。 よって、これを再度暗号化されたフラグに行えばもとの文字列が得られます。

~/Downloads via C v17.0.0-clang [☁️ ]
 gcc -o crypto100 crypto100.c
 
~/Downloads via C v17.0.0-clang [☁️ ]
 ./crypto100 ruoYced_ehpigniriks_i_llrg_stae 4
cpaw{Your_deciphering_skill_is_great}%

Baby’s SQLi - Stage 1-

URL が与えられます。 その URL を開くと SQL を書いてね、という指示がでるためその通りに SQL を書きます。 すると、該当のテーブルの2行目に cpaw flag があります。

Imgur

Can you login?

パケットが与えられるため解析してね、という問題です。

最初に DNS のパケットがやり取りされています。 192.168.91.138 がクライアントであり、 192.168.91.2 が内部 LAN の DNS リゾルバかと思います。 この通信を見ると q28.ctf.cpaw.site にアクセスしようとしていることがわかります。

Imgur Imgur

その後、 192.168.91.138 クライアントは、 118.27.110.77 という q28 ctf が動作しているサーバに向かって TCP を貼り FTP をつなごうとしています。 User は anonymous を最初使っているようです。

Imgur

User anonymous & Pass anonymous だとログインに失敗しています。

Imgur

別の FTP 施行では cpaw_user というユーザ、かつパスワードは該当の画像のようにリクエストし、これで成功しています。

よって、このユーザ名とパスワードで FTP 接続を該当のホストで行えばよさそうです。 Imgur

Mac M4 の UTM で Kali Linux をセットアップする でセットアップした仮想 Kali Linux VM を使います。

Kali linux 上で tnftp を利用します。 これは terminal 上で ftp が実行できるコマンドです。 https://maku77.github.io/mac/ftp.html

┌──(ganyariya㉿utmkali)-[~]
└─$ ftp [email protected]
Connected to host1.ctf.cpaw.site.
220 Welcome to Cpaw CTF FTP service.
331 Please specify the password.
Password: 
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.

? で使えるコマンドが得られるようです。

ls すると .hidden_flag_file というものがあるため、これを get で Kali linux にダウンロードします。

ftp> ?
Commands may be abbreviated.  Commands are:

!               delete          hash            mlsd            pdir            remopts         struct
$               dir             help            mlst            pls             rename          sunique
account         disconnect      idle            mode            pmlsd           reset           system
append          edit            image           modtime         preserve        restart         tenex
ascii           epsv            lcd             more            progress        rhelp           throttle
bell            epsv4           less            mput            prompt          rmdir           trace
binary          epsv6           lpage           mreget          proxy           rstatus         type
bye             exit            lpwd            msend           put             runique         umask
case            features        ls              newer           pwd             send            unset
cd              fget            macdef          nlist           quit            sendport        usage
cdup            form            mdelete         nmap            quote           set             user
chmod           ftp             mdir            ntrans          rate            site            verbose
close           gate            mget            open            rcvbuf          size            xferbuf
cr              get             mkdir           page            recv            sndbuf          ?
debug           glob            mls             passive         reget           status


ftp> ls -la
229 Entering Extended Passive Mode (|||60006|)
150 Here comes the directory listing.
drwxr-xr-x    2 ftp      ftp            42 Mar 17  2021 .
drwxr-xr-x    2 ftp      ftp            42 Mar 17  2021 ..
-rw-r--r--    1 ftp      ftp            39 Sep 01  2017 .hidden_flag_file
-rw-r--r--    1 ftp      ftp            36 Sep 01  2017 dummy
226 Directory send OK.
ftp> get .hidden_flag_file
local: .hidden_flag_file remote: .hidden_flag_file
229 Entering Extended Passive Mode (|||60016|)
150 Opening BINARY mode data connection for .hidden_flag_file (39 bytes).
100% |**************************************************************************|    39        7.93 KiB/s    00:00 ETA
226 Transfer complete.
39 bytes received in 00:00 (2.56 KiB/s)

ftp を切断して .hidden_flag_file を cat するとフラグが得られました。 疲れました…

┌──(ganyariya㉿utmkali)-[~]
└─$ cat .hidden_flag_file 
cpaw{f4p_sh0u1d_b3_us3d_in_3ncryp4i0n}

学び

  • FTP プロトコルは脆弱
    • 中身が見れてしまう
  • tnftp というターミナル ftp client を使うと ftp 操作ができる
    • もしくは ftp の GUI client を導入するか