SECCON Beginners CTFと本記事について
2021年5月22日と2021年5月23日に開催された「SECCON Beginners CTF 2021」の「web」の「check_url」問題について、解きましたので、手順を詳細に記載します。
web(check_url)
以下の問題文に記載がありますが、curlコマンドを使った問題のようです。
問題のWebサイトにアクセスすると、以下の画面が表示されます。
「like this」がリンクになっているため、クリックすると、以下の画面が表示されます。
URLを確認すると、パラメータにFQDNが表示されているため、任意のWebサイトを指定できるように見えます。
どのような操作をしたら、フラグが表示されるか分からないため、提供されたファイルを確認します。
提供されたファイルは以下の通りです。
<!-- HTML Template -->
<?php
error_reporting(0);
if ($_SERVER["REMOTE_ADDR"] === "127.0.0.1"){
echo "Hi, Admin or SSSSRFer<br>";
echo "********************FLAG********************";
}else{
echo "Here, take this<br>";
$url = $_GET["url"];
if ($url !== "https://www.example.com"){
$url = preg_replace("/[^a-zA-Z0-9\/:]+/u", "👻", $url); //Super sanitizing
}
if(stripos($url,"localhost") !== false || stripos($url,"apache") !== false){
die("do not hack me!");
}
echo "URL: ".$url."<br>";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, 2000);
curl_setopt($ch, CURLOPT_PROTOCOLS, CURLPROTO_HTTP | CURLPROTO_HTTPS);
echo "<iframe srcdoc='";
curl_exec($ch);
echo "' width='750' height='500'></iframe>";
curl_close($ch);
}
?>
<!-- HTML Template -->
以下の箇所を確認したところ、送信元IPアドレスが「127.0.0.1」である場合にフラグが表示されることが分かります。
if ($_SERVER["REMOTE_ADDR"] === "127.0.0.1"){
echo "Hi, Admin or SSSSRFer<br>";
echo "********************FLAG********************";
}
送信元IPアドレスが「127.0.0.1」になるには、以下の流れで動作したら
- PCがWebサーバに「curl http://127.0.0.1/」の実行命令をする。
- Webサーバが「curl http://127.0.0.1/」を実行する。
- Webサーバに送信元IPアドレスが「127.0.0.1」の通信があったため、フラグ表示する。
- WebサーバからPCにフラグを含むデータを返す。
図にすると、以下のようになります。
パラメータを「url=http://127.0.0.1」にしてWebサイトにアクセスします。
しかし、文字がお化けのアイコンに代わって、フラグが表示されません。
再度提供されたプログラムを以下のプログラムが記載されています。
そのため、「aからz」と「AからZ」と「0から9」の3種類以外の文字列はお化けのアイコンに置換されてしまいます。
また、大文字小文字問わず「localhost」と「apache」があった場合も強制終了されてしまいます。
$url = $_GET["url"];
if ($url !== "https://www.example.com"){
$url = preg_replace("/[^a-zA-Z0-9\/:]+/u", "👻", $url); //Super sanitizing
}
if(stripos($url,"localhost") !== false || stripos($url,"apache") !== false){
die("do not hack me!");
}
上記の条件で「127.0.0.1」を指定する必要があるため、16進数に変換した「0x7F000001」をurlパラメータで送信しました。
フラグ(ctf4b{5555rf_15_53rv3r_51d3_5up3r_54n171z3d_r3qu357_f0r63ry})が表示されました。
SECCON Beginners CTF 2021に関する記事
SECCON Beginners CTF 2021についての関連記事は以下の通りです。
必要に応じて、ご確認ください。
No | タイトル | 記事の概要 |
---|---|---|
1 | SECCON Beginners CTF 2021 writeup | 以下のカテゴリの問題のwriteupを記載します。 【カテゴリ:welcome】 ・welcome 【カテゴリ:crypto】 ・imple_RSA 【カテゴリ:reversing】 ・only_read ・children 【カテゴリ:pwnable】 ・rewriter 【カテゴリ:web】 ・osoba 【カテゴリ:misc】 ・git-leak ・Mail_Address_Validator |
2 | SECCON Beginners CTF 2021 writeup (crypto:simple_RSA) | cryptカテゴリのsimple_RSAの問題の writeupを記載します。 |
3 | SECCON Beginners CTF 2021 writeup (crypto:Logical_SEESAW) | cryptカテゴリのLogical_SEESAWの問題の writeupを記載します。 |
4 | SECCON Beginners CTF 2021 writeup (crypto:GFM) | cryptカテゴリのGFMの問題の writeupを記載します。 |
5 | SECCON Beginners CTF 2021 writeup (crypto:Imaginary) | cryptカテゴリのImaginaryの問題の writeupを記載します。 |
6 | SECCON Beginners CTF 2021 writeup (web:Werewolf) | webカテゴリのWerewolfの問題の writeupを記載します。 |
7 | SECCON Beginners CTF 2021 writeup (web:check_url) | webカテゴリのcheck_urlの問題の writeupを記載します。 |
8 | SECCON Beginners CTF 2021 writeup (web:json) | webカテゴリのjsonの問題の writeupを記載します。 |
9 | SECCON Beginners CTF 2021 writeup (web:cant_use_db) | webカテゴリのcant_use_dbの問題の writeupを記載します。 |