7 月 13 日から 7 月 14 日にかけて開催された InnoCTF International 2019 に、チーム zer0pts として参加しました。最終的にチームで ??? 点を獲得し、順位は得点 ??? チーム中 ??? 位でした。うち、私は 7 問を解いて ??? 点を入れました。
他のメンバーの write-up はこちら。
以下、私が解いた問題の writeup です。
I need your clothes your boots and your motorcycle (URL)
与えられた URL にアクセスすると Hello WORLD!
とだけ表示されました。
問題名から robots.txt
が存在していると推測して /robots.txt
にアクセスすると、以下のような内容が表示されました。
Disallow: /*/super-secret-admin-panel
super-secret-admin-panel
にアクセスすると、以下のようなログインフォームが表示されました。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Авторизация</title>
</head>
<body>
<form action="login.php" method="post">
<input type="text" placeholder="Login" name="login">
<input type="password" placeholder="Password" name="password">
<input type="submit">
</form>
</body>
</html>
ログインフォームといえば SQL インジェクションです。ユーザ名には適当な文字列を、パスワードには ' or 1;#
を入力して送信するとフラグが表示されました。
InnoCTF{ZzXdOZzsNnTNDHhIGiiAFnjCfmLMOAlX}
That’s why you need to study history (URL)
与えられた URL にアクセスすると、以下のような HTML が返ってきました。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Giant Internet Technologies</title>
<link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Roboto:400,300,100,100italic,300italic,400italic,700,700italic">
<link rel="stylesheet" href="/assets/bootstrap/css/bootstrap.min.css">
<link rel="stylesheet" href="/assets/css/animate.css">
<link rel="stylesheet" href="/assets/css/form-elements.css">
<link rel="stylesheet" href="/assets/css/style.css">
<link rel="stylesheet" href="/assets/css/media-queries.css">
<link rel="shortcut icon" href="/assets/ico/favicon.png">
<link rel="apple-touch-icon-precomposed" sizes="144x144" href="/assets/ico/apple-touch-icon-144-precomposed.png">
<link rel="apple-touch-icon-precomposed" sizes="114x114" href="/assets/ico/apple-touch-icon-114-precomposed.png">
<link rel="apple-touch-icon-precomposed" sizes="72x72" href="/assets/ico/apple-touch-icon-72-precomposed.png">
<link rel="apple-touch-icon-precomposed" href="/assets/ico/apple-touch-icon-57-precomposed.png">
</head>
<body>
<!-- Coming Soon -->
<div class="coming-soon">
<div class="inner-bg">
<div class="container">
<div class="row">
<div class="col-sm-12" style="margin-top:15%">
NOT A FLAG
</div>
</div>
</div>
</div>
</div>
<script src="/assets/js/jquery-1.10.2.min.js"></script>
<script src="/assets/js/jquery.backstretch.min.js"></script>
<script src="/assets/js/jquery.countdown.min.js"></script>
<script src="/assets/js/wow.min.js"></script>
<script src="/assets/js/teamscripts.js"></script>
</body>
</html>
背景には Git for Windows のロゴが表示されています。Git 関連の問題であると推測して .git/
にアクセスすると、HEAD
や COMMIT_EDITMSG
等のリポジトリの情報が格納されているファイルやディレクトリの一覧が表示されました。
wget -r http://(省略)/.git/
でこれらのファイルをまとめてダウンロードします。git log -p | grep Inno
でコミット履歴の中を探すとフラグが得られました。
$ git log -p | grep Inno
-InnoCTF{zPeEhoimGcNjgaOWQmnUZxlaSsadJMqQ}
+InnoCTF{zPeEhoimGcNjgaOWQmnUZxlaSsadJMqQ}
InnoCTF{zPeEhoimGcNjgaOWQmnUZxlaSsadJMqQ}
Can you check if this site is hiding something? (URL)
与えられた URL にアクセスすると、以下のような HTML が返ってきました。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Котики</title>
<link rel="stylesheet" href="style.css">
</head>
<body style="background: url(../assets/img/backgrounds/2.jpg) no-repeat; background-size: 100%;">
</body>
</html>
ここで読み込まれている style.css
は以下のような内容でした。
body {
background: url(LvtBqpbSqjvGCLjdAWzgccBWDIgHTbVs.png) no-repeat;
}
CSS ファイルで指定されているスタイルより style 属性で指定されているスタイルが優先して適用されるので、background: url(LvtBqpbSqjvGCLjdAWzgccBWDIgHTbVs.png) no-repeat;
という記述は意味のないものになってしまっています。
LvtBqpbSqjvGCLjdAWzgccBWDIgHTbVs.png
を開くとフラグが書かれた画像が表示されました。
InnoCTF{afhgmTHeqAWUZUwlKIHFNPhRuuPqBIng}
Look at my styled website! (URL)
与えられた URL にアクセスすると、以下のような HTML が返ってきました。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title> My first site </title>
<link rel="stylesheet" href="../assets/css/ImYZFSkiVugcEWTPoTxdj.css">
<link rel="stylesheet" href="../assets/css/nsSXpZKZdshcPtXU.css">
<link rel="stylesheet" href="../assets/css/nrilLfYGPrjUVFuDQ.css">
<link rel="stylesheet" href="../assets/css/oCgixdRdJVzZMecY.css">
<link rel="stylesheet" href="../assets/css/CZNfoZDbVizxJvPUkVRl.css">
<link rel="stylesheet" href="../assets/css/TXFPVbdMwrMxYTxXg.css">
<link rel="stylesheet" href="../assets/css/FPIMWIiomHXrRidGC.css">
<link rel="stylesheet" href="../assets/css/{chHTfrXajhrfCNqU.css">
<link rel="stylesheet" href="../assets/css/SedJZakJuDhyDPKEbe.css">
<link rel="stylesheet" href="../assets/css/FWwjPsYfqBYPilMY.css">
<link rel="stylesheet" href="../assets/css/oNFawIjgJIckuMQFtmK.css">
<link rel="stylesheet" href="../assets/css/YvASvYMqLkhtcFrit.css">
<link rel="stylesheet" href="../assets/css/QRNKbSPAyWIlfvBlkj.css">
<link rel="stylesheet" href="../assets/css/DMklHksgxIYQMark.css">
<link rel="stylesheet" href="../assets/css/EiVAGSsBSapVieQVMjlzA.css">
<link rel="stylesheet" href="../assets/css/IjdqiNzCsesZBMJtNvq.css">
<link rel="stylesheet" href="../assets/css/aebmKLECaLKwTCkGFTux.css">
<link rel="stylesheet" href="../assets/css/IytAotyWzPkyagkD.css">
<link rel="stylesheet" href="../assets/css/pjmIhPqyGsuJQxfGxGhJo.css">
<link rel="stylesheet" href="../assets/css/trIOtzyHkVedgFkU.css">
<link rel="stylesheet" href="../assets/css/SWrdwDFKGWYbgiBSxqPx.css">
<link rel="stylesheet" href="../assets/css/dzxXGpyzrLygZCxY.css">
<link rel="stylesheet" href="../assets/css/XgOGGmpWTDZQBrSOYE.css">
<link rel="stylesheet" href="../assets/css/tQzZgFxlnkWCnGbkgTw.css">
<link rel="stylesheet" href="../assets/css/zJQfcLndpqhmPVcwmJu.css">
<link rel="stylesheet" href="../assets/css/ZcKRmFhGjcwTqkxxy.css">
<link rel="stylesheet" href="../assets/css/svZaEerAGLKFWieVfTAr.css">
<link rel="stylesheet" href="../assets/css/ezayiEFQmffTPXHexp.css">
<link rel="stylesheet" href="../assets/css/NVxRfDzCykwSCPSHKhl.css">
<link rel="stylesheet" href="../assets/css/uDEvdDRYgyYhUNLqCXPS.css">
<link rel="stylesheet" href="../assets/css/nAjapDyPboYSShglLOky.css">
<link rel="stylesheet" href="../assets/css/QFpZXgoEXKpDaALurvyI.css">
<link rel="stylesheet" href="../assets/css/uvhUkHfNMDUUAnru.css">
<link rel="stylesheet" href="../assets/css/gHKnWTxDZkRQkDKK.css">
<link rel="stylesheet" href="../assets/css/QWoxqerDGbjyoPSEKO.css">
<link rel="stylesheet" href="../assets/css/yGRheLKZOEXBCjxUbcrW.css">
<link rel="stylesheet" href="../assets/css/IAFQgTMmicphyyUeqqm.css">
<link rel="stylesheet" href="../assets/css/CiWBpIpihRBUOHjeWG.css">
<link rel="stylesheet" href="../assets/css/uaFqAAsWbGIQhsdzHv.css">
<link rel="stylesheet" href="../assets/css/vpndcdMQAfhGVfcKaKjP.css">
<link rel="stylesheet" href="../assets/css/}gSlONKovZIDohUxuU.css">
</head>
<body>
<style>
body {
background-color: #fbaabf;
}
.smile {
width: 20%;
margin-left: auto;
margin-right: auto;
display: block;
margin-top: 15%;
}
</style>
<img class="smile" src="../assets/img/social-icons/ball.jpg">
</body>
</html>
DevTools の Network タブを開いてみると、link
要素で読み込まれている CSS ファイルはすべて 404 が返ってきており、存在していないことがわかります。
CSS ファイルのファイル名をよく見てみると、{chHTfrXajhrfCNqU.css
や }gSlONKovZIDohUxuU.css
など、A-Z
a-z
の範囲内にない文字は先頭だけにあることがわかります。各ファイル名の先頭文字だけを取り出して結合してみましょう。
DevTools の Console タブを開いて Array.from(document.getElementsByTagName('link')).map(e => decodeURIComponent(e.href.split('/').slice(-1)[0])[0]).join('')
を実行するとフラグが得られました。
InnoCTF{SFoYQDEIaIptSdXtzZseNunQugQyICuv}
Read between lines!
添付ファイル: ls.zip
ls.zip
を展開すると 1984.txt
Animal Farm.txt
The Catcher in the Rye.txt
という 3 つの 1kB に満たないテキストファイルと、cipher.jpg
という以下のような暗号文が書かれた画像ファイルが出てきました。
1 48 53 53 138
13 69 123 2 103 151
23 15 99 102 46 28 76
3 つのテキストファイルのファイル名はいずれも小説の題名です。おそらく Book cipher でしょう。これらのテキストファイルを利用して 1 行ごとに復号してみましょう。
import glob
cs = [[int(x) for x in c.split()] for c in """1 48 53 53 138
13 69 123 2 103 151
23 15 99 102 46 28 76""".splitlines()]
fs = [[f, open(f).read().split()] for f in glob.glob('ls/*.txt')]
for c in cs:
for f, s in fs:
try:
print(f, ''.join(s[x - 1][0] for x in c))
except:
pass
print('---')
$ python solve.py
ls/1984.txt Hurry
ls/The Catcher in the Rye.txt Icllt
---
ls/1984.txt aPtmio
ls/The Catcher in the Rye.txt slowly
---
ls/1984.txt wttfttf
ls/Animal Farm.txt WiETagw
ls/The Catcher in the Rye.txt fmhwBiI
---
1 行目の暗号文は 1984.txt
から Hurry
、2 行目の暗号文は The Catcher in the Rye.txt
から slowly
という単語が復号できましたが、3 行目の暗号文はどのテキストファイルでもそれっぽい単号が出てきていません。
1 行目と 2 行目で使われていない Animal Farm.txt
で復号した結果である WiETagw
を使ってそれっぽいフラグを作り、スコアサーバに送信してみると正解であると表示されました。
InnoCTF{Hurry_slowly_WiETagw}
Do you have a prism to take a closer look?
添付ファイル: prism.png
prism.png
はやけにカラフルな QR コードの画像でした。
stegsolve.jar を使って赤緑青の 3 色を分離し、それぞれ QR コードリーダで読み取るとフラグが得られました。
$ zbarimg r.png
QR-Code:InnoCTF{X6HvXi
scanned 1 barcode symbols from 1 images
$ zbarimg g.png
QR-Code:KqCpxokF8s4zG9
scanned 1 barcode symbols from 1 images
$ zbarimg b.png
QR-Code:63CYAlzanDcW5}
scanned 1 barcode symbols from 1 images
InnoCTF{X6HvXiKqCpxokF8s4zG963CYAlzanDcW5}
Look at this, it’s just an INFERNO!!
'&%$#"!=6;:98765.Rsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>Z<XW VUTSRQPOHlkKDIHAe('=B;@?>=<;4Xyxwvutsrqponmlkjihgfe#"y~}|{zsxq7uWmlk1onmlkMi b(IHGFEDCB^]\[ZYXWVONrRQJn10/.-,+*)('&%$#"!~}|{zyxwvutsrqponmlkjihgfedcba`_^ ]\[ZYunmrqponmlkd*KJ`edcba`Y^W{UZSwWVUT6LpPINGFKDhH*@d'&<A:?>=<;:3W765432r0) Mnmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:987SRQ3ONGLKDIHAe('CBA @?>=<;4Xyxwvutsrqponmlkjih&%$#"!~}|{zs9ZYXWVUqponPlediha'r
どう見ても Malbolge のコードです。適当な処理系で実行させるとフラグが得られました。
InnoCTF{1m_proud_0f_U}