picoCTF WebExploitation(Easy)

# picoCTF
WebExploitatinのEasy問題writeupです。

## Cookie Monster Secret Recipe

Cookie情報を見つけることができれば、手がかりがありそうです。
Chromeの場合、開発者ツールを使うことで簡単にCookie情報を見ることができます。

![スクリーンショット 2025-06-01 224106.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4055936/763b9ca6-b011-4acc-a7e3-e8d6c0dac70d.png)

ApplicationのCookiesに`secret_recipe`がありました。暗号化されているので、[CyberChef](https://gchq.github.io/CyberChef/)で入力してみる。
![スクリーンショット 2025-06-01 224444.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4055936/e75b7cbc-9dfe-4ec5-bf32-a70156dc3f9b.png)

Base64かなと思って試してみると当たりでした。

## WebDecode
ページにアクセスするとめちゃくちゃ煽られました。
![スクリーンショット 2025-06-01 224912.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4055936/6d5302c3-4e54-4a66-ac4b-51e2ca7d40a3.png)
![スクリーンショット 2025-06-01 224929.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4055936/b8005be5-58a6-4d73-93f0-fa23919fba0d.png)
`about`にアクセスするとこのページにflagがあるみたいです。探すにもコードを見るしかないので見てみました。
```html

<!DOCTYPE html>
<html lang="en">
 <head>
  <meta charset="utf-8"/>
  <meta content="IE=edge" http-equiv="X-UA-Compatible"/>
  <meta content="width=device-width, initial-scale=1.0" name="viewport"/>
  <link href="style.css" rel="stylesheet"/>
  <link href="img/favicon.png" rel="shortcut icon" type="image/x-icon"/>
  <!-- font (google) -->
  <link href="https://fonts.googleapis.com/css2?family=Lato:ital,wght@0,400;0,700;1,400&amp;display=swap" rel="stylesheet"/>
  <title>
   About me
  </title>
 </head>
 <body>
  <header>
   <nav>
    <div class="logo-container">
     <a href="index.html">
      <img alt="logo" src="img/binding_dark.gif"/>
     </a>
    </div>
    <div class="navigation-container">
     <ul>
      <li>
       <a href="index.html">
        Home
       </a>
      </li>
      <li>
       <a href="about.html">
        About
       </a>
      </li>
      <li>
       <a href="contact.html">
        Contact
       </a>
      </li>
     </ul>
    </div>
   </nav>
  </header>
  <section class="about" notify_true="cGljb0NURnt3ZWJfc3VjYzNzc2Z1bGx5X2QzYzBkZWRfMDJjZGNiNTl9">
   <h1>
    Try inspecting the page!! You might find it there
   </h1>
   <!-- .about-container -->
  </section>
  <!-- .about -->
  <section class="why">
   <footer>
    <div class="bottombar">
     Copyright © 2023 Your_Name. All rights reserved.
    </div>
   </footer>
  </section>
 </body>
</html>
```

`notify_true="cGljb0NURnt3ZWJfc3VjYzNzc2Z1bGx5X2QzYzBkZWRfMDJjZGNiNTl9">`
またBase64でエンコードされてると思ったので、再びCyberChefでデコードすると当たりでした。


## Unminify
コードを圧縮したという事ですが、開発者ツールでコードを見るとフォーマットされています。
コード内にflagがありました。

## Bookmarklet

![スクリーンショット 2025-06-03 134741.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4055936/d3407487-8daa-4c38-9b33-b04d6cf7e66e.png)

JavaScriptのコードが書かれていています。
一番手っ取り早い[paiza.io](https://paiza.io/projects/g--9KoEEORsjUG7AaeMgkA)でJavaScriptを実行してみました

```javascript
function hello()
{
    var encryptedFlag = "àÒÆÞ¦È¬ëÙ£ÖÓÚåÛÑ¢ÕÓÓÇ¡¥Ìí";
    var key = "picoctf";
    var decryptedFlag = "";
    for (var i = 0; i < encryptedFlag.length; i++)
    {
        decryptedFlag += String.fromCharCode((encryptedFlag.charCodeAt(i) - key.charCodeAt(i % key.length) + 256) % 256);
    }
    return decryptedFlag
}

var result = hello()
console.log(result)    
```

実行するとflagが出力されました。

### どのような復号がされているのか
` decryptedFlag += String.fromCharCode((encryptedFlag.charCodeAt(i) - key.charCodeAt(i % key.length) + 256) % 256);`が主な計算式です。

- `encryptedFlag.charCodeAt(i)` : `encryptedFlag`の1文字目の文字コードを取得
- ` key.charCodeAt(i % key.length)` : `i`を`key.length`で割った余りをインデックスとした`Key`の文字コードを取得
- `fromCharCode` : 上記2つの差を取って`256`を足して`256`で割った値を文字コードとして文字を取得

という流れになります。
[ヴィジュネル暗号](https://ja.wikipedia.org/wiki/%E3%83%B4%E3%82%A3%E3%82%B8%E3%83%A5%E3%83%8D%E3%83%AB%E6%9A%97%E5%8F%B7)みたいですね。

## Local Authority
試しに`ID:admin`、`pass:root`でログインしてみます。
![スクリーンショット 2025-06-03 141429.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4055936/87e31d48-c889-48b3-89e0-dc4de6b7cdc8.png)
ログインできませんでした。
![スクリーンショット 2025-06-03 144709.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4055936/dccffd8d-95aa-44ec-9174-87b17b1d6431.png)

開発者ツールで通信のログを見ることができます。

secure.jsを見てみると
```javascript
function checkPassword(username, password)
{
  if( username === 'admin' && password === 'strongPassword098765' )
  {
    return true;
  }
  else
  {
    return false;
  }
}
```
杜撰なセキュリティですね。この条件通りにログインするとflagが表示されます。

## Inspect HTML
![スクリーンショット 2025-06-03 195409.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4055936/776e9f9d-892e-4b9b-b580-44342211cc66.png)

htmlを見るだけでした

## Includes
これは.jsと.cssのファイルに分かれてflagが書かれています。

## Cookies

サイトにアクセスするとcookieを入力する欄があります。
![スクリーンショット 2025-06-03 210518.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4055936/5c42ec5c-e0f5-4906-83be-01f5f1a567ee.png)
色々入力してみましたが、変化はありませんでした、

開発ツールで見ても、いい情報はありません。Cookieが`-1`とだけわかりました。

検索欄に`snickerdoodle`と例が書いているので、入力してみました。
![スクリーンショット 2025-06-03 210859.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4055936/429dbc4d-7e7d-4cb8-a081-ef70d933c89a.png)

このページにも気になる情報はありませんでした。Cookieが`0`とだけわかりました。

[クッキー](https://www.allrecipes.com/gallery/most-popular-types-of-cookies/)の種類が書いてあるサイトを参考にして入力したが、手掛かりはありませんでした。

---

この時点でお手上げだったので、この[writeup](https://tech.kusuwada.com/entry/2021/04/08/121028)を参考にしました。
Cookieが`-1`から`0`へ変化していることから、Cookieをインデックスとしてクッキーを`0,1,2,3,4,5,6...`のように管理していると推測できるという...

参考記事では、`python`でCookieの総当たりをしていたので、`Burp Suite`でやってみました。

1. まず`Proxy`タブから`Open browser`を開き、該当サイトにアクセスします
![スクリーンショット 2025-06-03 212325.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4055936/5b313cdc-c7bd-4578-ac21-fa84e9927a79.png)

2. 検索欄に`snickerdoodle`と入力し、Cookieが`0`となったページに行く
3. そこで、`Intercept on`にして、ブラウザをリロードします

![スクリーンショット 2025-06-03 212643.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4055936/7de4b504-c896-478c-8567-3d07847aee0f.png)
4. `Request`で右クリックをして`Send to Intruder`を選択し、`Intruder`タブに移動
5.  `Cookie: name=0`の`0`の部分を選択し、`Add $`をクリックして`0`を変数化します![スクリーンショット 2025-06-03 213200.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4055936/ce29969e-c66e-4315-9ef7-6fb8547c455c.png)
6. `Payload type:Numbers`・`To: 99`に変更し、`Start attack`をクリックします
7. `19`のところでflagが表示されました![スクリーンショット 2025-06-03 213644.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4055936/5ed62bfa-0956-497c-a78b-08f3f2f0d428.png)

## まとめ
あとちょっとだけ問題ありますので随時追加します。
Burp Suiteの使い方をもう少しマスターしたいところです。