phisher2

WebページのURLと、サーバのファイル一式が与えられた。

与えられたファイル中の phisher2/phisher2/admin.py および phisher2/phisher2/app.py は、以下の動作をするものだった。

  1. JSONでテキストを受け取る。
  2. 受け取ったテキストを p タグで囲み、HTMLファイルを作成する。
  3. 作成したHTMLファイルをレンダリングし、スクリーンショットを撮る。
  4. 撮ったスクリーンショットに対しOCRを行う。
  5. OCRの結果から許可されるURLが得られた場合、受け取ったテキストから得られるURLにflagのパラメータを足してアクセスする。

アクセスさせたいURLをテキストで書いた後、その上にOCRに読ませるURLを画像で配置するとよい。
具体的には、RequestBin.com のURLの後に以下のテキストを繋げたものを送信した。

An URL of a web page and files for the server were given.

What the files phisher2/phisher2/admin.py and phisher2/phisher2/app.py in the given files do is:

  1. Receive a text in JSON format.
  2. Create a HTML file by surrounding the received text with a p tag.
  3. Render the HTML file and take a screenshot.
  4. Perform OCR on the screenshot.
  5. If an allowed URL is found from the result of OCR, access a URL found from the received text with a parameter containing the flag added.

We should firstly put an URL to have it to access as text, and then place an URL to have the OCR to read as an image over the text.
Specifically, I sent an RequestBin.com URL with this text added after the URL.

#<img style='position: absolute; left: 0; top: 0;' src='https://placehold.jp/30/ffffff/000000/700x100.png?text=https%3A%2F%2Fphisher2.beginners.seccon.games%2F'>

これにより、アクセスさせるURLが以下の画像で隠される。

This will have the URL to be accessed be hidden behind this image.

以下の手順でテキストの送信を行うと、RequestBin.com にflagが送られてきた。

  1. 指定のページを Firefox で開く。
  2. 開発者ツールのネットワークタブを開き、リロードする。
  3. / へのリクエストを右クリックし、「編集して再送信」を選択する。
  4. メソッドを POST にする。
  5. 名前 Content-Type、値 application/json のヘッダーを追加する。
  6. ボディを、送信するテキストを {"text":""} で囲んだものにする。
  7. 編集したリクエストを送信する。

I sent the text in this way. As a result, the flag was sent to RequestBin.com.

  1. Open the specified page with Firefox.
  2. Open the Network tab on the Developer Tools, and reload the page.
  3. Right-click the request to / and select "edit and resend".
  4. Set the method to POST.
  5. Add a header with a name Content-Type and a value application/json.
  6. Set the body to the text to send surrounded by {"text":" and "}.
  7. Send the modified request.
ctf4b{w451t4c4t154w?}

SECCON Beginners CTF 2023