問題概要
picoCTFの「Bookmarklet」という問題の解説記事です。
- カテゴリ: Web Exploitation
- 難易度: Easy
問題文
解説
ステップ1: Webページの確認
問題には以下のように記されています:
Why search for the flag when I can make a bookmarklet to print it for me?
ブックマークレットを使ってフラグを取得する問題なのでしょうか?
問題文中のリンクをクリックして、Webページを開きます。
Webページでは以下のようなJavaScriptが提供されています。
javascript:(function() {
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);
}
alert(decryptedFlag);
})();
最後に
alert(decryptedFlag); とあるので、フラグが復号されてアラートで表示されるようです。
このJavaScriptコードをbookmarkletとしてブラウザに登録して実行することで、フラグを取得できるようです。ステップ2: bookmarkletの登録と実行
ブラウザのブックマークバーに新しいブックマークを作成し、「編集」をクリックし、URL欄に上記のjavascriptコードを貼り付けます。
登録したbookmarkletをクリックすると、JavaScriptのアラートが表示され、フラグが表示されます。
※フラグはマスクしています。
つまずきポイント(補足)
bookmarkletが実行できない/クリックしても何も起きない
ブラウザや設定によっては、ブックマークのURL欄に
javascript: を含む文字列がうまく保存できないことがあります。その場合は、
- まずは「開発者ツールのConsoleで実行(ステップ3)」でフラグを取る
- 別ブラウザ(Chrome/Firefox など)で試す
のどちらかが手早いです。
コードをそのまま貼ると改行が邪魔になる
bookmarkletとして登録するときは、改行や余分な空白が原因で動かないことがあります。 うまく動かない場合は、ワンライナーに整形してから貼り付けるのも手です。
使ったものの軽い解説
bookmarklet(ブックマークレット)
ブックマークのURLに
javascript:(function(){ ... })(); のようなコードを登録し、クリックで実行できる仕組みです。
「よく使う操作をボタン化する」用途にも使われます。まとめ
この問題は、ページ内に提示されたJavaScript(bookmarklet)を実行して、暗号化された文字列を復号するタイプでした。
▼ポイントは次の通りです。
- まずは提示されたコードを読んで、最終的に何が表示されるかを確認する(今回は
alert(decryptedFlag)) - bookmarkletが面倒なときは、Console(コンソール)で復号処理だけ実行してもOK
閲覧ありがとうございました!
NEXT
次におすすめ
読み終わったら、そのまま次へ
【picoCTF】Unminify - minifyされたHTML/JSを整形して埋め込みフラグを発見
カテゴリ: Web Exploitation難易度: Easy#picoCTF
次の記事へ →
同じカテゴリ/難易度/picoCTFでの表示順が近い記事を優先しておすすめしています。