【Hacker101】Micro-CMS v1_日本語WalkThrough

# 1. Hacker101とは

https://ctf.hacker101.com/

>About
Hacker101 CTF（Capture The Flag）は、安全で報酬のある環境でハッキングを学ぶために設計されたゲームです。Hacker101は、HackerOneによって運営されるハッカー向けの無料教育サイトです。このCTFは、世界を少しずつ良くするための計画の中で別の重要な要素です。一つのバグずつ、世界を改善することを目指しています。

バグバウンティなどで知られるHackerOneの運営するハッキング技術の学習環境です。
Web系の問題を中心にCTF形式の問題がそろっており、登録は必要ですが無料でできます。
自身で特別な環境を準備しなくてもいい問題もあるので始めやすいです。

一定のポイントを取るとHackerOneのバグバウンティでプライベートプログラムに招待される権利を得られます。
（権利が得られるだけですぐに招待されるわけではないです。）


# 2. 対象問題
今回はWebのEazy問題である**Micro-CMS v1**のwriteupになります。

# 3. 環境
今回は特別な環境はいりません。
ブラウザがあればOKです。
わたしはEdgeで実施しました。

# 4. Writeup
## 4.0 対象サイトのチェック
- Hacker101のHomeからMicro-CMS v1の問題をスタートします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3475030/130dad9d-7ba1-4df3-f0cb-d906a06ee215.png)


- しばらく待つと問題のWebページに遷移します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3475030/cda25f5b-1cb3-d323-09b7-0a8a1e9e7bc2.png)
なにやらTestページが2つとページを作るためのページが１つあります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3475030/cb079750-47b4-b09d-0d7b-997e6bbce3b2.png)
TestページはEditすることができそうです。
これはMarkdownのページも同じでした。

- Create a new pageではTitleと本文を自由に入力して新しいページを作成できそうです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3475030/cb58ae26-00a2-85c1-b4f2-0472b14fd0b4.png)
Markdownはサポートしてるけどスクリプトは実行できないと書いてあります。
本当でしょうか。

## 4.1 Flag 0
Create Pageに注目します。
何かページを作成してみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3475030/874c6792-b732-b9de-1eb2-b0fefad1a568.png)

入力した内容がそのまま表示されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3475030/1f1e5aa1-4562-09ba-0882-982488c51278.png)

こういう場合は大体XSS(クロスサイトスクリプティング)です。
HTMLのスクリプトタグを埋め込んで実行されるか確認してみましょう。
```HTML
<!-- XSSスクリプト -->
<script>alert(1);</script>
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3475030/e86f7787-4a8c-6579-6628-d7bd174a7648.png)

**↓**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3475030/28b11585-8bf7-c78c-87d9-73b6c7e84643.png)
なにも起こりません。。。
やはりスクリプトは実行されないのでしょうか。。。

Homeに戻るとHomeにもTitleが表示されていることがわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3475030/489ff5ac-ca48-0a12-a9e5-8eddccdf448a.png)

Titleにスクリプトを埋め込めばHomeで実行されませんでしょうか。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3475030/c9809d60-bf5d-aabf-6d19-bbc326b7e13b.png)
**↓**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3475030/978a1acc-565f-9fa4-2891-aee147f3530b.png)
何も起きませんが今度はタグも表示されています。
Homeに戻ると・・・
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3475030/2e9fcd9e-ff86-c02e-ecc1-5cdef2dc89a2.png)
Flagを入手できました！

## 4.2 Flag 1
Homeに戻るたびにFlagが表示されてうっとうしいので一度Hacker101の画面でTerminateしてから再び起動しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3475030/ed3e77c7-f684-fd1c-f315-632be30d1606.png)

今度はURLに注目してみてみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3475030/5152bbf8-b84b-1bdf-0cdd-e0af54404f3a.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3475030/cd7f45f0-fe51-a7bc-fb5a-c16202fd6330.png)

pageごとにURLで数字を指定しています。
URLのパスパラメータではないかと予想ができます。
SQLなどでこのパラメータを利用している可能性を考えSQLインジェクションをかけてみます。
まずは
```
https://<ご自身の～>.com/page/'
```
を送信してみます。シングルクォーテーションはSQLでエラーを発生させることが多く、このエラーを確認できればどのSQLを使っているかなどの情報が得られる場合があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3475030/733fe5c8-682f-423c-8b9c-f7ab2c1a6c2f.png)
Not Foundでした。。。
しかし、編集ページのURLでも同様にパスパラメータを使っているようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3475030/353a7f79-2435-23c4-4107-12627a29b356.png)
Editページにもシングルクォーテーションでインジェクションをかけます。
```
https://<ご自身の～>.com/page/edit/'
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3475030/d9b0211c-1626-4a8c-7731-6087349503f0.png)
Flagを入手できました！！

## 4.3 Flag 2
URLのパスパラメータが新しいページではどうなっているか確認してみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3475030/1922f17a-6ab9-ace0-7951-86f1143ddd26.png)
「11」のページが作成されています。
Markdownのページが2だったので、3~10のページの存在が怪しいです。
URLの数字を変更しながら3~10のページが存在しないか確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3475030/55ae6628-d6b3-225a-d7ec-f43a68f4a225.png)
ほとんどNot Foundでしたが、4のページだけはForbiddenで権限があればアクセスできそうです。
Editページも同様か見てみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3475030/77d46d32-7faa-328e-ccb9-05291ebef67a.png)

Flagが入手できました！

## 4.4 Flag 3
Flag1の入手の際には、本文中に記載したscriptタグがフィルターされている様子が確認できました。
他にXSSで使えそうなタグはないでしょうか。
Markdown Testingのページを確認すると本文中にボタンが設置してあります。
Editページを見るとbuttonタグが認識されていることを確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3475030/2a2ad5e8-ed68-77d3-739d-fc5fd2c2727a.png)
ボタンタグではボタンを押した際に任意の処理を実行するように設定できます。
```html
<button onclick=alert('geregere')>Some button</button>
```
このページのボタンタグを上記に編集してSaveし、作成したボタンを押してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3475030/694513a0-559e-1619-c00d-993b3fa17aaf.png)
**↓**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3475030/3d233811-1248-67fa-ea29-db63094b7a4a.png)
XSSの脆弱性を利用できそうなことがわかりました！

ここで任意の処理を追加するためにブラウザの開発者ツールでソースコードを見てみると・・・
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3475030/e1f0c6e4-30a4-33bb-5b98-95191f82295b.png)

Flagが表示されていました！

# 5. まとめ
Hacker101のMicro-CMS v1を解いてみました。
基本的な手法の基礎を確認できるいい問題だと思います。

この記事が皆さんのCTFライフの一助になっていれば幸いです。

# 6. 参考
- [Hacker 101](https://ctf.hacker101.com/)
- [HakcerOne](https://www.hackerone.com/)
- [[RESTful API]パスパラメータ、クエリパラメータ、リクエストボディの違いと設計](https://qiita.com/Shokorep/items/b7697a146cbb1c3e9f0b)