Translated ['src/pentesting-web/ssrf-server-side-request-forgery/url-for

This commit is contained in:
Translator 2025-07-22 08:44:02 +00:00
parent 8f7fa3229c
commit ec76f99ff6

View File

@ -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에서 호스트 이름에서 경로로의 전환을 표시하는 것입니다.
![https://bugs.xdavidhu.me/assets/posts/2021-12-30-fixing-the-unfixable-story-of-a-google-cloud-ssrf/spec_difference.jpg](https://bugs.xdavidhu.me/assets/posts/2021-12-30-fixing-the-unfixable-story-of-a-google-cloud-ssrf/spec_difference.jpg)
@ -205,12 +205,44 @@ _백슬래시 트릭_은 [WHATWG URL 표준](https://url.spec.whatwg.org/#url-pa
![https://claroty.com/2022/01/10/blog-research-exploiting-url-parsing-confusion/](<../../images/image (600).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 (20222025)
여러 주요 프레임워크는 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}}