Shikata Ga Nai

Private? There is no such things.

SQL injection with filter bypass via XML encodingをやってみた

Hello there, ('ω')ノ

 

XML エンコーディングによるフィルター バイパスによる SQL インジェクションを。

 

在庫チェック機能に SQL インジェクションの脆弱性が含まれていて。

クエリの結果はアプリケーションの応答で返されるため、

UNION 攻撃を使用して他のテーブルからデータを取得でき。

データベースには、登録済みユーザのユーザ名とパスワードを

含む users テーブルが含まれていて。

 ラボを解決するには、SQL インジェクション攻撃を実行して管理者ユーザの

資格情報を取得し、そのアカウントにログインして。

 

Web アプリケーション ファイアウォール (WAF) は、

SQL インジェクション攻撃の明らかな兆候を含むリクエストをブロックし。  

このフィルタをバイパスするには、悪意のあるクエリを難読化する方法を

見つける必要があり。  

これを行うには、Hackvertor 拡張機能を使用することをお勧めして。

 

まずは、Click stockボタンを。

 

 

リクエストボディを見るとproductIdとstoreIdをXML形式で

アプリケーションに送信していて。

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

 

 

storeIdを数学的式に置き換えてレスポンスを確認すると評価されたようで。

異なる店舗の在庫が返されて。

 

 <storeId>1+1</storeId>

 

 

次にUNION SELECTステートメントを追加してみると。

潜在的な攻撃としてフラグ付けされ、ブロックされて。


 <storeId>1 UNION SELECT NULL</storeId>

 

 

ここで、XMLにインジェクションするために、

XMLエンティティを使用してペイロードを曖昧化するのに

Hackvertor拡張機能を使用することに。

 

Hackvertorは、HTML5エンティティ、16進数、8進数、Unicode、

URLエンコーディングなど、さまざまなエスケープとエンコーディングを

サポートする、タグベースの変換ツールで。

エンコーディング/変換のタイプを指定するために、XMLのようなタグを使用し。

変換を実行するために、複数のネストされたタグを使用でき。

タグには引数を持たせることもでき、関数のように振る舞うことができ。

自動デコード機能があり、必要な変換のタイプを推測し、

自動的に複数回デコードすることができ。

複数のタブや文字セット変換も可能で。

 

 

ペイロードをハイライトし、右クリックでdec_entitiesを選択して。

 

 

リクエストをSendすると正常のレスポンスを受け取ったので

WAFをバイパスできた可能性があり。

 

 

usernameを取得できて。

 

 

passwordも取得できて。

 

 

usernameとpasswordを一緒に取得しようとすると1つのカラムしか返せないようで。

 

 

下記のようにusernameとpasswordを連結することに。

 

<storeId><@hex_entities>1 UNION SELECT username || '~' || password FROM users<@/hex_entities></storeId>

 

 

管理者の資格情報を使用してログインしするとクリアできて。

 

Best regards, (^^ゞ