IISリモートコード実行の脆弱性-CVE-2015-1635

ここに画像の説明を挿入


QQ 1274510382
Wechat JNZ_aming
Business AllianceQQグループ538250800
テクノロジートラブルQQグループ599020441
ソリューションQQグループ152889761
参加QQグループ649347320
共有学習QQグループ674240731ネットワークセキュリティ、ディープラーニング、組み込み、マシンエンハンスメント、バイオインテリジェンス、ライフサイエンスをテーマにした
時系列テクノロジー

Ding Ding Ding:製品はオンラインです—>公式のWeChatパブリック
アカウントに従ってください—済南ジニアン情報技術株式会社。人々の生計プロジェクト:店舗フランチャイズ/エンターテインメントデート/エンタープライズビジネスサークル/アウトソーシングパートタイム開発-プロジェクトリリース/
セキュリティプロジェクト:状況認識防御システム/イントラネット検査システム
クラウドサービスプロジェクト:クラウドホスト/ドメイン名の動的拡張/弾性ストレージ-データベース-クラウドディスク/ API-すべての
製品コンサルティング/サービスアフターセールス(同じ)

それは紙の上では常に浅いです、そして私はこの問題がなされなければならないことを絶対に知っています!
ビジネスを始めるための志を同じくするパートナーを探しています。Baotuan Didi amingの連絡先情報!


#この記事は、広告システムが自動的に広告を配信するためのものです

#侵害、削除がある場合は、すぐにご連絡ください




IISでは、要求処理パイプラインでのキャッシュに関連するタスクを実行するために、カーネルキャッシュがデフォルトで有効になっています。

HTTPプロトコルスタック(HTTP.sys)がHTTP要求を誤って解析すると、IISリモートコード実行の脆弱性が発生します。

実験を通じて、
IISアーキテクチャ、HTTPプロトコルスタックとその仕組み、およびHTTPプロトコルスタックの脆弱性について
学び、MS15-034の脆弱性の悪用方法と脆弱性の原則を習得します。


Webセキュリティ

情報セキュリティの専門家

コンピュータ基盤、コンピュータネットワーク




予備知識
脆弱性情報

脆弱性番号:CVE​​-2015-1635

脆弱性の説明:
IISリモートコード実行の脆弱性はHTTPプロトコルスタック(HTTP.sys)に存在します。
この脆弱性は、HTTP.sysがHTTP要求を誤って解析した場合に発生する可能性があります。

脆弱性に関するマイクロソフトの発表:https://docs.microsoft.com/en-us/security-updates/SecurityBulletins/2015/ms15-034

影響を受けるバージョン:
Microsoft
IIS6.0以降
インストールされているWindowsServer 2008 R2 / Server 2012 / Server 2012R2およびWindows7 / 8 / 8.1は、すべてこの脆弱性の影響を受けます。

IISアーキテクチャ

ここに画像の説明を挿入

システムにIIS(Internet Information Service)をインストールした後、

World Wide Web Publishing Service(WWW Service)と呼ばれるサービスがあります。
クライアントがHTTP要求をシステムに送信すると、
WWWサービスは、負荷分散戦略
基づいてワーカープロセスw3wp.exeを開始または選択して、HTTP要求を処理し、適切なHTTP応答を送信します。

w3wp.exeプロセスは、HTTP.sysを使用して、
HTTPプロトコル分析、応答コンテンツアセンブリ、コンテンツキャッシュなど、HTTPプロトコル処理に関連する多くのタスクを完了します
HTTP.sysはHTTP要求を受信し、TCPIP.sysを介してHTTP応答を送信します。

HTTPプロトコルスタックとその仕組み

IIS Webサーバーは、HTTP
プロトコルスタック(HTTP.sys)のカーネルモードデバイスドライバーによって実装されるWindowsネットワークサブシステムの一部としてHTTPリスナーを使用します
。HTTPプロトコルスタックは、HTTP要求を解析し、クライアントに応答を提供します。 。

HTTP.sysは、IIS 6.0で次のサービスを提供します。HTTP要求を正しい要求キューにルーティングする、カーネルモードで応答をキャッシュする、WWWサービスのすべてのテキストベースのログを実行する、接続制限、接続タイムアウト、キューなどのサービス品質機能を実装する長さの制限と幅の制限。

Webサイトを作成するとき、IISはHTTP.sysを使用してWebサイトを登録し、HTTP.sysはWebサイトへのすべてのHTTP要求を受信します。HTTP.sysの機能はフォワーダーに似ており、受信したWeb要求をWebサイトまたはWebアプリケーションのユーザーモードプロセスを実行している要求キューに送信し、応答をクライアントに送り返します。

保存された応答を内部キャッシュから取得することに加えて、HTTP.sysは受信した要求を処理しません。したがって、アプリケーション固有のコードはカーネルモードにロードされないため、アプリケーション固有のコードのエラーがカーネルに影響を与えたり、システム障害を引き起こしたりすることはありません。

