Shikata Ga Nai

Private? There is no such things.

How I Bypassed Incapsula WAF By Impervaを訳してみた

Hello there, ('ω')ノ

 

ImpervaによってIncapsulaWAFをバイパスした方法を。

 

脆弱性:

 SQLインジェクション

 

記事:

 https://devnack.medium.com/how-i-bypassed-incapsula-waf-db0498b3a021

 

今回は、プライバシー上の理由から。

ターゲット名、ユーザ名、パスワードを編集して置き換えることに。

 

Webアプリケーションhttps://redacted.com/の残りのAPIで。

セキュリティの脆弱性をテストしていると。

注意を引いたエンドポイントがあって。

このエンドポイントは、カート内のアイテムを。

追加または更新するために使用されて。

 

以下のスクリーンショットからわかるように。

エンドポイントは(courses)と呼ばれる入力を検証していなくて。

さまざまな脆弱性に対してテストしているときに。

エンドポイントがSQLインジェクションに対して脆弱であることがわかって。

別のテスト中に、アプリケーションがサイバー攻撃から自身を。

保護するためにImpervaによるIncapsula WAFを使用していて。

テストを困難にしていることがわかって。

 

f:id:ThisIsOne:20220118053950p:plain

 

そこで、インストールされたWAFをバイパスすることにして。

WAFは、 (insert, update, sleep, onto, etc.)などの。

SQL特殊キーワードのすべてを含むほとんどすべての複雑なクエリをブロックして。

sleepを含む特別なキーワードも完全にブロックして。

sleep(1+1), sleep (5), sleep(/**/2)などのさまざまな方法を試すものの。

どれも機能せず、すべてのリクエストがWAFによってブロックされて。

 

f:id:ThisIsOne:20220118054024p:plain

 

なぜsleepステートメントを使用することにしたのかというと。

sleepステートメントを使用することで、データベースに害を与えたり。

機密データにアクセスしたりすることなく。

SQLインジェクションの脆弱性を実証できるわけで。

 

sleEp(5)と同等の部分的なURLエンコードsle%45p(5)を使用することにすると。

これもブロックされ、URLエンコードを使用して括弧内に。

ランダムな16進値を入れることにして。

ペイロードsle%45p%28'0x12'%2b1)は、有名なWAFをバイパスできて。

 sle%45p%28'0x12'%2b1) sleEp('18'+1)

 

URLデコードを使用してペイロードをデコードする場合、ペイロードは。

単にsleEp(‘0x12’+1)であり、これは完全に有効なsqlステートメントであり。

高価なWAFをバイパスできて。

 

BooleanベースのSQLiを使用することで。

データベースの現在のユーザを取得できたので。

次に、下記のペイロードを使用することに。

 ‘%2b12%2bif(user()+like+redacted%’,2,sle%45p%28'0x12'%2b1))+ ********** +s

 ⇧

 ‘+12+if(user() like redacted%’,2,sleEp('0x12'+1))+ ********** +s

 

このペイロードは、現在のユーザが編集されているかどうかをMySqlに通知して。

を返し、残りのクエリが実行されて。

 

f:id:ThisIsOne:20220118053853p:plain

 

そうすると、mysqlがスリープ状態になり。

4〜5秒間スリープしていることが確認できて。

 

f:id:ThisIsOne:20220118053826p:plain

 

結論:

Webアプリケーションファイアウォールを使用するのは良いことであり。

最初はセキュリティインシデントを回避するのに役立つものの。

アプリケーションのセキュリティを保証することはできないので。

アプリケーションのセキュリティは、アプリケーションで処理する必要があって。

また、WAFなどは手動のセキュリティテスト(侵入テスト)を。

自分で行う必要があって。

 

Best regards, (^^ゞ