Hello there, ('ω')ノ
暗号化オラクルによる認証バイパスを。
このラボには、暗号化オラクルをユーザに公開する論理的な欠陥が含まれていて。
まずは、ログインして。
リクエストを確認するとCookieのstay-logged-inが暗号化されていて。
それから、正常動作確認を。
レスポンスのnotification-headerのclassには何もなくて。
また、イレギュラーなケースの確認も。
メールアドレスが指摘されたようで。
レスポンスのnotification-headerのclassがポイントで。
無効なメールアドレスを使用すると。
レスポンスで、notificationに暗号化が設定してからリダイレクトされるようで。
成功したリクエストとイレギュラーなリクエストを比較すると。
notificationの有無が確認できて。
下記のリクエストをリピータへ。
notificationとstay-logged-inを同じにしてSendすると。
stay-logged-in=MrLPt%2fevnncFrnI8r%2b9mPhsyKYiZqHV8jOGCaPqvQb4%3d; notification=MrLPt%2fevnncFrnI8r%2b9mPhsyKYiZqHV8jOGCaPqvQb4%3d
下記の表示だけで。エラーは発生しないということがわかって。
ログインしたままのユーザ名が含まれて。
wiener:1620629436961
また、どうやら10桁のタイムスタンプが付加されているようで。
タイムスタンプ=1620629436
⇩
日時(Tokyo)=2021/05/10 15:50:36
ここから、管理者パネルにアクセスできるための試行錯誤を。
下記に変更してリクエストをSendして、エラー時のnotificationを取得して。
wiener:1620629436961 ⇨ administrator:1620629436961
取得したnotificationの値をCookieに挿入してSendして。
administrator:1620629436961がレスポンスに反映されることを確認して。
notification=kFufwFszdFj6l1GRL73YhLZzcdHgbtM10QHkF1WCGLQhITXuyz8iJ%2b2rZ4Ctz1NvSa7pFSuHvpXhX70Qag6aOQ%3d%3d
それからnotificationをデコードへ。
Cookieを復号化して。
プレフィックスのInvalid email address: の23文字を削除して。
再度、エンコードして。
再度、notificationに挿入してSendするとエラーメッセージが。
どうやら入力長が16の倍数である必要があるようで。
administrator:1620629436961長さは27で。
プレフィックスのInvalid email address: 長さは23で。
ということは、16x2-23=9で。
administrator:1620629436961の先頭に9文字を追加して。
追加9してxxxxxxxxxadministrator:1620629436961にして。
Invalidからの32文字を削除すると正しく複合化されるので。
下記のように変更して、Sendしてnotificationを取得して。
xxxxxxxxxadministrator:1620629436961
念のため取得したnotificationを挿入してSendして。
xxxxxxxxxadministrator:1620629436961が反映されるかを確認して。
さきほどと同じようにnotificationをデコーダへ。
URLとBase64でデコードして。
データの先頭から32バイトを削除して。
データを再エンコードして。
notificationに挿入してSendすると。
今度は、エラーメッセージはでなくなって。
プロキシの履歴からログイン後のリクエストをリピータへ。
stay-logged-inにさきほどの暗号文を挿入してSendすると。
管理者として管理パネルにアクセスできたようで。
Cookie: stay-logged-in=%7a%74%58%78%73%4e%6b%4f%53%4b%46%7a%41%38%35%33%58%2b%58%4f%4c%7a%69%76%62%77%59%69%4e%35%64%45%72%67%2f%69%38%37%50%4b%37%79%45%3d
下記のURLにアクセスすると。
https://acf91f631fd26a8c806fedea001b00d3.web-security-academy.net/admin
レスポンスからcarlosを削除するパラメータを確認して。
下記を実行すると。
GET /admin/delete?username=carlos
クリアできた。
Best regards, (^^ゞ