Webのログインクラック問題を解く[CTF for Beginners 2018]"[Warmup] Greeting"

経緯
この記事を元にCTF復習中
SECCON Beginners CTF 2018 Write-up
手順
1 まず挙動を見る
コードもぺろんと書かれている
<?php
if(isset($_POST['name'])) {
setcookie("name", $_POST['name'], time()+3600);
$username = htmlspecialchars($_POST['name'], ENT_QUOTES, "UTF-8");
// 管理者でログインできる?
if($username === "admin") {
$username = "偽管理者";
}
} elseif(isset($_COOKIE['name'])) {
$username = htmlspecialchars($_COOKIE['name'], ENT_QUOTES, "UTF-8");
} else {
$username = "ゲスト";
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>SECCON Beginners greeting service</title>
</head>
<body>
<h1>こんにちは!<?=$username?>さん!</h1>
<hr>
<?php if($username === 'admin'): ?>
こんにちは管理者さん。
Flagは、 "<?=$_ENV['SECCON_BEGINNERS_FLAG']?>"です。
<?php else: ?>
こんにちは<?=$username?>さん。
Flagは、管理者である"admin"さんにのみしか表示されません。
<?php endif; ?>
<form method="POST">
<input type="text" placeholder="名前" name="name">
<button type="submit">名前を変更する</button>
</form>
<pre>
<code>
<?=htmlspecialchars(file_get_contents("./index.php"), ENT_QUOTES, "UTF-8")?>
</code>
</pre>
</body>
</html>
$username == 'admin'ならFlagは、・・・と表示されるはずが、フォームにadminと入れるとPHPによって$username = '偽管理者'と代入されなおされてしまう!うーむ。
$_POST['name']うんたらということはPOSTメソッドのときに動くわけであるから、POSTじゃない方法でクッキーにadminとセットしたままこのサーバーにアクセスできればいいんだ。ということになる。
GETでアクセス
要するに、これは一旦POSTしたあとに再読込すればいいということになる。
こんにちは管理者さん。 Flagは、 "ctf4b{w3lc0m3_TO_ctf4b_w3b_w0rd!!}"です。
OK!
curlでもできるよ
もちろんカールでもできます^^
$ curl -b name=admin greeting.chall.beginners.seccon.jp
参考資料によると、下記のようにgrepをかけると、flag部分だけ抽出できてより手っ取り早い!
$ curl -b name=admin greeting.chall.beginners.seccon.jp | grep ctf4b
参考引用元記事
こちらも参考にさせていただきました。
http://zeosutt.hatenablog.com/entry/2018/05/27/140530