HTTPプロトコルスタックの脆弱性

IISでは、要求処理パイプラインでのキャッシュに関連するタスクを実行するために、カーネルキャッシュがデフォルトで有効になっています。
キャッシュは、処理された情報(Webページなど)をサーバーのメモリに保存することにより、パフォーマンスを向上させます。

Range HTTPヘッダーを使用して、この脆弱性を悪用します。
このHTTPヘッダーを使用すると、クライアントは必要に応じてサーバーに特定のコンテンツを要求できます。
通常、Rangeヘッダーには次の値が含まれます。

範囲:bytes = 124-5656、次の値も含まれる場合があります:範囲:bytes = 0-

Rangeヘッダーの上限が存在しない場合、
クライアントが完全なデータを要求していると見なされます。

逆に、攻撃者が上限を指定し、特別なRange値を使用してHTTPリクエストを送信すると
、サーバー上でRange変数がオーバーフローします。

Rangeヘッダーの上限は0xFFFFFFFFFFFFFFFFFFで、
これは最大の64ビット符号なし整数です。

攻撃者はこの値を使用してHTTP要求を送信します。これにより整数オーバーフローが発生し、
サーバー「要求された範囲を満たすことができません」応答ます。これは、クライアントがファイルの一部がファイルの終わりを超える必要があることを意味します。サーバー上。
攻撃の悪用に成功すると、サービス拒否につながる可能性もあります。


IISサーバーのセキュリティ関連の実験

IIS6.0書き込み権限の脆弱性の悪用:https://www.hetianlab.com/expc.do?ec = ECID172.19.104.182015102217203100001

IIS6.0リモートコード実行ゼロデイ脆弱性分析とエクスプロイト:https://www.hetianlab.com/expc.do?ec = ECID9d6c0ca797abec2017032915142000001(CVE-2017-7269)

fckEditorアップロード攻撃で使用されるIIS分析の脆弱性:https://www.hetianlab.com/expc.do?ec = ECID172.19.104.182015102217243800001


実験の目的
IISアーキテクチャ、
HTTPプロトコルスタックとその仕組み、およびHTTPプロトコルスタックの脆弱性を実験を通じて
理解し、MS15-034の脆弱性の悪用方法と脆弱性の原則を習得します。


実験環境
クライアント:Windows Server 2008 R2、IP:10.1.1.134

攻撃:カリ、IP:10.1.1.100

脆弱性エクスプロイトツールのダウンロードアドレス:http://tools.hetianlab.com/tools/CVE-2015-1635.zip




タスクの説明:脆弱性の検出。

これはHTTP.sysにある整数オーバーフローの脆弱性であることがわかっています。
次の形式でHTTPリクエストをIISサーバーに送信すると、脆弱性の検出がトリガーされる可能性があります。
ここに画像の説明を挿入
ここに画像の説明を挿入

Kaliマシンはコマンドcurlurl -H "Host:ip" -H "Range:bytes = 0-18446744073709551615"を実行します。

ここに画像の説明を挿入

このとき、16進数に変換された18446744073709551615は0xFFFFFFFFFFFFFFFF(16 F)であり
、64ビットの符号なし整数で表現できる最大の整数である
ため、整数オーバーフローはこの異常な整数に関連している必要があります。

上記のように
、IISサーバーが「要求された範囲が満たされていません」を
返す場合、脆弱性があります。「要求に無効なヘッダー名があります」を返す場合、脆弱性にパッチが適用されています。

スクリプトをダウンロードします。

 wget http://tools.hetianlab.com/tools/CVE-2015-1635.zip
 unzip CVE-2015-1635.zip

ここに画像の説明を挿入ここに画像の説明を挿入

ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入

実験マシンのIPを変更することに注意してください。

ここに画像の説明を挿入
ここに画像の説明を挿入

脆弱性の検出にPOCを使用します。
ここに画像の説明を挿入

ターゲットマシンに脆弱性があることを示します。




実験ステップ2

タスクの説明:MS15-034エクスプロイト攻撃:メモリデータを取得します。

Kaliマシンはmsfconsoleを開き、脆弱性に関連するエクスプロイトモジュールを検索します。
ここに画像の説明を挿入

ここに画像の説明を挿入

2番目のモジュール
ms15_034_http_sys_memory_dumpを使用して、サーバーメモリデータを読み取ります
。HTTPプロトコルスタックは、HTTP.SYSメモリ情報の開示を処理するように要求します。

ここに画像の説明を挿入
ここに画像の説明を挿入

攻撃を実行します。

ここに画像の説明を挿入

サーバーのメモリデータを正常に読み取ります。
ここに画像の説明を挿入




実験ステップ3

タスクの説明:MS15-034エクスプロイト攻撃:サービス拒否攻撃。

最初のモジュール
ms15_034_ulonglongaddを使用して、ddos攻撃を実行します:HTTPプロトコルスタック要求処理のサービス拒否

ここに画像の説明を挿入

