ソースコードのXSS候補を反映



アプリケーションにおける反射XSSのための眼探索の利用

脆弱性の根本原因を理解し、実際にアプリケーションを脆弱にすることが重要である.
今日、非常に一般的な脆弱性について話しましょう、XSS、それのメカニズム、およびどのようにソースコードでそれを見つけることができます.

どのようにXSSが発生する
クロスサイトスクリプティング脆弱性、またはXSSは、攻撃者が悪意のあるスクリプトを犠牲者のブラウザで実行することができるときはいつでも起こります.
アプリケーションは、しばしばWebページを構築するためにユーザー入力を使用します.例えば、サイトは検索機能を持っているかもしれません、そして、ユーザーが検索用語を入力することができて、検索結果ページは結果ページのトップで用語を含みます.ユーザーがabcを検索すると、そのページのソースコードは次のようになります.
<h2>You searched for **abc** ; here are the results!</h2>
しかし、アプリケーションがユーザー入力と元のWebページを構成する合法的なコードの違いを伝えることができない場合はどうですか?
攻撃者は実行可能なスクリプトを提出し、そのスクリプトを犠牲者のウェブページに埋め込むことができるかもしれません.これらの悪意のあるスクリプトは、クッキーを盗むために使用することができます個人情報をリーク、サイトの内容を変更したり、悪意のあるサイトにユーザーをリダイレクト.
たとえば、アプリケーションでURLを検索することもできます.
https://example.com/search?q= **abc**
攻撃者が犠牲者を騙してこのURLを訪問できるなら
https://example.com/search?q=**<script>alert('XSS by Vickie’);</script>**
URLのスクリプトは被害者が訪れているページに埋め込まれ、被害者のブラウザは攻撃者が望むどんなコードでも実行します.これは「反射XSS」攻撃と呼ばれます.

データフロー解析
私たちがアプリケーションに反映されたXSSを探すために行く前に、あなたが理解すべきいくつかのコードレビュー概念があります.コード分析では、「ソース」は、脆弱性が起こるのを許すコードです.一方、「シンク」は脆弱性が実際に起こるところです.
例えば、コマンド注入の脆弱性を取る.この場合、「ソース」はユーザ入力を受け取る機能でありえました.「シンク」はシステムコマンドを実行する関数である.信頼できないユーザー入力が「ソース」から適切な消毒または妥当性なしで「シンク」に得ることができるならば、コマンド注入脆弱性があります.
多くの一般的な脆弱点は、適切なソースから対応するシンクまでこの「データフロー」を追跡することによって識別されることができます.

XSSの署名
我々が今日見ている脆弱性は、XSSです.
XSSのソースとシンクは何ですか?すべてのXSS脆弱性で、私たちは本質的にユーザの入力をユーザに表示されるサーバの出力で使用されているのを探しています.
例のアプリケーションで反射XSS候補を探し始めましょう!我々は、我々は目という名前の今日を使用している分析ツールを起動し、我々が分析しているプロジェクトをインポートするつもりです.脆弱なJavaアプリケーションを解析していますTarpit Java .

プロジェクトをインポートした後、プロジェクトを適切にロードしたことを確認するコマンドを実行します.私は通常CPGを実行します.メソッド.名前.Lこの目的のために.このコマンドは、プロジェクトで定義されているすべてのメソッドを探し、名前を抽出し、それらを一覧表示します.

私たちのコードが正しくインポートされました!XSS脆弱性の源を探すことによって、反射XSSのために狩猟を始めましょう.XSSの脆弱性の典型的なソースは、アプリケーションがユーザー入力にかかるpalcesです.これらの場所を識別する良い方法は、HttpServleTrequest型の識別子(ローカル変数、Globals、およびクラスメンバー)を探すことです.したがって、識別子リストをタイプ名でフィルタリングします.接眼辞では、regexで文字列検索を行うことができます.

ここで、私たちは本質的に、タイプ名がストリングHttpServleTrequestを含む識別子を探しています.これはHTTPリクエストからの入力を含む識別子のリストを与えます.
これをソースと定義します.

次に、XSSのためのシンク機能の次の観察.これは通常、アプリケーションがHTTP応答、ログファイルへの印刷などのようにユーザーに出力を表示する場所です.物事をシンプルに保つために、アプリケーション内の印刷機能をすべての呼び出しを探すことができます.具体的には、print関数への引数として渡されるデータを探しています.

最後に、私たちは、ソースがデータフローの点でシンクに達することができるすべての場所を示して、結果をかなり印刷するのを見ることができます:

潜在的なXSSを確かめるためにこれらのデータフローの1つを見ましょう!DataFlowがここで言うのは、インサイダーの83行のリクエスト識別子である.Javaは最終的にインサイダーの87行に印刷されます.Javaという名前のパラメータ

ソースコードに入るとTarpit Java , コードが実際にXSSにつながることがわかります.
https://medium.com/media/aeb12216a0c11202dd3617ab7dfe7b4e/href
静的解析は、アプリケーションで最も脆弱性を発見する最も効率的な方法です.ShiftLeftの静的解析ツールShiftLeftコアまたはEyeの詳細については、私たちを参照してくださいhere . そして、もしあなたがWebアプリケーションの一般的な脆弱性の詳細については、当社のチェックアウトに興味を持っているfree course on the OWASP top ten .
ところで、ここではこのデモのビデオバージョンを見ることができます.
https://medium.com/media/93fc12974459be400935b24f02366038/href