# Nginx
{% hint style="success" %}
Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Support HackTricks
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** π¬ [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** π¦ [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
{% endhint %}
**μ¦μ μ¬μ© κ°λ₯ν μ·¨μ½μ νκ° λ° μΉ¨ν¬ ν
μ€νΈ μ€μ **. 20κ° μ΄μμ λꡬ λ° κΈ°λ₯μ μ¬μ©νμ¬ μ΄λμλ μ 체 μΉ¨ν¬ ν
μ€νΈλ₯Ό μ€ννμΈμ. μ°λ¦¬λ μΉ¨ν¬ ν
μ€ν°λ₯Ό λ체νμ§ μμ΅λλ€ - μ°λ¦¬λ κ·Έλ€μ΄ λ κΉμ΄ νκ³ λ€κ³ , μμ ν°λ¨λ¦¬κ³ , μ¬λ―Έλ₯Ό λλ μ μλλ‘ λ§μΆ€ν λꡬ, νμ§ λ° μ
μ© λͺ¨λμ κ°λ°ν©λλ€.
{% embed url="https://pentest-tools.com/?utm_term=jul2024&utm_medium=link&utm_source=hacktricks&utm_campaign=spons" %}
## Missing root location
Nginx μλ²λ₯Ό ꡬμ±ν λ, **root μ§μμ΄**λ νμΌμ΄ μ 곡λλ κΈ°λ³Έ λλ ν 리λ₯Ό μ μν¨μΌλ‘μ¨ μ€μν μν μ ν©λλ€. μλ μλ₯Ό κ³ λ €νμΈμ:
```bash
server {
root /etc/nginx;
location /hello.txt {
try_files $uri $uri/ =404;
proxy_pass http://127.0.0.1:8080/;
}
}
```
μ΄ κ΅¬μ±μμ `/etc/nginx`λ λ£¨νΈ λλ ν λ¦¬λ‘ μ§μ λ©λλ€. μ΄ μ€μ μ `/hello.txt`μ κ°μ μ§μ λ λ£¨νΈ λλ ν 리 λ΄μ νμΌμ λν μ κ·Όμ νμ©ν©λλ€. κ·Έλ¬λ νΉμ μμΉ(`location /hello.txt`)λ§ μ μλμ΄ μλ€λ μ μ΄ μ€μν©λλ€. λ£¨νΈ μμΉ(`location / {...}`)μ λν ꡬμ±μ μμ΅λλ€. μ΄ λλ½μ λ£¨νΈ μ§μμ΄κ° μ μμ μΌλ‘ μ μ©λμ΄, λ£¨νΈ κ²½λ‘ `/`μ λν μμ²μ΄ `/etc/nginx` μλμ νμΌμ μ κ·Όν μ μκ² ν©λλ€.
μ΄ κ΅¬μ±μμ μ€μν 보μ κ³ λ € μ¬νμ΄ λ°μν©λλ€. `GET /nginx.conf`μ κ°μ κ°λ¨ν `GET` μμ²μ `/etc/nginx/nginx.conf`μ μμΉν Nginx κ΅¬μ± νμΌμ μ 곡ν¨μΌλ‘μ¨ λ―Όκ°ν μ 보λ₯Ό λ
ΈμΆν μ μμ΅λλ€. 루νΈλ₯Ό `/etc`μ κ°μ λ λ―Όκ°ν λλ ν λ¦¬λ‘ μ€μ νλ©΄ μ΄ μνμ μνν μ μμ§λ§, μ¬μ ν λ€λ₯Έ κ΅¬μ± νμΌ, μ κ·Ό λ‘κ·Έ λ° HTTP κΈ°λ³Έ μΈμ¦μ μ¬μ©λλ μνΈνλ μ격 μ¦λͺ
κ³Ό κ°μ λ€λ₯Έ μ€μν νμΌμ λν μλμΉ μμ μ κ·Όμ νμ©ν μ μμ΅λλ€.
## Alias LFI Misconfiguration
Nginxμ κ΅¬μ± νμΌμμλ "location" μ§μμ΄μ λν λ©΄λ°ν κ²ν κ° νμν©λλ€. Local File Inclusion (LFI)λ‘ μλ €μ§ μ·¨μ½μ μ λ€μκ³Ό μ μ¬ν ꡬμ±μ ν΅ν΄ μ°μ°ν λμ
λ μ μμ΅λλ€:
```
location /imgs {
alias /path/images/;
}
```
μ΄ κ΅¬μ±μ μλ²κ° `/imgs../flag.txt`μ κ°μ μμ²μ μλλ λλ ν 리 μΈλΆμ νμΌμ μ κ·Όνλ €λ μλλ‘ ν΄μνκΈ° λλ¬Έμ LFI 곡격μ μ·¨μ½ν©λλ€. μ΄λ μ€μ λ‘ `/path/images/../flag.txt`λ‘ ν΄κ²°λ©λλ€. μ΄ κ²°ν¨μ 곡격μκ° μΉμ ν΅ν΄ μ κ·Όν μ μμ΄μΌ νλ μλ²μ νμΌ μμ€ν
μμ νμΌμ κ²μν μ μκ² ν©λλ€.
μ΄ μ·¨μ½μ μ μννκΈ° μν΄ κ΅¬μ±μ λ€μκ³Ό κ°μ΄ μ‘°μ λμ΄μΌ ν©λλ€:
```
location /imgs/ {
alias /path/images/;
}
```
λ λ§μ μ 보: [https://www.acunetix.com/vulnerabilities/web/path-traversal-via-misconfigured-nginx-alias/](https://www.acunetix.com/vulnerabilities/web/path-traversal-via-misconfigured-nginx-alias/)
Accunetix ν
μ€νΈ:
```
alias../ => HTTP status code 403
alias.../ => HTTP status code 404
alias../../ => HTTP status code 403
alias../../../../../../../../../../../ => HTTP status code 400
alias../ => HTTP status code 403
```
## μμ νμ§ μμ κ²½λ‘ μ ν
λ€μ νμ΄μ§λ₯Ό νμΈνμ¬ λ€μκ³Ό κ°μ μ§μλ¬Έμ μ°ννλ λ°©λ²μ μμ보μΈμ:
```plaintext
location = /admin {
deny all;
}
location = /admin/ {
deny all;
}
```
{% content-ref url="../../pentesting-web/proxy-waf-protections-bypass.md" %}
[proxy-waf-protections-bypass.md](../../pentesting-web/proxy-waf-protections-bypass.md)
{% endcontent-ref %}
## μμ νμ§ μμ λ³μ μ¬μ© / HTTP μμ² λΆν
{% hint style="danger" %}
μ·¨μ½ν λ³μ `$uri`μ `$document_uri`κ° μμΌλ©°, μ΄λ₯Ό `$request_uri`λ‘ κ΅μ²΄νμ¬ μμ ν μ μμ΅λλ€.
μ κ· ννμλ μ·¨μ½ν μ μμ΅λλ€:
`location ~ /docs/([^/])? { β¦ $1 β¦ }` - μ·¨μ½ν¨
`location ~ /docs/([^/\s])? { β¦ $1 β¦ }` - μ·¨μ½νμ§ μμ (κ³΅κ° νμΈ)
`location ~ /docs/(.*)? { β¦ $1 β¦ }` - μ·¨μ½νμ§ μμ
{% endhint %}
Nginx ꡬμ±μ μ·¨μ½μ μ μλ μμ λ‘ μ€λͺ
λ©λλ€:
```
location / {
return 302 https://example.com$uri;
}
```
HTTP μμ²μμ \r (μΊλ¦¬μ§ 리ν΄) λ° \n (λΌμΈ νΌλ) λ¬Έμλ μ μ€ λ¬Έμλ₯Ό λνλ΄λ©°, μ΄λ€μ URL μΈμ½λ© ννλ `%0d%0a`λ‘ ννλ©λλ€. μλͺ» ꡬμ±λ μλ²μ μ΄λ¬ν λ¬Έμλ₯Ό ν¬ν¨ν μμ²(μ: `http://localhost/%0d%0aDetectify:%20clrf`)μ 보λ΄λ©΄ μλ²λ `Detectify`λΌλ μ ν€λλ₯Ό λ°κΈν©λλ€. μ΄λ $uri λ³μκ° URL μΈμ½λ©λ μ μ€ λ¬Έμλ₯Ό λμ½λ©νμ¬ μλ΅μ μμμΉ λͺ»ν ν€λκ° ν¬ν¨λκΈ° λλ¬Έμ
λλ€:
```
HTTP/1.1 302 Moved Temporarily
Server: nginx/1.19.3
Content-Type: text/html
Content-Length: 145
Connection: keep-alive
Location: https://example.com/
Detectify: clrf
```
CRLF μ£Όμ
λ° μλ΅ λΆν μ μνμ λν΄ λ μμλ³΄λ €λ©΄ [https://blog.detectify.com/2019/06/14/http-response-splitting-exploitations-and-mitigations/](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) μ·¨μ½ν μμ μ νμ§ λ©μ»€λμ¦κ³Ό ν¨κ». μλ₯Ό λ€μ΄, λΈλλ°μ€ κ΄μ μμ μ΄ μλͺ»λ ꡬμ±μ νμ§νκΈ° μν΄ λ€μ μμ²μ μ¬μ©ν μ μμ΅λλ€:
* `https://example.com/%20X` - λͺ¨λ HTTP μ½λ
* `https://example.com/%20H` - 400 μλͺ»λ μμ²
μ·¨μ½ν κ²½μ°, 첫 λ²μ§Έλ "X"κ° λͺ¨λ HTTP λ©μλμ΄λ―λ‘ λ°νλκ³ , λ λ²μ§Έλ Hκ° μ ν¨ν λ©μλκ° μλλ―λ‘ μ€λ₯κ° λ°νλ©λλ€. λ°λΌμ μλ²λ `GET / H HTTP/1.1`κ³Ό κ°μ κ²μ μμ νκ² λκ³ , μ΄λ μ€λ₯λ₯Ό μ λ°ν©λλ€.
λ λ€λ₯Έ νμ§ μλ λ€μκ³Ό κ°μ΅λλ€:
* `http://company.tld/%20HTTP/1.1%0D%0AXXXX:%20x` - λͺ¨λ HTTP μ½λ
* `http://company.tld/%20HTTP/1.1%0D%0AHost:%20x` - 400 μλͺ»λ μμ²
κ·Έ κ°μ°μμ λ°κ²¬λ μ·¨μ½ν κ΅¬μ± μ€ μΌλΆλ λ€μκ³Ό κ°μ΅λλ€:
* μ΅μ’
URLμμ **`$uri`**κ° κ·Έλλ‘ μ€μ λ λ°©λ²μ μ£Όλͺ©νμΈμ.
```
location ^~ /lite/api/ {
proxy_pass http://lite-backend$uri$is_args$args;
}
```
* λ€μ **`$uri`**κ° URLμ μλ κ²μ μ£Όλͺ©νμΈμ (μ΄λ²μλ 맀κ°λ³μ μμ μμ΅λλ€)
```
location ~ ^/dna/payment {
rewrite ^/dna/([^/]+) /registered/main.pl?cmd=unifiedPayment&context=$1&native_uri=$uri break;
proxy_pass http://$back;
```
* μ΄μ AWS S3μμ
```
location /s3/ {
proxy_pass https://company-bucket.s3.amazonaws.com$uri;
}
```
### Any variable
**μ¬μ©μ μ 곡 λ°μ΄ν°**κ° νΉμ μν©μμ **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) λ΄μμ λ°μνλ κ²μ νμΈνμμΌλ©°, μλ² μ¬μ΄λ ν¬ν¨(SSI)μ΄ κ·Όλ³Έ μμΈμΌλ‘ μ§λͺ©λμμ΅λλ€.
μ΄ **μλͺ»λ ꡬμ±**μ **νμ§**νκΈ° μν΄, λ€μ λͺ
λ Ήμ μ€νν μ μμΌλ©°, μ΄λ λ³μ μΆλ ₯μ ν
μ€νΈνκΈ° μν΄ referer ν€λλ₯Ό μ€μ νλ κ²μ ν¬ν¨ν©λλ€:
```bash
$ curl -H βReferer: barβ http://localhost/foo$http_referer | grep βfoobarβ
```
μ΄ μλͺ»λ ꡬμ±μ λν μ€μΊ κ²°κ³Ό, μ¬μ©μκ° Nginx λ³μλ₯Ό μΆλ ₯ν μ μλ μ¬λ¬ μΈμ€ν΄μ€κ° λ°κ²¬λμμ΅λλ€. κ·Έλ¬λ μ·¨μ½ν μΈμ€ν΄μ€μ μκ° κ°μν κ²μ μ΄ λ¬Έμ λ₯Ό ν¨μΉνκΈ° μν λ
Έλ ₯μ΄ μ΄λ μ λ μ±κ³΅μ μ΄μλ€λ κ²μ μμ¬ν©λλ€.
## μμ λ°±μλ μλ΅ μ½κΈ°
Nginxλ `proxy_pass`λ₯Ό ν΅ν΄ λ°±μλμμ μμ±λ μ€λ₯ λ° HTTP ν€λλ₯Ό κ°λ‘μ±λ κΈ°λ₯μ μ 곡νμ¬ λ΄λΆ μ€λ₯ λ©μμ§μ ν€λλ₯Ό μ¨κΈ°λλ‘ μ€κ³λμμ΅λλ€. μ΄λ Nginxκ° λ°±μλ μ€λ₯μ λν μ¬μ©μ μ μ μ€λ₯ νμ΄μ§λ₯Ό μ 곡ν¨μΌλ‘μ¨ μ΄λ£¨μ΄μ§λλ€. κ·Έλ¬λ Nginxκ° μλͺ»λ HTTP μμ²μ μ²λ¦¬ν λ λ¬Έμ κ° λ°μν©λλ€. μ΄λ¬ν μμ²μ μμ λ λλ‘ λ°±μλλ‘ μ λ¬λλ©°, λ°±μλμ μμ μλ΅μ Nginxμ κ°μ
μμ΄ ν΄λΌμ΄μΈνΈμκ² μ§μ μ μ‘λ©λλ€.
uWSGI μ ν리μΌμ΄μ
κ³Ό κ΄λ ¨λ μμ μλ리μ€λ₯Ό κ³ λ €ν΄ λ³΄μμμ€:
```python
def application(environ, start_response):
start_response('500 Error', [('Content-Type', 'text/html'), ('Secret-Header', 'secret-info')])
return [b"Secret info, should not be visible!"]
```
μ΄λ₯Ό κ΄λ¦¬νκΈ° μν΄ Nginx ꡬμ±μμ νΉμ μ§μμ΄κ° μ¬μ©λ©λλ€:
```
http {
error_page 500 /html/error.html;
proxy_intercept_errors on;
proxy_hide_header Secret-Header;
}
```
* [**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 ν€λλ₯Ό μ¨κ²¨ κ°μΈ μ 보 λ³΄νΈ λ° λ³΄μμ κ°νν©λλ€.
μ ν¨ν `GET` μμ²μ΄ μ΄λ£¨μ΄μ§λ©΄ Nginxλ μ΄λ₯Ό μ μμ μΌλ‘ μ²λ¦¬νμ¬ λΉλ° ν€λλ₯Ό λ
ΈμΆνμ§ μκ³ νμ€ μ€λ₯ μλ΅μ λ°νν©λλ€. κ·Έλ¬λ μ ν¨νμ§ μμ HTTP μμ²μ μ΄ λ©μ»€λμ¦μ μ°ννμ¬ λΉλ° ν€λμ μ€λ₯ λ©μμ§λ₯Ό ν¬ν¨ν μμ λ°±μλ μλ΅μ΄ λ
ΈμΆλ©λλ€.
## merge\_slashesλ₯Ό offλ‘ μ€μ
κΈ°λ³Έμ μΌλ‘ Nginxμ **`merge_slashes` μ§μμ΄**λ **`on`**μΌλ‘ μ€μ λμ΄ μμ΄ URLμ μ¬λ¬ κ°μ μ¬λμλ₯Ό νλμ μ¬λμλ‘ μμΆν©λλ€. μ΄ κΈ°λ₯μ URL μ²λ¦¬λ₯Ό κ°μννμ§λ§, Nginx λ€μ μλ μ ν리μΌμ΄μ
μμ νΉν λ‘컬 νμΌ ν¬ν¨(LFI) 곡격μ μ·¨μ½ν κ²½μ° μ·¨μ½μ μ μ¨κΈΈ μ μμ΅λλ€. 보μ μ λ¬Έκ° **Danny Robinsonκ³Ό Rotem Bar**λ Nginxκ° λ¦¬λ²μ€ νλ‘μλ‘ μλν λ μ΄ κΈ°λ³Έ λμκ³Ό κ΄λ ¨λ μ μ¬μ μνμ κ°μ‘°νμ΅λλ€.
μ΄λ¬ν μνμ μννκΈ° μν΄, μ΄λ¬ν μ·¨μ½μ μ μ·¨μ½ν μ ν리μΌμ΄μ
μ λν΄ **`merge_slashes` μ§μμ΄λ₯Ό λλ κ²μ΄ κΆμ₯λ©λλ€**. μ΄λ Nginxκ° URL ꡬ쑰λ₯Ό λ³κ²½νμ§ μκ³ μ ν리μΌμ΄μ
μ μμ²μ μ λ¬νλλ‘ λ³΄μ₯νμ¬ κΈ°λ³Έμ μΈ λ³΄μ λ¬Έμ λ₯Ό μ¨κΈ°μ§ μλλ‘ ν©λλ€.
μμΈν λ΄μ©μ [Danny Robinsonκ³Ό Rotem Bar](https://medium.com/appsflyer/nginx-may-be-protecting-your-applications-from-traversal-attacks-without-you-even-knowing-b08f882fd43d)λ₯Ό νμΈνμΈμ.
### **Maclicious Response Headers**
[**μ΄ κΈ**](https://mizu.re/post/cors-playground)μμ 보μ¬μ€ λ°μ κ°μ΄, μΉ μλ²μ μλ΅μ μ‘΄μ¬νλ νΉμ ν€λλ Nginx νλ‘μμ λμμ λ³κ²½ν©λλ€. μ΄λ€μ [**λ¬Έμμμ νμΈν μ μμ΅λλ€**](https://www.nginx.com/resources/wiki/start/topics/examples/x-accel/):
* `X-Accel-Redirect`: Nginxκ° μμ²μ μ§μ λ μμΉλ‘ λ΄λΆ 리λλ μ
νλλ‘ μ§μν©λλ€.
* `X-Accel-Buffering`: Nginxκ° μλ΅μ λ²νΌλ§ν μ§ μ¬λΆλ₯Ό μ μ΄ν©λλ€.
* `X-Accel-Charset`: X-Accel-Redirectλ₯Ό μ¬μ©ν λ μλ΅μ λ¬Έμ μ§ν©μ μ€μ ν©λλ€.
* `X-Accel-Expires`: X-Accel-Redirectλ₯Ό μ¬μ©ν λ μλ΅μ λ§λ£ μκ°μ μ€μ ν©λλ€.
* `X-Accel-Limit-Rate`: X-Accel-Redirectλ₯Ό μ¬μ©ν λ μλ΅μ μ μ‘ μλλ₯Ό μ νν©λλ€.
μλ₯Ό λ€μ΄, ν€λ **`X-Accel-Redirect`**λ Nginxμμ λ΄λΆ **리λλ μ
**μ λ°μμν΅λλ€. λ°λΌμ **`root /`**μ κ°μ Nginx ꡬμ±μ΄ μκ³ μΉ μλ²μ μλ΅μ **`X-Accel-Redirect: .env`**κ° ν¬ν¨λλ©΄ Nginxλ **`/.env`**μ λ΄μ©μ μ μ‘νκ² λ©λλ€ (κ²½λ‘ νμ).
### **Map Directiveμ κΈ°λ³Έκ°**
**Nginx ꡬμ±**μμ `map` μ§μμ΄λ μ’
μ’
**κΆν μ μ΄**μμ μν μ ν©λλ€. μΌλ°μ μΈ μ€μλ **κΈ°λ³Έ** κ°μ μ§μ νμ§ μλ κ²μΌλ‘, μ΄λ λ¬΄λ¨ μ κ·ΌμΌλ‘ μ΄μ΄μ§ μ μμ΅λλ€. μλ₯Ό λ€μ΄:
```yaml
http {
map $uri $mappocallow {
/map-poc/private 0;
/map-poc/secret 0;
/map-poc/public 1;
}
}
```
```yaml
server {
location /map-poc {
if ($mappocallow = 0) {return 403;}
return 200 "Hello. It is private area: $mappocallow";
}
}
```
`default`κ° μμΌλ©΄, **μ
μμ μΈ μ¬μ©μ**λ `/map-poc` λ΄μμ **μ μλμ§ μμ URI**μ μ κ·Όνμ¬ λ³΄μμ μ°νν μ μμ΅λλ€. [Nginx 맀λ΄μΌ](https://nginx.org/en/docs/http/ngx\_http\_map\_module.html)μμλ μ΄λ¬ν λ¬Έμ λ₯Ό νΌνκΈ° μν΄ **κΈ°λ³Έκ°**μ μ€μ ν κ²μ κΆμ₯ν©λλ€.
### **DNS μ€νΈν μ·¨μ½μ **
νΉμ 쑰건μμ Nginxμ λν DNS μ€νΈνμ΄ κ°λ₯ν©λλ€. 곡격μκ° Nginxμμ μ¬μ©νλ **DNS μλ²**λ₯Ό μκ³ κ·Έ DNS 쿼리λ₯Ό κ°λ‘μ± μ μλ€λ©΄, DNS λ μ½λλ₯Ό μ€νΈνν μ μμ΅λλ€. κ·Έλ¬λ Nginxκ° DNS ν΄μμ μν΄ **localhost (127.0.0.1)**λ₯Ό μ¬μ©νλλ‘ κ΅¬μ±λ κ²½μ°, μ΄ λ°©λ²μ ν¨κ³Όμ μ΄μ§ μμ΅λλ€. Nginxλ λ€μκ³Ό κ°μ΄ DNS μλ²λ₯Ό μ§μ ν μ μμ΅λλ€:
```yaml
resolver 8.8.8.8;
```
### **`proxy_pass` λ° `internal` μ§μμ΄**
**`proxy_pass`** μ§μμ΄λ μμ²μ λ΄λΆ λλ μΈλΆμ λ€λ₯Έ μλ²λ‘ 리λλ μ
νλ λ° μ¬μ©λ©λλ€. **`internal`** μ§μμ΄λ νΉμ μμΉκ° Nginx λ΄μμλ§ μ κ·Ό κ°λ₯νλλ‘ λ³΄μ₯ν©λλ€. μ΄λ¬ν μ§μμ΄ μ체λ μ·¨μ½μ μ΄ μλμ§λ§, 보μ λμλ₯Ό λ°©μ§νκΈ° μν΄ κ΅¬μ±μ λν μ μ€ν κ²ν κ° νμν©λλ€.
## proxy\_set\_header Upgrade & Connection
nginx μλ²κ° Upgrade λ° Connection ν€λλ₯Ό μ λ¬νλλ‘ κ΅¬μ±λ κ²½μ° [**h2c Smuggling 곡격**](../../pentesting-web/h2c-smuggling.md)λ₯Ό μννμ¬ λ³΄νΈλ/λ΄λΆ μλν¬μΈνΈμ μ κ·Όν μ μμ΅λλ€.
{% hint style="danger" %}
μ΄ μ·¨μ½μ μ 곡격μκ° **`proxy_pass` μλν¬μΈνΈμ μ§μ μ°κ²°μ μ€μ ν μ μκ² ν©λλ€** (`http://backend:9999`μ κ²½μ°) μ΄ μ½ν
μΈ λ nginxμ μν΄ νμΈλμ§ μμ΅λλ€.
{% endhint %}
`/flag`λ₯Ό νμΉκΈ° μν μ·¨μ½ν κ΅¬μ± μμ: [μ¬κΈ°](https://bishopfox.com/blog/h2c-smuggling-request)μμ νμΈνμΈμ.
```
server {
listen 443 ssl;
server_name localhost;
ssl_certificate /usr/local/nginx/conf/cert.pem;
ssl_certificate_key /usr/local/nginx/conf/privkey.pem;
location / {
proxy_pass http://backend:9999;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
}
location /flag {
deny all;
}
```
{% hint style="warning" %}
`proxy_pass`κ° `http://backend:9999/socket.io`μ κ°μ νΉμ **κ²½λ‘**λ₯Ό κ°λ¦¬ν€κ³ μλλΌλ, μ°κ²°μ `http://backend:9999`λ‘ μ€μ λλ―λ‘ **λ΄λΆ μλν¬μΈνΈ λ΄μ λ€λ₯Έ κ²½λ‘μ μ°λ½ν μ μμ΅λλ€. λ°λΌμ proxy_passμ URLμ κ²½λ‘κ° μ§μ λμ΄ μλμ§λ μ€μνμ§ μμ΅λλ€.**
{% endhint %}
## μ§μ ν΄λ³΄μΈμ
Detectifyλ Dockerλ₯Ό μ¬μ©νμ¬ μ΄ κΈ°μ¬μμ λ
Όμλ λͺ κ°μ§ μλͺ»λ ꡬμ±μΌλ‘ μ·¨μ½ν Nginx ν
μ€νΈ μλ²λ₯Ό μ€μ νκ³ μ§μ μ°Ύμλ³Ό μ μλ GitHub 리ν¬μ§ν 리λ₯Ό λ§λ€μμ΅λλ€!
[https://github.com/detectify/vulnerable-nginx](https://github.com/detectify/vulnerable-nginx)
## μ μ λΆμ λꡬ
### [GIXY](https://github.com/yandex/gixy)
Gixyλ Nginx ꡬμ±μ λΆμνλ λꡬμ
λλ€. Gixyμ μ£Όμ λͺ©νλ 보μ μλͺ»λ ꡬμ±μ λ°©μ§νκ³ κ²°ν¨ νμ§λ₯Ό μλννλ κ²μ
λλ€.
### [Nginxpwner](https://github.com/stark0de/nginxpwner)
Nginxpwnerλ μΌλ°μ μΈ Nginx μλͺ»λ κ΅¬μ± λ° μ·¨μ½μ μ μ°ΎκΈ° μν κ°λ¨ν λꡬμ
λλ€.
## μ°Έκ³ μλ£
* [**https://blog.detectify.com/2020/11/10/common-nginx-misconfigurations/**](https://blog.detectify.com/2020/11/10/common-nginx-misconfigurations/)
* [**http://blog.zorinaq.com/nginx-resolver-vulns/**](http://blog.zorinaq.com/nginx-resolver-vulns/)
* [**https://github.com/yandex/gixy/issues/115**](https://github.com/yandex/gixy/issues/115)
**μ·¨μ½μ± νκ° λ° μΉ¨ν¬ ν
μ€νΈλ₯Ό μν μ¦μ μ¬μ© κ°λ₯ν μ€μ **. 20κ° μ΄μμ λꡬ λ° κΈ°λ₯μ μ¬μ©νμ¬ μ΄λμλ μ 체 μΉ¨ν¬ ν
μ€νΈλ₯Ό μ€ννμΈμ. μ°λ¦¬λ μΉ¨ν¬ ν
μ€ν°λ₯Ό λ체νμ§ μμ΅λλ€ - μ°λ¦¬λ κ·Έλ€μ΄ λ κΉμ΄ νκ³ λ€κ³ , μμ ν°λ¨λ¦¬κ³ , μ¬λ―Έλ₯Ό λλ μ μλλ‘ λ§μΆ€ν λꡬ, νμ§ λ° μ
μ© λͺ¨λμ κ°λ°ν©λλ€.
{% embed url="https://pentest-tools.com/?utm_term=jul2024&utm_medium=link&utm_source=hacktricks&utm_campaign=spons" %}
{% hint style="success" %}
AWS ν΄νΉ λ°°μ°κΈ° λ° μ°μ΅νκΈ°:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
GCP ν΄νΉ λ°°μ°κΈ° λ° μ°μ΅νκΈ°: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
HackTricks μ§μνκΈ°
* [**ꡬλ
κ³ν**](https://github.com/sponsors/carlospolop) νμΈνκΈ°!
* **π¬ [**Discord κ·Έλ£Ή**](https://discord.gg/hRep4RUj7f) λλ [**ν
λ κ·Έλ¨ κ·Έλ£Ή**](https://t.me/peass)μ μ°Έμ¬νκ±°λ **Twitter** π¦ [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**λ₯Ό νλ‘μ°νμΈμ.**
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) λ° [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub 리ν¬μ§ν 리μ PRμ μ μΆνμ¬ ν΄νΉ νμ 곡μ νμΈμ.**
{% endhint %}