Shikata Ga Nai

Private? There is no such things.

OAuth account hijacking via redirect_uri

Hello there, ('ω')ノ

 

Webを閲覧しているとソーシャルメディアアカウントを使用して。

ログインできるサイトに出くわすことが多々あって。

この機能が、OAuth2.0フレームワークで構築されている可能性があって。

けっこう、実装ミスが多いようで。

なので、脆弱性も多いようで。

OAuth認証のメカニズムについては、いろんなサイトで説明されているかと。

 

今回は、redirect_uriを介したOAuthアカウントのハイジャックを。

 

f:id:ThisIsOne:20210117162733p:plain

 

まずは、ソーシャルメディアに下記でログインして。

 wiener/peter

 

f:id:ThisIsOne:20210117162908p:plain

 

アカウントを紐づけして。

 

f:id:ThisIsOne:20210117162933p:plain

 

一旦、ログアウトして。

 

f:id:ThisIsOne:20210117163054p:plain

 

再度、ログインしてみると。

 

f:id:ThisIsOne:20210117164012p:plain

 

すでに紐づいているようなので。

exploit serverを起動して。

 

f:id:ThisIsOne:20210117163054p:plain

Solutionにあるiframeをコピーして。

 

f:id:ThisIsOne:20210117164610p:plain

 

Bodyに張り付けて。

 

f:id:ThisIsOne:20210117224859p:plain

 

承認サーバに転送しているリクエストからURLをコピーして。

 

https://ac211f0e1fe61fd1800399270260001a.web-security-academy.net/auth?client_id=x5wh13k29leocuyu6o1d6&redirect_uri=https://acfd1f901fda1fb18061993b00a50051.web-security-academy.net/oauth-callback&response_type=code&scope=openid%20profile%20email

 

f:id:ThisIsOne:20210117172444p:plain

 

アプリケーションの OAuthクライアント IDを書き換えて。

 

https://ac211f0e1fe61fd1800399270260001a.web-security-academy.net/auth?client_id=x5wh13k29leocuyu6o1d6

 

f:id:ThisIsOne:20210117172746p:plain

 

クライアント ID の登録済み redirect_uriを書き換えて。

アプケーション用の有効なリダイレクト URI を登録する必要があるので。

exploit serverのURI を。

 

https://acb81f4e1f2f1f8d80a19974017d0089.web-security-academy.net/

 

そして、Storeして。

View exploitして確認して。

 

f:id:ThisIsOne:20210117172819p:plain

 

f:id:ThisIsOne:20210117172334p:plain

 

Deliver exploit to victimしたら。

Access logでログを確認して。

 

f:id:ThisIsOne:20210117173219p:plain

 

ログの中からコードをコピーして。

 8wmJTsebcUA3VVjzDjF9dyecsiCMlO-AXbYDKcLYWp1

 

f:id:ThisIsOne:20210117173417p:plain

 

フィードバックするリクエストでRepeaterを。

 

f:id:ThisIsOne:20210117173607p:plain

 

コードを置き換えて、Sendして。

 

f:id:ThisIsOne:20210117173743p:plain

 

レスポンスをブラウザを見ることに。

 

f:id:ThisIsOne:20210117174015p:plain

 

f:id:ThisIsOne:20210117174050p:plain

 

Admin panelで。

 

f:id:ThisIsOne:20210117174131p:plain

 

carlosをDeleteすると。

 

f:id:ThisIsOne:20210117174203p:plain

 

クリアできた。

 

f:id:ThisIsOne:20210117174225p:plain

 

