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を使用していて。
テストを困難にしていることがわかって。
そこで、インストールされたWAFをバイパスすることにして。
WAFは、 (insert, update, sleep, onto, etc.)などの。
SQL特殊キーワードのすべてを含むほとんどすべての複雑なクエリをブロックして。
sleepを含む特別なキーワードも完全にブロックして。
sleep(1+1), sleep (5), sleep(/**/2)などのさまざまな方法を試すものの。
どれも機能せず、すべてのリクエストがWAFによってブロックされて。
なぜ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に通知して。
2を返し、残りのクエリが実行されて。
そうすると、mysqlがスリープ状態になり。
4〜5秒間スリープしていることが確認できて。
結論:
Webアプリケーションファイアウォールを使用するのは良いことであり。
最初はセキュリティインシデントを回避するのに役立つものの。
アプリケーションのセキュリティを保証することはできないので。
アプリケーションのセキュリティは、アプリケーションで処理する必要があって。
また、WAFなどは手動のセキュリティテスト(侵入テスト)を。
自分で行う必要があって。
Best regards, (^^ゞ