記事のディレクトリ
0x01の基本的な知識
1. SSRFの脆弱性の概要:
SSRFのフルネーム:サーバー側の要求の偽造、つまりサーバー側の要求の偽造は、攻撃者が要求を作成することによってターゲットサーバー上で実行されるセキュリティの脆弱性です。攻撃者はこの脆弱性を利用して、攻撃者が作成したドメインにサーバーにリクエストを送信させることができます。ターゲットは通常、外部ネットワークからアクセスできない内部システムです。簡単に言うと、サーバーの脆弱性を利用して、構造化された要求をサーバーのイントラネットに送信し、サーバーとして攻撃します。
2.主な攻撃方法:
攻撃者がサーバーBのサービスにアクセスしたいが、ファイアウォールまたはサーバーBがイントラネットホストに属しているために、攻撃者が直接サービスにアクセスできない場合。サーバーAにSSRFの脆弱性がある場合、攻撃者はサーバーAを使用してSSRF攻撃を開始し、サーバーAを介してホストBへの要求を開始して、イントラネットを攻撃する目的を達成できます。
例:
脆弱性シナリオ:Webサイトには、指定されたリモート記事をローカルにロードできるオンラインロード機能があります。リンクは次のとおりです。
http://www.xxx.com/article.php?url=https://blog.csdn.net/qq_43531669/article/details/112498646
システムがurlパラメータのチェックを実行しない場合は、次のような他のリクエストを作成できます。
http://www.xxx.com/article.php?url=http://127.0.0.1:22
http://www.xxx.com/article.php?url=file:///etc/passwd
http://www.xxx.com/article.php?url=dict://127.0.0.1:22/data:data2 (dict可以向服务端口请求data data2)
http://www.xxx.com/article.php?url=gopher://127.0.0.1:2233/_test (向2233端口发送数据test,同样可以发送POST请求)
...
3.抜け穴形成の原理:
多くのウェブサイトは、他のサーバーからデータを取得する機能を提供しています。指定されたURLを介して、Webサイトは他の場所から写真を取得したり、ファイルをダウンロードしたり、ファイルの内容を読み取ったりすることができます。SSRFの本質は、欠陥のあるWebサイトをエージェントとして使用して、リモートサーバーとローカルサーバーを攻撃することです。
SSRFの脆弱性が発生する理由のほとんどは、サーバーが他のサーバーからデータを取得する機能を提供しているが、ターゲットアドレスをフィルタリングおよび制限していないためです。攻撃者はこの脆弱性を利用して内部システムの情報を取得できます(サーバーによって開始されるため、攻撃者はサーバーに接続されているが外部ネットワークから分離されている内部ネットワークシステムを要求できます)。
4.抜け穴の害:
-
外部ネットワーク、サーバーが配置されている内部ネットワーク、およびローカルでポートスキャンを実行します
-
イントラネットサービスを攻撃するために、任意の内部ホストの任意のポートにペイロードを送信します
-
DOS攻撃(大きなファイルを要求し、常に接続を維持しますキープアライブ常に)
-
直接SQLインジェクション、XSS攻撃など、イントラネット上のWebアプリケーションを攻撃します。
-
file、gopher、およびdictプロトコルを使用して、ローカルファイルの読み取り、コマンドの実行などを行います。
-
ウェブサイトのCDNを無視できます
イントラネットサービスの防御は一般に外部ネットワークサービスよりも弱く、一部のイントラネットサービスでさえ、運用と保守の便宜のためにアクセス許可を確認するためのイントラネットセットにアクセスできないため、SSRFが存在する場合、通常、より大きな害を及ぼします。
0x02脆弱性検出
1.脆弱性の検証:
SSRFの脆弱性は、リクエストを送信するサーバーを構築するセキュリティの脆弱性であるため、送信されたリクエストがサーバーから送信されたかどうかを分析することで、SSRFの脆弱性があるかどうかを判断できます。
ページのソースコードでアクセスされたリソースのアドレスを見つけます。リソースアドレスのタイプがでhttp://www.xxx.com/a.php?image=地址
ある場合、SSRFの脆弱性がある可能性があります。
2.脆弱性の可能性のあるポイント:
(1)共有機能:以下のアドレスなどのURLアドレスを介して記事等を共有します。
http://share.xxx.com/index.php?url=http://www.xxx.com
urlパラメータを取得することで、リンクをクリックすると、指定した共有記事にジャンプできます。この関数でターゲットアドレスの範囲にフィルタリングと制限がない場合、SSRFの脆弱性があります。
(2)画像の読み込み/ダウンロード:URLアドレスを介した画像の読み込みまたはダウンロード:
http://image.xxx.com/image.php?image=http://www.xxx.com
多くのエディタには画像の読み込みがあります。エディタは画像をアップロードし、設定した画像アドレスをリモートサーバーに読み込みます。読み込みパラメータに制限がない場合、SSRFが発生する可能性があります。
(3)画像/記事収集機能:
http://title.xxx.com/title?title=http://title.xxx.com/xxx
たとえば、titleパラメータは記事のタイトルアドレスであり、記事のアドレスリンクを表します。収集機能がこのフォームを使用して記事を保存する場合、制限パラメータなしの形式でSSRFが存在する可能性があります。
(4)トランスコードサービス:携帯電話の画面閲覧に適したURLアドレスで元のウェブページのコンテンツを調整します。
(5)オンライン翻訳:対応するウェブページのコンテンツをウェブサイトに翻訳します。
(6)メールシステム:たとえば、受信メールサーバーのアドレス。
(7)パラメータのキーワードを使用して検索します。
キーワード:
share、wap、url、link、src、source、target、u、3g、display、sourceURl、imageURL、domain...
一般に、リモートサーバーからリソースを要求する必要があるWebサイトには、SSRFの脆弱性がある可能性があります。
0x03バイパス方法:
一部の脆弱性またはSSRFは、攻撃やイントラネットサービスおよびリソースへのアクセスを防ぐために、ホワイトリストまたはブラックリストの処理で生成される場合があります。したがって、SSRF攻撃を実行するには、要求されたパラメータアドレスをバイパスする必要があります。一般的なバイパス方法は次のとおりです。
1.特定のドメイン名への制限をバイパスします。
(1)@を使用するサイトがhttp://www.xxx.com
ドメイン名のタイプの場合にのみアクセスを制限する場合、http://[email protected]のように、認証をバイパスするためのhttp基本的な方法を使用できます。
@Resolveドメイン名では、次のように、さまざまな処理関数で処理の違いがあります。
http://[email protected]@www.ccc.com
PHPのparse_urlはwww.ccc.comを認識し、libcurlはそれをwww.bbb.comとして認識します。
2.制限要求をバイパスするには、IPはイントラネットアドレスではありません。
(1)短縮URLを使用してバイパスする
(2)特別なドメイン名を使用して、xip.ioは任意のドメイン名(原則はDNS解決)、つまり127.0.0.1.xip.ioを指すことができます。これは127.0.0.1に解決できます。
(3)バイナリ変換の使用、127.0.0.1 8進数:0177.0.0.1
; 16進数:0x7f.0.0.1
; 10進数:2130706433
(4)使用率は[::]
、次のhttp://[::]:80/
ように解析されますhttp://127.0.0.1
(5)ポート番号http://127.0.0.1:8080を追加します
(6)ピリオドを使用127。0。0。1
すると、127.0.0.1として解析されます。
(7)302ジャンプを使用する
3.制限要求はhttpプロトコルのみです。
(1)302ジャンプを使用する
(2)短いアドレスを使用する
0x04エクスプロイト
1.脆弱な機能:
バックグラウンドで使用されるさまざまな関数に応じて、対応する影響と利用方法が異なります。PHPで次の関数を不適切に使用すると、SSRFが発生します。
file_get_contents()
fsockopen()
curl_exec()
file_get_contents()
この関数の機能は、ファイル全体を文字列に読み込むことです。この関数は、ファイルの内容を文字列に読み込むための推奨される方法です。
例:次のコード実行結果は、test.txtファイルに文字列を出力することです。
<?php
echo file_get_contents(“test.txt”);
?>
fsockopen()
fsockopen関数を使用して、ユーザーが指定したURLのデータ(ファイルまたはhtml)を取得します。
curl_exec()
この関数は、特定のcurlセッションを実行できます。
curlでサポートされているプロトコルには次のものがあります。
2.脆弱性の射撃場:
ここでは、ピカチュウ射撃場のssrfモジュールを使用してデモンストレーションを行います。
2.1、SSRF(カール):
まず、このcurl_exec()
関数を使用するssrf射撃場を見てください。ページのリンクをクリックすると、詩が返され
ます。バックエンドコードを表示するために、URLリクエストがバックグラウンドに渡されることを確認してください。getを使用して取得することがわかります。フロントエンドのURLリクエスト、およびcurl_exec関数がリクエストを実行し、最後にリクエストの結果をフロントエンドに返します。
curl_init //初始cURL会话
curl_exec //执行cURL会话
アップロードしたURLをhttp://www.badiu.comに変更すると、ページにBaiduデータが表示されていることがわかります。URL
のコンテンツをイントラネット内の他のサーバーのアドレスとポートに変更して、イントラネット情報を検出できます。たとえば、ポートを開く状況、たとえば、次の図は、内部ネットワークホスト192.168.50.130がポート22を開いた
ことを検出します。スクリプトまたはBurpとともに使用して、より効率的なポート検出を実行できます。
Burpを開き、パッケージを取得してIntruderに送信し、ペイロードを設定します
内部ネットワークホストのポート80が開いていることが検出されていることが
わかります。また、SSRFの脆弱性を介して内部ネットワークサーバーのファイルを読み取ることもできます。たとえば、URLを次のように変更します。
http://127.0.0.1/pikachu/vul/ssrf/ssrf_curl.php?url=file:///c:/windows/system.ini
2.2、SSRF(file_get_content):
また、[ページ]タブをクリックすると、ファイルプロトコルがファイルの読み取りに使用されていることがわかります
。バックエンドコード
は上記とほぼ同じです。違いは、file_get_contents
関数を使用してファイルを読み取って実行することと、file_get_contents
関数は、ローカルファイルまたはリモートファイルの読み取りを実行できます。次に例を示します。
http://127.0.0.1/pikachu/vul/ssrf/ssrf_fgc.php?file=http://192.168.50.130/index.html
http://127.0.0.1/pikachu/vul/ssrf/ssrf_fgc.php?file=file:///c:/windows/system.ini
または、フィルターを使用してソースコードページを取得します(詳細に説明されているように、直接アクセスはphpファイルのみが実行されます)
http://127.0.0.1/pikachu/vul/ssrf/ssrf_fgc.php?file=php://filter/read=convert.base64-encode/resource=test.php
base64復号化後にソースコードを取得します。
0x05SSRFから防御する方法
1.ジャンプなし
:無効化HTTPおよびHTTPSプロトコル、等に加えて2、 、、などが挙げられます。file://
gopher://
dict://
3.リクエストを制限するためのポートは、80、443、8080などのhttpで一般的に使用されるポートです。
4.エラー情報を統合して、ユーザーがエラー情報に基づいてリモートサーバーのポートステータスを判断できないようにします。
5.要求されたアドレスのホワイトリストを設定するか、内部ネットワークIPを制限して、内部ネットワークへの攻撃を防ぎます。
参考記事:
https ://cloud.tencent.com/developer/article/1561355
https://www.cnblogs.com/DxyG/p/13742430.html
https://www.cnblogs.com/dogecheng/p/11652022 .html#2605005798
https://cloud.tencent.com/developer/article/1587012