Best regards, (^^ゞ

Forced OAuth profile linkingをやってみた

Hello there, ('ω')ノ

 

今回は、強制的にOAuthプロファイルの連携を。

 

f:id:ThisIsOne:20210116120840p:plain

 

一応、exploit serverも立ち上げておいて。

 

f:id:ThisIsOne:20210116141053p:plain

 

まずは、当システムのブログにログインして。
 wiener/peter

 

f:id:ThisIsOne:20210116120941p:plain

 

Attach a social profileをクリックして。

 

f:id:ThisIsOne:20210116120754p:plain

 

今度は、紐づけするソーシャルメディアにログインして。

 peter.wiener/hotdog

 

f:id:ThisIsOne:20210116141234p:plain

 

Continueをクリックすると。

 

f:id:ThisIsOne:20210116141610p:plain

 

ソーシャルメディアアカウントを正常に紐づけできて。

 

f:id:ThisIsOne:20210116120705p:plain

 

Burpの履歴で、どのリクエストでURIを要求して。

次にどのリクエストで認証コードを送信して。

上記のレスポンスが返ってくるのかを確認して。

 

f:id:ThisIsOne:20210116142412p:plain

 

一旦、ログアウトして。

ソーシャルメディアにログインをクリックすると。

ログイン状態のままだと確認できて。

再度、Attach a social profileをクリックして。

 

f:id:ThisIsOne:20210116120632p:plain

 

認証コードを送信するリクエストでURLをコピーして。

この認証コードを他で使用されないように、リクエストをドロップしておいて。

インターセプトをオフにして。

ブログからログアウトして。

 

f:id:ThisIsOne:20210116122804p:plain

 

 

はじめに起動していたexploit serverで下記で。

 

<iframe src="https://ac011fd81fb19f6780de25c400440063.web-security-academy.net/oauth-linking?code=1ip5bcQZYEKc73zU1iF87nFXD6Owk7q7CiCKyHpoohr"></iframe>

 

認証コードを送信後の遷移を実行したら。

エクスプロイトを被害者に提供します。 ブラウザがを読み込むと iframe、

ソーシャルメディアプロファイルを使用してOAuthフローが完了して。

ブログWebサイトの管理者アカウントに紐づけされるので。

ラボにもどって。

 

f:id:ThisIsOne:20210116123744p:plain

 

はじめのブログのサイトに戻って。

ソーシャルメディアにログインをクリックすると。

 

f:id:ThisIsOne:20210116124045p:plain

 

管理者ユーザでログインしているようで。

Admin panelをクリックして。

 

f:id:ThisIsOne:20210116123935p:plain

 

carlosをDeleteするとクリアできた。

 

f:id:ThisIsOne:20210116143554p:plain

 

f:id:ThisIsOne:20210116143747p:plain

 

Best regards, (^^ゞ

Authentication bypass via OAuth implicit flowをやってみた

Hello there, ('ω')ノ

 

OAuthとは、複数のWebサービスを連携して動作させるために使われる仕組みで。

通常は、各Webサービスごとにユーザ認証するものの。

OAuthを利用すると1つの認証を行うことでアプリケーション間の連動ができて。

連携のキモとなるのがトークンなわけで。

 

まずは、クライアントアプリケーションによる検証に欠陥があるようで。

パスワードを知らなくても他のユーザーのアカウントにログインできるとのことで。

 

f:id:ThisIsOne:20210116085007p:plain

 

下記でログインして。

 wiener/peter

 

f:id:ThisIsOne:20210116085149p:plain

 

ここでひとつ目のアプリにログインできて。

 

f:id:ThisIsOne:20210116085227p:plain

 

f:id:ThisIsOne:20210116092443p:plain

 

アカウントを確認して。


f:id:ThisIsOne:20210116092414p:plain

 

再度、認証を行って。

今度はインターセプトして、Burpでリクエスト内容を追っていくと、

メールアドレスが見当たるので、そこへ下記のアドレスに変更すると。

 carlos@carlos-montoya.net

 

f:id:ThisIsOne:20210116085639p:plain

 

f:id:ThisIsOne:20210116085729p:plain

 

アカウントが入れ替わった。

 

f:id:ThisIsOne:20210116093054p:plain

 

Best regards, (^^ゞ

PentesterLabでXML attacksのExample1をやってみた

Hello there, ('ω')ノ

 

まずは、PentesterLabにアクセスして。

 https://pentesterlab.com/exercises/web_for_pentester/course

 

f:id:ThisIsOne:20210115135242p:plain

 

ISOファイルをダウンロードして。

 https://pentesterlab.com/exercises/web_for_pentester/attachments

 

f:id:ThisIsOne:20210115135341p:plain

 

仮想環境を構築して、起動したらIPアドレスを確認して。

 

f:id:ThisIsOne:20210115140752p:plain

 

IPアドレスにアクセスして。


f:id:ThisIsOne:20210115140617p:plain

 

 

XML attacksのExample1を選択すると。

 

f:id:ThisIsOne:20210115143011p:plain

 

リクエスト内容をBurpSuiteで確認して。

 

f:id:ThisIsOne:20210115143544p:plain

 

下記のXML用ペイロードを。

 

 <!DOCTYPE data [<!ENTITY file SYSTEM "file:///etc/passwd">]><data>&file;</data>

 

パラメータとして入力すると、うまくいかず。

 

 http://192.168.1.80/xml/example1.php?xml= data [<!ENTITY file SYSTEM "file:///etc/passwd">]><data>&file;</data>

 

f:id:ThisIsOne:20210115142810p:plain

 

下記サイトで、パラメータをURLエンコードして。

 https://meyerweb.com/eric/tools/dencoder/

 

f:id:ThisIsOne:20210115142652p:plain

 

再度、実行するとファイルの内容を取得できた。


 http://192.168.1.80/xml/example1.php?xml=%3C!DOCTYPE%20data%20%5B%3C!ENTITY%20file%20SYSTEM%20%22file%3A%2F%2F%2Fetc%2Fpasswd%22%3E%5D%3E%3Cdata%3E%26file%3B%3C%2Fdata%3E

 

f:id:ThisIsOne:20210115142530p:plain

 

Best regards, (^^ゞ

bWAPPのXML External Entity Attacks (XXE)をやってみた

Hello there, ('ω')ノ

 

久しぶりにbWAPPを。

A7 ⇨ XML External Entity Attacks (XXE)を選択して。

Any bugs?ボタンを。

 

f:id:ThisIsOne:20210115111815p:plain

 

Burp Suiteでインターセプトして。

リクエスト内容を確認して。

 

f:id:ThisIsOne:20210115112356p:plain

 

下記の内容に追加・変更してSendすると。

passwdファイルを表示できて。

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE header [<!ENTITY xxe SYSTEM "///etc/passwd"> ]>
<reset><login>&xxe;</login><secret>Any bugs?</secret></reset>

 

f:id:ThisIsOne:20210115113626p:plain

 

Best regards, (^^ゞ