パラメータを設定し、攻撃を実行します。
ここに画像の説明を挿入

注:攻撃を実行する前にクライアントに切り替えて、攻撃の前後の実行状態を感じることができます。
ここに画像の説明を挿入

ここに画像の説明を挿入

ここに画像の説明を挿入

実験マシンで攻撃されているクライアントの成功したパフォーマンス:
ここに画像の説明を挿入




実験ステップ4

脆弱性分析:サービス拒否攻撃。

リクエストをHTTPサーバーに送信した後、
w3wp.exeはHTTPリクエストを処理し、
TCPIP.sysはHTTPプロトコルコンテンツをHTTP.sysに転送します。
リクエストがHTTP範囲内にある場合、
関数UlpParseRange()が呼び出されてリクエストが解析され、リクエスト範囲の開始位置と終了位置が取得
され、範囲の長さが計算されます。

開始位置が0で終了位置が0xFFFFFFFFFFFFFFFFFFの場合、
範囲の長さは0に等しく、コードはオーバーフローをチェックせず、エラー処理対策を講じません。

開始位置が284、終了位置が0xFFFFFFFFFFFFFFFFFFの場合、
範囲の長さは-284に等しく、16進値は0xFFFFFFFFFFFFFFFEE4です。
符号なし整数として解釈される場合、値は非常に大きくなります。

HTTPリクエストを解析した後、関数UlAdjustRangesToContentSize()が呼び出されます。

開始位置と長さが「無効」の場合
(範囲の開始位置が0xFFFFFFFFFFFFFFFFFF、範囲の長さが0xFFFFFFFFFFFFFFFFFF、
開始位置> =要求されたWebページの長さ、終了位置> =要求されたWebページの長さを含む)、
関数範囲を調整します開始位置と長さ

同じリクエストが継続的に受信された場合、リクエストへの応答はキャッシュされ、キャッシュから取得されてリクエスターに送信されます。
このプロセスは、関数UxpTpDirectTransmit()を呼び出して、HTTP応答パケットの長さを計算します。

HTTP応答パッケージをアセンブルした後、
HTTP.sysはパケット情報をプロトコルスタックドライバーに転送して送信し
ます。TCPIP.sysの関数TcpSegmentTcbSend()は、パケットの各部分の内容をトラバースします。整数オーバーフローがあります。関数。

HTTP範囲要求の開始位置が284で、
終了位置が18446744073709551615(16進値が0xFFFFFFFFFFFFFFFFFFFF)の場合、
範囲は要求されたWebページファイルのサイズを超えています。

HTTP応答の長さが非常に長いため、ループが複数回実行され、整数オーバーフローがトリガーされると
、仮想アドレスを使用して部分メモリ記述子リストが作成されます。範囲はソース範囲のサブ範囲ではないため、ブルースクリーンが発生します。




実験ステップ5

脆弱性分析:メモリデータを取得します。

3-18446744073709551615がrange1に設定され、
1-600がrange2に設定されているとします。
関数UlpParseRange()がHTTPリクエストを解析した後、関数UlAdjustRangesToContentSize()
が呼び出されます。
このとき、range1は整数オーバーフロー(3 + 0xFFFFFFFFFFFFFFFD> = 0)。

同じ操作が継続的に受信される場合、リクエストへの応答はキャッシュされ、キャッシュから取得されてリクエスターに送信されます。

複数のスコープ要求を使用することにより、
各スコープコンテンツの前にスコープバインディングタグとスコープ情報があります。
HTTP応答パッケージをアセンブルした後、HTTP.sysは送信用のプロトコルスタックドライバーの下でパケット情報を転送します。
TCPIP.sysの関数TcpSegmentTcbSend()は、データパケットの各部分をトラバースします。

マルチレンジリクエストを使用すると、HTTP応答の長さが長くなり、より多くの情報が明らかになる可能性があります。
単一の範囲のみが使用されている場合、HTTP応答の長さが長すぎたり小さすぎたりします。

HTTP応答の長さが長すぎると、システムはブルースクリーンの死を引き起こし
ます。HTTP応答の長さが短すぎると、ターゲットWebページのコンテンツが情報をリークした後、バッファーが上書きされません。
したがって、攻撃者はマルチレンジリクエストを使用してより多くの情報を開示します。

バグ修正
出力キャッシュでのカーネルキャッシュの有効化を無効にします(IISカーネルキャッシュを無効にします)。
ここに画像の説明を挿入

ここに画像の説明を挿入



分析と思考

詳細な分析については、https://blogs.360.cn/post/cve_2015_6135_http_rce_analysis.htmlを参照してください。

参照

1、https://technet.microsoft.com/en-us/library/cc739400(v = ws.10).aspx

2、https://www.trendmicro.com/en_us/research/15/d/iis-at-risk-the-http-protocol-stack-vulnerability.html?_ga = 2.58551274.1902911539.1609211638-1589647619.1609211638

おすすめ

転載: blog.csdn.net/qq_33608000/article/details/112798458