CpawCTF Level2 Writeup
はじめに
サイト
環境
- macOS
- M1チップ
Q13.[Stego]隠されたフラグ
問題
以下の画像には、実はフラグが隠されています。
目を凝らして画像を見てみると、すみっこに何かが…!!!!
フラグの形式はcpaw{***}です。フラグは小文字にしてください。
stego100.jpg
回答
まず,リンクをクリックして画像をダウンロードしましょう.そして,その画像を開きましょう.すると,左上と右下にそれぞれ黒色の何かが見えます.
これらをモールス信号と解釈して,英字に変換すると, cpawhidden_message:)
になります.よって,問題文にあったフラグの形式と良い感じに合わせて, cpaw{hidden_message:)}
という答えが得られました.
Q15.[Web] Redirect
問題
このURLにアクセスすると、他のページにリダイレクトされてしまうらしい。
果たしてリダイレクトはどのようにされているのだろうか…
http://q15.ctf.cpaw.site
回答
リンク先にアクセスした時のヘッダを見てみましょう. curl
コマンドを用いて覗いてみましょう. -i
オプションで,ヘッダみたいなものが見えると思います.
$ curl -i http://q15.ctf.cpaw.site
HTTP/1.1 302 Found
Server: nginx
Date: Sun, 30 Jun 2024 10:53:10 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 0
Connection: keep-alive
X-Flag: cpaw{4re_y0u_1ook1ng_http_h3ader?}
Location: http://q9.ctf.cpaw.site
お. X-Flag
に cpaw{4re_y0u_1ook1ng_http_h3ader?}
という答えが得られましたね.
Q16.[Network+Forensic]HTTP Traffic
問題
HTTPはWebページを閲覧する時に使われるネットワークプロトコルである。
ここに、とあるWebページを見た時のパケットキャプチャファイルがある。
このファイルから、見ていたページを復元して欲しい。
http_traffic.pcap
回答
ファイルをクリックしてダウンロードし, Wireshark
で解析を行う.
すると,おそらくこの通信は HTTP/1.1
通信をキャプチャしたものだとわかる.
問題文に,ページ復元を求められているので,リスポンスが HTTP/1.1 200 OK
と書いてあるところを探す.
まず,以下の画像の箇所の html
データを取得し, index.html
という名前で保存する. \n
という文字は削除し忘れないように注意.
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta charset="utf-8">
<title>Capture The Flag</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="">
<meta name="author" content="takahoyo">
<!-- Le styles -->
<link href="./css/bootstrap.css" rel="stylesheet">
<style type="text/css">
...
<重要なところではないので省略>
...
</style>
<link href="./css/bootstrap-responsive.css" rel="stylesheet">
<!-- HTML5 shim, for IE6-8 support of HTML5 elements -->
<!--[if lt IE 9]>
<script src="../assets/js/html5shiv.js"></script>
<![endif]-->
</head>
<body>
<div class="container-narrow">
<div class="masthead">
<h3 class="muted">Capture The Flag</h3>
</div>
<hr>
<div class="jumbotron">
<h1>Capture The Flag</h1>
<p class="lead">フラグが欲しかったら下のボタンを押すんだ!!</p>
<p><img id="image1" class="img-rounded" id="image1" src="./img/image.jpg" /></p>
<p><a class="btn btn-large btn-success" onclick="OnButtonClick();">ボタン</a></p>
</div>
<hr>
<div class="footer">
<p>© 2015 takahoyo</p>
</div>
</div>
<script src="./js/button2.js"></script>
</body>
</html>
そして,この index.html
をブラウザで開いてみる.
どうやら,ボタンを押すことで,フラグが得られるようだ.しかし, ボタン
というところをクリックしても反応しない.それもそのはず, index.html
をみても, JavaScript
は書かれてない.だが,ボタンを押した時に ./js/button2.js
というファイルを呼んでいることがわかる(index.html
の最後から4行目あたりの script
タグで囲まれているところ参照).そこで, ./js/button2.js
に関するリスポンスを得ている場所を探すと,以下の場所が見つかる.
この右下に書かれている JavaScript
スクリプトを ./js/button2.js
に保存する.
.
├── index.html
└── js
└── button2.js
eval(function (p, a, c, k, e, r) { e = function (c)
{ return (c < a ? '' : e(parseInt(c / a))) + ((c =
<省略>
getElementById|image1|src'.split('|'), 0, {}))
そして,再度 index.html
にアクセスし, ボタン
をクリックする.
画像に書いてある通り, cpaw{Y0u_r3st0r3d_7his_p4ge}
という答えが得られたねー.
つぶやき
画像にフラグを隠すことで, cpaw{XXXX}
といった感じでフィルタが出来なくなるので工夫を感じますね.
Q17.[Recon]Who am I ?
問題
僕(twitter:@porisuteru)はスペシャルフォース2をプレイしています。
とても面白いゲームです。
このゲームでは、僕は何と言う名前でプレイしているでしょう!
フラグはcpaw{僕のゲームアカウント名}です。
回答
よくわからないid名とゲーム名ですね. とりあえず, Google
の力を借りましょう. porisuteru スペシャルフォース2
と検索してみました.
ほう.なんかそれっぽいのが引っかかったので,アクセスしてみます.すると, parock
という名前で最多キルを更新したようですね.では,フラグのフォーマットに合わせて, cpaw{parock}
という答えが得られましたね.
Q18.[Forensic]leaf in forest
問題
このファイルの中にはフラグがあります。探してください。
フラグはすべて小文字です!
回答
こちらが CpawCTF
さんの Q18
の file
をダウンロードした misc100
ファイルです.
$ file misc100
misc100: pcap capture file, microsecond ts (little-endian) - version 0.0 (linktype#1768711542, capture length 1869357413)
うっひょ~~~~~~!
file
コマンドを実行したら, pcap
ファイルと大きなヒントが得られたので,
店主さんの誠意で Wireshark
を使わせていただくことにしました.
俺の解析次第でフラグを探せちゃうんだぞってことで,
解析しちゃいま~~~~す!まずは拡張子を変えてから,
コラ~!
これでもかって位謎々濃厚の misc100
ファイルには
pcapファイルに偽装するための文字が入っており
怒りのあまり, VSCode
で閲覧しちゃいました〜!
すっかり店側も立場を弁え lovelive!
という文字を削除してもらったところで,
$ cat misc100.pcap | sed 's/lovelive!//g' > SUSURU
???????????e!CCCelive!lovelivPPPovelive!loveAAAe!lovWWWve!
{{{elive!loveliMMMelive!lovelGGG!lovelivRRRovelive!lEEElive!PPPelive!}}}
お次に,同じ文字が3連続しているところを
絞る〜!やったぞ〜!
$ cat misc100 | grep -ao "\(.\)\1\1"
CCC
PPP
AAA
WWW
{{{
MMM
GGG
RRR
EEE
PPP
}}}
ワシワシとした食感のファイルの中には、 フラグ(cpaw{mgrep})
が入っており
さすがのmattsunkunも 答えを提出してしまいました~!
ちなみに、店主さんがLANケーブル作成RTAをしている様子は
ぜひサブメインチャンネルをご覧ください
元ネタ↓
Q19.[Misc]Image!
問題
Find the flag in this zip file.
file
回答
ファイルをダウンロードして,例のごとく, file
コマンドでどんなファイルかみてみるか.
$ file misc100.zip
misc100.zip: OpenDocument Drawing
OpenDocument Drawing
ってなんやろ.色々調べてみると,どうやら, Microsoft
のアプリで開けるっぽい.気になる人はl misc100.zip
を展開して詳細をみても良い.結論から言うと, Word.app
を指定して,ファイルを開くと,以下の画面が出てくる.
$ open -a /Applications/Microsoft\ Word.app misc100.zip
そして, cpaw{It_is_fun__isn't_it?}
と言う答えが得られた. fun
と isn't
の間には アンダースコア(_
)が二つ入っていることに注意.
Q20.[Crypto]Block Cipher
問題
与えられたC言語のソースコードを読み解いて復号してフラグを手にれましょう。
暗号文:cpaw{ruoYced_ehpigniriks_i_llrg_stae}
回答
ファイルをダウンロードしてみる.ソースコードを見たかんじ,第1引数に暗号文を受け取り,第2引数の数字だけ,復号処理を行うっぽい.ではそのファイルを cc
でコンパイルして, ./a.out
を取得する.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
int i;
int j;
int key = atoi(argv[2]);
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;
}
第一引数はよっぽど ruoYced_ehpigniriks_i_llrg_stae
を渡せば良いことがわかるが,第二引数はぶっちゃけどうすれば良いか考えるのがめんどくさいので,以下のファイル loop.sh
を作成する.
for i in {0..15}
do
a=$(./a.out ruoYced_ehpigniriks_i_llrg_stae "$i")
echo "$a" >> list.txt
done
では,実行権限を与えて,実行する.
$ chmod +x loop.sh
$ ./loop.sh
生成された list.txt
を閲覧してみる.
cpaw{}
cpaw{ruoYced_ehpigniriks_i_llrg_stae}
cpaw{urYoec_dheipngriki_s_illgrs_ate}
cpaw{ourecYe_diphingkiri_sll__grats}
cpaw{Your_deciphering_skill_is_great}
cpaw{cYourhe_deingip_skirrll_iats_g}
cpaw{ecYouriphe_dkiringll_i_sats_gr}
cpaw{decYourngiphe_i_skiris_grll_}
cpaw{_decYourringiphell_i_skieats_gr}
cpaw{e_decYourkiringiph_grll_i_s}
cpaw{he_decYour_skiringipats_grll_i}
cpaw{phe_decYour_i_skiringi}
cpaw{iphe_decYourll_i_skiring}
cpaw{giphe_decYourgrll_i_skirin}
cpaw{ngiphe_decYours_grll_i_skiri}
cpaw{ingiphe_decYourats_grll_i_skir}
上から5行目あたりのものが,言葉になってそうですね. cpaw{Your_deciphering_skill_is_great}
が答えのようです.
Q21.[Reversing]reversing easy!
問題
フラグを出す実行ファイルがあるのだが、プログラム(elfファイル)作成者が出力する関数を書き忘れてしまったらしい…
reverse100
回答
とりあえず,ダウンロードして, file
コマンド
$ file rev100
rev100: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.24, BuildID[sha1]=f94360edd84a940de2b74007d4289705601d618d, not stripped
単純な解法 | strings
strings
コマンドを使って,終了.
$ strings rev100
<省略>
PTRh
D$L1
D$Fcpawf
D$J{
D$ y
D$$a
D$(k
D$,i
D$0n
D$4i
D$8k
D$<u
D$@!
T$Le3
[^_]
<省略>
答えは, cpaw{yakiniku!}
別解 | リバースエンジニアリング
リバースエンジニアリングをする.
; Attributes: bp-based frame fuzzy-sp
; int __cdecl main(int argc, const char **argv, const char **envp)
public main
main proc near
argc= dword ptr 8
argv= dword ptr 0Ch
envp= dword ptr 10h
; __unwind {
push ebp
mov ebp, esp
and esp, 0FFFFFFF0h
sub esp, 50h
mov eax, large gs:14h
mov [esp+4Ch], eax
xor eax, eax
mov dword ptr [esp+46h], 77617063h
mov word ptr [esp+4Ah], 7Bh ; '{'
mov dword ptr [esp+20h], 79h ; 'y'
mov dword ptr [esp+24h], 61h ; 'a'
mov dword ptr [esp+28h], 6Bh ; 'k'
mov dword ptr [esp+2Ch], 69h ; 'i'
mov dword ptr [esp+30h], 6Eh ; 'n'
mov dword ptr [esp+34h], 69h ; 'i'
mov dword ptr [esp+38h], 6Bh ; 'k'
mov dword ptr [esp+3Ch], 75h ; 'u'
mov dword ptr [esp+40h], 21h ; '!'
mov word ptr [esp+15h], 0A7Dh
mov byte ptr [esp+17h], 0
mov dword ptr [esp+1Ch], 5
lea eax, [esp+46h]
mov [esp+4], eax
mov dword ptr [esp], offset unk_8048620
call _printf
cmp dword ptr [esp+1Ch], 5
jz short loc_804855E
これでも yakiniku!
と言う文字列が見えますね.
Q22.[Web]Baby's SQLi - Stage 1-
問題
困ったな……どうしよう…….
ぱろっく先生がキャッシュカードをなくしてしまったショックからデータベースに逃げ込んでしまったんだ.
うーん,君SQL書くのうまそうだね.ちょっと僕もWeb問作らなきゃいけないから,連れ戻すのを任せてもいいかな?
多分,ぱろっく先生はそこまで深いところまで逃げ込んで居ないと思うんだけども…….
とりあえず,逃げ込んだ先は以下のURLだよ.
一応,報酬としてフラグを用意してるからよろしくね!
https://ctf.spica.bz/baby_sql/
Caution
・sandbox.spica.bzの80,443番ポート以外への攻撃は絶対にしないようにお願いします.
・あなたが利用しているネットワークへの配慮のためhttpsでの通信を推奨します.
回答
証明書が切れていますが,アクセスします.
単純に SQL
を書いてみます.
select * from palloc_home
cpaw{palloc_escape_from_stage1;(}
と言う答えが得られました.
Q28.[Network] Can you login?
問題
古くから存在するネットワークプロトコルを使った通信では、セキュリティを意識していなかったこともあり、様々な情報が暗号化されていないことが多い。そのため、パケットキャプチャをすることでその情報が簡単に見られてしまう可能性がある。
次のパケットを読んで、FLAGを探せ!
network100.pcap
(2021/04/11: 問題ファイルを更新しました。)
回答
とりあえず,ファイルをダウンロードして, Wireshark
で開こうか.
最初のキャプチャ結果のところで,ターゲットとなっているドメインが q28.ctf.cpaw.site
になっていることがわかる.また,主に FTP
プロトコルで通信していることがわかる.
では, FTP
でフィルタしてみよう.
なんと,ユーザー名は cpaw_user
,パスワードは 5f4dcc3b5aa765d61d8327deb882cf99
で通信していることがわかってしまった.
なので, ftp
コマンドを使って,サーバーにアクセスして,フラグを取得してみる.
$ ftp q28.ctf.cpaw.site
Connected to host1.ctf.cpaw.site.
220 Welcome to Cpaw CTF FTP service.
Name (q28.ctf.cpaw.site:mattsunkun): cpaw_user
331 Please specify the password.
Password:
230 Login successful.
ftp> passive
Passive mode on.
ftp> ls
227 Entering Passive Mode (118,27,110,77,234,96).
150 Here comes the directory listing.
-rw-r--r-- 1 ftp ftp 36 Sep 01 2017 dummy
226 Directory send OK.
ftp> get dummy
227 Entering Passive Mode (118,27,110,77,234,96).
150 Opening BINARY mode data connection for dummy (36 bytes).
WARNING! 1 bare linefeeds received in ASCII mode
File may not have transferred correctly.
226 Transfer complete.
36 bytes received in 0.00046 seconds (76.4 kbytes/s)
なんか dummy
っていうファイルがあったからダウンロードして閲覧してみる.
FLAG file exists in this directory.
え... dummy
っていうファイルしかなかったぞ...否. -a
オプションで隠しファイルもみてみよう.
ftp> ls -a
227 Entering Passive Mode (118,27,110,77,234,96).
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
227 Entering Passive Mode (118,27,110,77,234,101).
150 Opening BINARY mode data connection for .hidden_flag_file (39 bytes).
WARNING! 1 bare linefeeds received in ASCII mode
File may not have transferred correctly.
226 Transfer complete.
39 bytes received in 0.000375 seconds (102 kbytes/s)
ftp>
良さそうなのがダウンロードできた.では,ダウンロードした .hidden_flag_file
を閲覧する. cpaw{f4p_sh0u1d_b3_us3d_in_3ncryp4i0n}
と言う答えが得られました.
おわりに
感想
-
CTF
っておもろいな〜〜
筆者について
Discussion