mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/pentesting-web/ssrf-server-side-request-forgery/url-for
This commit is contained in:
parent
8f7fa3229c
commit
ec76f99ff6
@ -2,7 +2,7 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
### 로컬호스트
|
||||
### Localhost
|
||||
```bash
|
||||
# Localhost
|
||||
0 # Yes, just 0 is localhost in Linuc
|
||||
@ -146,7 +146,7 @@ next={domain}&next=attacker.com
|
||||
```
|
||||
### Paths and Extensions Bypass
|
||||
|
||||
URL이 경로나 확장자로 끝나야 하거나 경로를 포함해야 하는 경우, 다음 우회 방법 중 하나를 시도할 수 있습니다:
|
||||
URL가 경로나 확장자로 끝나야 하거나 경로를 포함해야 하는 경우, 다음 우회 방법 중 하나를 시도할 수 있습니다:
|
||||
```
|
||||
https://metadata/vulerable/path#/expected/path
|
||||
https://metadata/vulerable/path#.extension
|
||||
@ -154,11 +154,11 @@ https://metadata/expected/path/..%2f..%2f/vulnerable/path
|
||||
```
|
||||
### Fuzzing
|
||||
|
||||
The tool [**recollapse**](https://github.com/0xacb/recollapse)는 주어진 입력에서 변형을 생성하여 사용된 regex를 우회하려고 시도할 수 있습니다. 추가 정보는 [**이 게시물**](https://0xacb.com/2022/11/21/recollapse/)을 확인하세요.
|
||||
도구 [**recollapse**](https://github.com/0xacb/recollapse)는 주어진 입력에서 변형을 생성하여 사용된 regex를 우회하려고 시도할 수 있습니다. 추가 정보는 [**이 게시물**](https://0xacb.com/2022/11/21/recollapse/)을 확인하세요.
|
||||
|
||||
### Automatic Custom Wordlists
|
||||
|
||||
[**URL validation bypass cheat sheet** 웹앱](https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet)을 확인해보세요. 여기서 허용된 호스트와 공격자의 호스트를 입력하면 시도할 URL 목록을 생성해줍니다. 또한 URL을 매개변수, Host 헤더 또는 CORS 헤더에서 사용할 수 있는지 여부도 고려합니다.
|
||||
[**URL validation bypass cheat sheet** 웹앱](https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet)을 확인해보세요. 여기서 허용된 호스트와 공격자의 호스트를 입력하면 시도할 URL 목록을 생성해줍니다. 또한 URL을 매개변수, Host 헤더 또는 CORS 헤더에서 사용할 수 있는지 고려합니다.
|
||||
|
||||
{{#ref}}
|
||||
https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet
|
||||
@ -193,7 +193,7 @@ HTTPServer(("", int(sys.argv[1])), Redirect).serve_forever()
|
||||
|
||||
### 블랙슬래시 트릭
|
||||
|
||||
_백슬래시 트릭_은 [WHATWG URL 표준](https://url.spec.whatwg.org/#url-parsing)과 [RFC3986](https://datatracker.ietf.org/doc/html/rfc3986#appendix-B) 간의 차이를 이용합니다. RFC3986은 URI에 대한 일반적인 프레임워크인 반면, WHATWG는 웹 URL에 특정하며 현대 브라우저에서 채택되고 있습니다. 주요 차이점은 WHATWG 표준이 백슬래시(`\`)를 슬래시(`/`)와 동등하게 인식하여 URL이 구문 분석되는 방식에 영향을 미치며, 특히 URL에서 호스트 이름에서 경로로의 전환을 표시하는 데 있습니다.
|
||||
_블랙슬래시 트릭_은 [WHATWG URL 표준](https://url.spec.whatwg.org/#url-parsing)과 [RFC3986](https://datatracker.ietf.org/doc/html/rfc3986#appendix-B) 간의 차이를 이용합니다. RFC3986은 URI에 대한 일반적인 프레임워크인 반면, WHATWG는 웹 URL에 특화되어 있으며 현대 브라우저에서 채택되고 있습니다. 주요 차이점은 WHATWG 표준이 백슬래시(`\`)를 포워드 슬래시(`/`)와 동등하게 인식하여 URL이 구문 분석되는 방식에 영향을 미치며, 특히 URL에서 호스트 이름에서 경로로의 전환을 표시하는 것입니다.
|
||||
|
||||

|
||||
|
||||
@ -205,12 +205,44 @@ _백슬래시 트릭_은 [WHATWG URL 표준](https://url.spec.whatwg.org/#url-pa
|
||||
|
||||
.png>)
|
||||
|
||||
이미지 출처: [https://claroty.com/2022/01/10/blog-research-exploiting-url-parsing-confusion/](https://claroty.com/2022/01/10/blog-research-exploiting-url-parsing-confusion/)
|
||||
[https://claroty.com/2022/01/10/blog-research-exploiting-url-parsing-confusion/](https://claroty.com/2022/01/10/blog-research-exploiting-url-parsing-confusion/)에서 가져온 이미지
|
||||
|
||||
## 참고 문헌
|
||||
### IPv6 존 식별자 (%25) 트릭
|
||||
|
||||
RFC 6874를 지원하는 현대 URL 파서는 **존 식별자**를 퍼센트 기호 뒤에 포함할 수 있는 *링크 로컬* IPv6 주소를 허용합니다. 일부 보안 필터는 이 구문을 인식하지 못하고 대괄호로 묶인 IPv6 리터럴만 제거하여 다음 페이로드가 내부 인터페이스에 도달하게 합니다:
|
||||
```text
|
||||
http://[fe80::1%25eth0]/ # %25 = encoded '%', interpreted as fe80::1%eth0
|
||||
http://[fe80::a9ff:fe00:1%25en0]/ # Another example (macOS style)
|
||||
```
|
||||
대상 애플리케이션이 호스트가 *아니라* `fe80::1`인지 검증하지만 `%`에서 파싱을 중단하면 요청을 외부로 잘못 처리할 수 있습니다. 항상 보안 결정을 내리기 **전에** 주소를 정규화하거나 선택적 영역 ID를 완전히 제거하십시오.
|
||||
|
||||
### 최근 라이브러리 파싱 CVE (2022–2025)
|
||||
|
||||
여러 주요 프레임워크는 URL 검증이 위의 트릭으로 우회된 후 SSRF에 악용될 수 있는 호스트 이름 불일치 문제로 고통받았습니다:
|
||||
|
||||
| 연도 | CVE | 구성 요소 | 버그 개요 | 최소 PoC |
|
||||
|------|-----|-----------|--------------|-------------|
|
||||
| 2024 | CVE-2024-22243 / ‑22262 | Spring `UriComponentsBuilder` | `[`는 *userinfo* 섹션에서 허용되지 않으므로 `https://example.com\[@internal`은 Spring에 의해 호스트 `example.com`으로 파싱되지만 브라우저에서는 `internal`로 파싱되어 호스트 허용 목록이 사용될 때 오픈 리디렉션 및 SSRF를 가능하게 합니다. Spring 5.3.34 / 6.0.19 / 6.1.6+로 업그레이드하십시오. |
|
||||
| 2023 | CVE-2023-27592 | **urllib3** <1.26.15 | 백슬래시 혼동으로 인해 `http://example.com\\@169.254.169.254/`가 `@`에서 분할되는 호스트 필터를 우회할 수 있었습니다. |
|
||||
| 2022 | CVE-2022-3602 | OpenSSL | 이름이 `.`로 접미사 붙을 때 호스트 이름 검증이 건너뛰어졌습니다 (점 없는 도메인 혼동). |
|
||||
|
||||
신뢰하는 서드파티 URL 파서에 의존할 때, **신뢰하는 라이브러리에서 반환된 정규화된 호스트와 사용자가 제공한 원시 문자열을 비교하여 이러한 문제를 감지하십시오.**
|
||||
|
||||
### 페이로드 생성 도우미 (2024+)
|
||||
|
||||
수동으로 대규모 사용자 정의 단어 목록을 만드는 것은 번거롭습니다. 오픈 소스 도구 **SSRF-PayloadMaker** (Python 3)는 이제 혼합 인코딩, 강제 HTTP 다운그레이드 및 백슬래시 변형을 포함하여 *80k+* 호스트 변형 조합을 자동으로 생성할 수 있습니다:
|
||||
```bash
|
||||
# Generate every known bypass that transforms the allowed host example.com to attacker.com
|
||||
python3 ssrf_maker.py --allowed example.com --attacker attacker.com -A -o payloads.txt
|
||||
```
|
||||
결과 목록은 Burp Intruder 또는 `ffuf`에 직접 입력할 수 있습니다.
|
||||
|
||||
## References
|
||||
|
||||
- [https://as745591.medium.com/albussec-penetration-list-08-server-side-request-forgery-ssrf-sample-90267f095d25](https://as745591.medium.com/albussec-penetration-list-08-server-side-request-forgery-ssrf-sample-90267f095d25)
|
||||
- [https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Server%20Side%20Request%20Forgery/README.md](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Server%20Side%20Request%20Forgery/README.md)
|
||||
- [https://portswigger.net/research/new-crazy-payloads-in-the-url-validation-bypass-cheat-sheet](https://portswigger.net/research/new-crazy-payloads-in-the-url-validation-bypass-cheat-sheet)
|
||||
- [https://nvd.nist.gov/vuln/detail/CVE-2024-22243](https://nvd.nist.gov/vuln/detail/CVE-2024-22243)
|
||||
- [https://github.com/hsynuzm/SSRF-PayloadMaker](https://github.com/hsynuzm/SSRF-PayloadMaker)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user