Shikata Ga Nai

Private? There is no such things.

Error based SQL Injection with WAF bypass manual Exploit 100%を訳してみた

Hello there, ('ω')ノ

 

エラーベースSQLインジェクション WAF バイパスによる手動エクスプロイト100%を。

 

脆弱性

 SQL インジェクション

 WAF バイパス

 

記事:

 https://c0nqr0r.medium.com/error-based-sql-injection-with-waf-bypass-manual-exploit-100-bab36b769005

 

今回は、WAF ブロックをバイパスするために使用した方法論を共有することに。

 

適切な偵察の後、関数をいじる必要があるため確認できる最初の関数はサインインで。

データベースにクエリを送信するいくつかの関数を試して。

自分のデータを取得し、POST リクエストで送信し。

そこで、リクエストを傍受してリピータに送信すると。

 

 

SQLクエリの通常のアプローチとして、最初に一重引用符または二重引用符で。

区切る必要があり。

ここでは、BlackBoxペンテストを行っているため、この値を挿入して。

 

 email=qaramany'

 

 

ちょうどリクエストの最後の行で、レスポンスの長さを見るとわかるように。

4173 行目でこのエラーが発生したので、このエラーを検索して。

操作しているデータベースに関する詳細情報を取得して。

すぐにグーグルして、OWASPからこの良い記事を手に入れて。

 

https://owasp.org/www-project-web-security-testing-guide/v41/4-Web_Application_Security_Testing/07-Input_Validation_Testing/05-Testing_for_SQL_Injection

 

 

現在、MS-SQL データベースを使用したエラー ベースの 。

SQL インジェクションがありますが、残念なことに。

Burp スキャナ、Acunitx、SQLmap などの通常のスキャナでは。

高レベルでリスクが高く、長時間実行してもエクスプロイトは見つからず。

 

ここでは、「select」や「order by」などのいくつかのキーワードに対して。

積極的なフィルタを使用しているため、これは「+select」が。

フィルター処理され、500 WAF エラーを返すことを意味して。

WAFロジックが機能し、ブロックを取得したときに反応を眺めていると。

先ほどのように「qaramany」と入力すると自分の名前が反応に反映されていたので。

ツールで悪用できなかった場合は。

WAFバイパス テクニックのチートシートを開いて。

 

「select」、「order by」、または「group by」を挿入することはできず。

ここでアイデアを得るために、エラーベースの代替ベクトルを挿入することはできず。

 

バイパスとして %2b 文字を使用して文字列を連結して。

%2B は + のコードで。

そのため、求められているデータでデータ型変換エラーをトリガーする特定の。

関数呼び出しの結果で使用して。

いくつかの関数でそれをバイパスできるようになり。

 

関数の例:

    SUSER_NAME()
    USER_NAME()
    PERMISSIONS()
    DB_NAME()
    FILE_NAME()
    TYPE_NAME()
    COL_NAME()

 

ペイロード

 qaramany'%2buser_name(@@version)--

 このペイロードによってデータベースのバージョンが取得され。

 

    qaramany:私の名前は、hahahahaha
    ‘ :エラーを引き起こす一重引用符
    %2b :+ のコード
    user_name() :求められているデータでデータ型変換エラーをトリガーする関数

 

 

500 エラーが発生することもあったため、同じアプローチに基づいて。

このペイロードを作成して。

 qaramany'%2buser_name(convert(int,(SYSTEM_USER)))--

 

これにより、SYSTEM_USER を取得するために WAF がバイパスされ。

送信した他のPOCの一部は次のとおりで。

 qaramany’%2buser_name(convert(int,(SESSION_USER))) --
 qaramany’%2buser_name(UPPER(‘sql+tutorial+is+fun!’)) --
 qaramany’%2buser_name(IIF(5=4,+’YES’,+’HackedBy_c0nqr0r&0x4m’)) --
 qaramany’%2buser_name(convert(int,(db_name()))) --

 

Best regards, (^^ゞ