https://ctf.cpaw.site/index.php
隠されたフラグ
写真の右上と右下にある黒い点を画像編集ソフトでくっつけるのかなと試行錯誤していましたがわかりませんでした。
https://note.com/misoterasu/n/nd380797900e4
こちらは モールス信号 だったらしく .
と -
で表すらしいです。
モールス信号変換ツールで変換しました。
Redirect
q15.ctf.cpaw.site にアクセスしようとすると自動的に q9 (9 問目) のサイトに飛ばされてしまいます。 ここで q15 に関するフラグを見つけろ、という問題です。
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 で特定プロトコルに関するファイルをすべてオブジェクトとして吐き出せるようです。
吐き出したところ複数の html, js, css が得られました。 js, css を取得できるように vscode で LiveServer を利用して、js, css が有効になるようにしました。 ボタンを押したところフラグが得られました。
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)
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 がでてきました。
特徴的なファイル名なので 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 で構成されているため、プロトコルとして便利ですね。
.zip
を .odt
や .ods
, .odp
のように拡張子を変更して google drive にアップロードしたところ、 odp でヒットしました。
よって、これを提出します。
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 があります。
Can you login?
パケットが与えられるため解析してね、という問題です。
最初に DNS のパケットがやり取りされています。 192.168.91.138 がクライアントであり、 192.168.91.2 が内部 LAN の DNS リゾルバかと思います。 この通信を見ると q28.ctf.cpaw.site にアクセスしようとしていることがわかります。
その後、 192.168.91.138 クライアントは、 118.27.110.77 という q28 ctf が動作しているサーバに向かって TCP を貼り FTP をつなごうとしています。 User は anonymous を最初使っているようです。
User anonymous & Pass anonymous だとログインに失敗しています。
別の FTP 施行では cpaw_user というユーザ、かつパスワードは該当の画像のようにリクエストし、これで成功しています。
よって、このユーザ名とパスワードで FTP 接続を該当のホストで行えばよさそうです。
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 を導入するか