Shikata Ga Nai

Private? There is no such things.

Authentication bypass via encryption oracleをやってみた

Hello there, ('ω')ノ

 

暗号化オラクルによる認証バイパスを。
このラボには、暗号化オラクルをユーザに公開する論理的な欠陥が含まれていて。

 

まずは、ログインして。

 

f:id:ThisIsOne:20210510151641p:plain

 

リクエストを確認するとCookieのstay-logged-inが暗号化されていて。

 

f:id:ThisIsOne:20210510184844p:plain

 

それから、正常動作確認を。

 

f:id:ThisIsOne:20210510145421p:plain

 

レスポンスのnotification-headerのclassには何もなくて。

 

f:id:ThisIsOne:20210510191903p:plain

 

また、イレギュラーなケースの確認も。

 

f:id:ThisIsOne:20210510145506p:plain

 

メールアドレスが指摘されたようで。

 

f:id:ThisIsOne:20210510145539p:plain

 

レスポンスのnotification-headerのclassがポイントで。

 

f:id:ThisIsOne:20210510191549p:plain

 

無効なメールアドレスを使用すると。

レスポンスで、notificationに暗号化が設定してからリダイレクトされるようで。

 

f:id:ThisIsOne:20210510185156p:plain

 

成功したリクエストとイレギュラーなリクエストを比較すると。

notificationの有無が確認できて。

 

f:id:ThisIsOne:20210510152524p:plain

 

下記のリクエストをリピータへ。

 

f:id:ThisIsOne:20210510154637p:plain

 

f:id:ThisIsOne:20210510154714p:plain

 

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

 

f:id:ThisIsOne:20210510155441p:plain

 

ここから、管理者パネルにアクセスできるための試行錯誤を。

下記に変更してリクエストをSendして、エラー時のnotificationを取得して。

 wiener:1620629436961 ⇨ administrator:1620629436961

 

f:id:ThisIsOne:20210510155724p:plain

 

取得したnotificationの値をCookieに挿入してSendして。

administrator:1620629436961がレスポンスに反映されることを確認して。

 notification=kFufwFszdFj6l1GRL73YhLZzcdHgbtM10QHkF1WCGLQhITXuyz8iJ%2b2rZ4Ctz1NvSa7pFSuHvpXhX70Qag6aOQ%3d%3d

 

f:id:ThisIsOne:20210510155837p:plain

 

それからnotificationをデコードへ。

 

f:id:ThisIsOne:20210510155900p:plain

 

Cookieを復号化して。

プレフィックスのInvalid email address: の23文字を削除して。

 

f:id:ThisIsOne:20210510160044p:plain

 

再度、エンコードして。

 

f:id:ThisIsOne:20210510160240p:plain

 

再度、notificationに挿入してSendするとエラーメッセージが。

どうやら入力長が16の倍数である必要があるようで。

 

administrator:1620629436961長さは27で。

プレフィックスのInvalid email address: 長さは23で。

ということは、16x2-23=9で。

 

administrator:1620629436961の先頭に9文字を追加して。

追加9してxxxxxxxxxadministrator:1620629436961にして。

Invalidからの32文字を削除すると正しく複合化されるので。

 

f:id:ThisIsOne:20210510160506p:plain

 

下記のように変更して、Sendしてnotificationを取得して。
 xxxxxxxxxadministrator:1620629436961

 

f:id:ThisIsOne:20210510160656p:plain

 

念のため取得したnotificationを挿入してSendして。

xxxxxxxxxadministrator:1620629436961が反映されるかを確認して。

 

f:id:ThisIsOne:20210510160842p:plain

 

さきほどと同じようにnotificationをデコーダへ。

 

f:id:ThisIsOne:20210510162722p:plain

 

URLとBase64でデコードして。

データの先頭から32バイトを削除して。

 

f:id:ThisIsOne:20210510162802p:plain

 

データを再エンコードして。

 

f:id:ThisIsOne:20210510202443p:plain

 

notificationに挿入してSendすると。

今度は、エラーメッセージはでなくなって。

 

f:id:ThisIsOne:20210510162923p:plain

 

プロキシの履歴からログイン後のリクエストをリピータへ。

 

f:id:ThisIsOne:20210510202944p:plain

 

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

 

f:id:ThisIsOne:20210510163848p:plain

 

下記のURLにアクセスすると。

 https://acf91f631fd26a8c806fedea001b00d3.web-security-academy.net/admin

 

f:id:ThisIsOne:20210510164107p:plain

 

レスポンスからcarlosを削除するパラメータを確認して。

 

f:id:ThisIsOne:20210510164225p:plain

 

下記を実行すると。

 GET /admin/delete?username=carlos

 

f:id:ThisIsOne:20210510164326p:plain

 

クリアできた。

 

f:id:ThisIsOne:20210510164303p:plain

 

Best regards, (^^ゞ