**어디서나 실행 가능한 취약점 평가 및 침투 테스트 설정**. 20가지 이상의 도구 및 기능을 사용하여 recon부터 보고서 작성까지 완전한 펜테스트를 실행하세요. 우리는 펜테스터를 대체하지 않습니다 - 우리는 사용자 정의 도구, 탐지 및 공격 모듈을 개발하여 그들에게 더 많은 시간을 제공하여 더 깊이 파고들고 쉘을 열고 즐기도록 합니다.
이 구성에서 `/etc/nginx`가 루트 디렉토리로 지정되었습니다. 이 설정은 `/hello.txt`와 같은 지정된 루트 디렉토리 내의 파일에 액세스할 수 있도록 합니다. 그러나 중요한 점은 특정 위치(`/hello.txt`)만 정의되어 있다는 것입니다. 루트 위치(`location / {...}`)에 대한 구성이 없습니다. 이 누락으로 인해 루트 지시문이 전역적으로 적용되어 `/` 경로에 대한 요청이 `/etc/nginx` 아래의 파일에 액세스할 수 있게 됩니다.
이 구성에서 중요한 보안 고려 사항이 발생합니다. `/nginx.conf`와 같은 간단한 `GET` 요청은 `/etc/nginx/nginx.conf`에 위치한 Nginx 구성 파일을 제공하여 민감한 정보를 노출시킬 수 있습니다. 루트를 `/etc`와 같이 민감하지 않은 디렉토리로 설정하면 이 위험을 완화할 수 있지만, 여전히 다른 중요한 파일(다른 구성 파일, 액세스 로그, 심지어 HTTP 기본 인증에 사용되는 암호화된 자격 증명)에 대한 부정한 액세스를 허용할 수 있습니다.
이 구성은 `/imgs../flag.txt`와 같은 요청을 서버가 의도된 디렉토리 외부의 파일에 액세스하려는 시도로 해석하여 `/path/images/../flag.txt`로 해석하기 때문에 LFI 공격에 취약합니다. 이 결함으로 인해 공격자는 웹을 통해 액세스해서는 안 되는 서버 파일을 검색할 수 있습니다.
더 많은 정보: [https://www.acunetix.com/vulnerabilities/web/path-traversal-via-misconfigured-nginx-alias/](https://www.acunetix.com/vulnerabilities/web/path-traversal-via-misconfigured-nginx-alias/)
HTTP 요청에서 \r (복귀) 및 \n (개행) 문자는 새 줄 문자를 나타내며, URL 인코딩된 형식은 `%0d%0a`로 표시됩니다. 이러한 문자를 요청에 포함시키면 (예: `http://localhost/%0d%0aDetectify:%20clrf`), 설정이 잘못된 서버에서 `Detectify`라는 새 헤더가 발급됩니다. 이는 $uri 변수가 URL 인코딩된 새 줄 문자를 디코딩하기 때문에 응답에서 예상치 못한 헤더가 생성되기 때문에 발생합니다:
CRLF 주입 및 응답 분할의 위험성에 대해 자세히 알아보세요. [여기](https://blog.detectify.com/2019/06/14/http-response-splitting-exploitations-and-mitigations/)에서 확인할 수 있습니다.
또한 이 기술은 [**이 토크에서 설명**](https://www.youtube.com/watch?v=gWQyWdZbdoY\&list=PL0xCSYnG\_iTtJe2V6PQqamBF73n7-f1Nr\&index=77)되어 있으며 취약한 예제와 탐지 메커니즘이 제시되어 있습니다. 예를 들어, 블랙박스 관점에서 이 구성 오류를 탐지하려면 다음 요청을 사용할 수 있습니다:
특정 상황에서 **사용자 제공 데이터**가 **Nginx 변수**로 처리될 수 있다는 것이 발견되었습니다. 이러한 동작의 원인은 다소 애매하지만, 드물거나 간단히 확인할 수 있는 것은 아닙니다. 이 이상현상은 HackerOne의 보안 보고서에서 강조되었으며, [여기](https://hackerone.com/reports/370094)에서 확인할 수 있습니다. 오류 메시지에 대한 추가 조사를 통해 이 문제가 Nginx의 코드베이스의 [SSI 필터 모듈](https://github.com/nginx/nginx/blob/2187586207e1465d289ae64cedc829719a048a39/src/http/modules/ngx\_http\_ssi\_filter\_module.c#L365) 내에서 발생한다는 것을 확인하였으며, 이는 Server Side Includes (SSI)가 원인임을 밝혔습니다.
**이 구성 오류를 감지**하기 위해 다음 명령을 실행할 수 있습니다. 이 명령은 referer 헤더를 설정하여 변수 출력을 테스트하는 것을 포함합니다:
Nginx는 `proxy_pass`를 통해 백엔드에서 생성된 오류 및 HTTP 헤더를 가로챌 수 있는 기능을 제공하여 내부 오류 메시지와 헤더를 숨기려고 합니다. 이는 Nginx가 백엔드 오류에 대한 응답으로 사용자 정의 오류 페이지를 제공함으로써 달성됩니다. 그러나 Nginx가 잘못된 HTTP 요청을 만나면 도전이 발생합니다. 이러한 요청은 받은 대로 백엔드로 전달되고, 백엔드의 원시 응답이 Nginx의 개입 없이 클라이언트로 직접 전송됩니다.
* [**proxy\_intercept\_errors**](http://nginx.org/en/docs/http/ngx\_http\_proxy\_module.html#proxy\_intercept\_errors): 이 지시문은 Nginx가 상태 코드가 300보다 큰 백엔드 응답에 대해 사용자 정의 응답을 제공하도록 하는 것입니다. 예를 들어 uWSGI 애플리케이션의 경우 `500 Error` 응답이 Nginx에 의해 가로채지고 처리됩니다.
* [**proxy\_hide\_header**](http://nginx.org/en/docs/http/ngx\_http\_proxy\_module.html#proxy\_hide\_header): 이름에서 알 수 있듯이, 이 지시문은 특정 HTTP 헤더를 클라이언트로부터 숨깁니다. 이는 개인 정보 보호와 보안을 강화합니다.
기본적으로 Nginx의 **`merge_slashes` 지시문**은 **`on`**으로 설정되어 있으며 URL에서 여러 슬래시를 단일 슬래시로 압축합니다. 이 기능은 URL 처리를 간소화하지만 특히 Nginx 뒤의 애플리케이션에서 로컬 파일 포함 (LFI) 공격에 취약한 경우에는 애플리케이션의 취약점을 숨길 수 있습니다. 보안 전문가 **Danny Robinson**과 **Rotem Bar**는 특히 Nginx가 역방향 프록시로 작동할 때 이러한 기본 동작과 관련된 잠재적인 위험성을 강조했습니다.
자세한 내용은 [Danny Robinson and Rotem Bar](https://medium.com/appsflyer/nginx-may-be-protecting-your-applications-from-traversal-attacks-without-you-even-knowing-b08f882fd43d)를 확인하십시오.
Without a `default`, a **악의적 사용자** can bypass security by accessing an **undefined URI** within `/map-poc`. [The Nginx manual](https://nginx.org/en/docs/http/ngx\_http\_map\_module.html) advises setting a **default value** to avoid such issues.
DNS spoofing against Nginx is feasible under certain conditions. If an attacker knows the **DNS server** used by Nginx and can intercept its DNS queries, they can spoof DNS records. This method, however, is ineffective if Nginx is configured to use **localhost (127.0.0.1)** for DNS resolution. Nginx allows specifying a DNS server as follows:
**`proxy_pass`** 지시문은 요청을 다른 서버로 내부적으로 또는 외부적으로 리디렉션하는 데 사용됩니다. **`internal`** 지시문은 특정 위치에 대한 액세스가 Nginx 내에서만 가능하도록합니다. 이러한 지시문 자체로는 취약점이 아니지만, 그 구성은 보안 결함을 방지하기 위해 신중히 조사되어야 합니다.
`proxy_pass`가 특정 **경로**를 가리키더라도(`http://backend:9999/socket.io`와 같은) 연결은 `http://backend:9999`로 설정되므로 해당 내부 엔드포인트 내의 다른 경로에 연락할 수 있습니다. 따라서 `proxy_pass`의 URL에 경로가 지정되어 있더라도 상관없습니다.
**취약점 평가 및 침투 테스트를 위한 즉시 사용 가능한 설정**. 20개 이상의 도구 및 기능을 사용하여 어디서든 전체 펜테스트를 실행하십시오. 이는 정찰부터 보고서 작성까지 이어지는 기능을 제공합니다. 우리는 펜테스터를 대체하지 않습니다 - 우리는 그들이 더 깊이 파고들고, 쉘을 열고, 즐기는 시간을 돌려주기 위해 사용자 정의 도구, 탐지 및 이용 모듈을 개발합니다.