# Server Side Inclusion/Edge Side Inclusion Injection
{% 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 %}
## Server Side Inclusion Basic Information
**(Introduction taken from [Apache docs](https://httpd.apache.org/docs/current/howto/ssi.html))**
SSI (μλ² μ¬μ΄λ ν¬ν¨)λ **HTML νμ΄μ§μ λ°°μΉλκ³ , νμ΄μ§κ° μ 곡λλ λμ μλ²μμ νκ°λλ μ§μμ΄**μ
λλ€. μ΄λ₯Ό ν΅ν΄ **κΈ°μ‘΄ HTML νμ΄μ§μ λμ μΌλ‘ μμ±λ μ½ν
μΈ λ₯Ό μΆκ°**ν μ μμΌλ©°, μ 체 νμ΄μ§λ₯Ό CGI νλ‘κ·Έλ¨μ΄λ λ€λ₯Έ λμ κΈ°μ μ ν΅ν΄ μ 곡ν νμκ° μμ΅λλ€.\
μλ₯Ό λ€μ΄, κΈ°μ‘΄ HTML νμ΄μ§μ λ€μκ³Ό κ°μ μ§μμ΄λ₯Ό λ°°μΉν μ μμ΅λλ€:
``
κ·Έλ¦¬κ³ νμ΄μ§κ° μ 곡λ λ, μ΄ μ‘°κ°μ νκ°λμ΄ κ·Έ κ°μΌλ‘ λ체λ©λλ€:
`Tuesday, 15-Jan-2013 19:28:54 EST`
SSIλ₯Ό μ¬μ©ν μμ κ³Ό νμ΄μ§λ₯Ό μμ ν μμ±ν νλ‘κ·Έλ¨μ μ¬μ©ν μμ μ κ²°μ μ μΌλ°μ μΌλ‘ νμ΄μ§μ μ μ λΆλΆκ³Ό νμ΄μ§κ° μ 곡λ λλ§λ€ μ¬κ³μ°ν΄μΌ νλ λΆλΆμ μμ λ°λΌ λ¬λΌμ§λλ€. SSIλ νμ¬ μκ°κ³Ό κ°μ μμ μ 보λ₯Ό μΆκ°νλ νλ₯ν λ°©λ²μ
λλ€ - μμ νμλ κ²μ²λΌ. κ·Έλ¬λ νμ΄μ§μ λλΆλΆμ΄ μ 곡λ λ μμ±λλ€λ©΄, λ€λ₯Έ μ루μ
μ μ°ΎμμΌ ν©λλ€.
μΉ μ ν리μΌμ΄μ
μ΄ **`.shtml`, `.shtm` λλ `.stm`** νμ₯μλ₯Ό κ°μ§ νμΌμ μ¬μ©νλ€λ©΄ SSIμ μ‘΄μ¬λ₯Ό μΆλ‘ ν μ μμ§λ§, κ·Έκ²λ§μ΄ μ λΆλ μλλλ€.
μ νμ μΈ SSI ννμμ λ€μ νμμ κ°μ§λλ€:
```
```
### νμΈ
```javascript
// Document name
// Date
// File inclusion
// Including files (same directory)
// CGI Program results
// Including virtual files (same directory)
// Modification date of a file
// Command exec
// Command exec
// Reverse shell
// Print all variables
// Setting variables
```
## Edge Side Inclusion
μ 보λ₯Ό **μΊμ±νκ±°λ λμ μ ν리μΌμ΄μ
**μ μΌλΆλ‘μ μ½ν
μΈ κ° λ€μ λ²μ μ½ν
μΈ λ₯Ό κ²μν λ **λ€λ₯Ό μ** μλ€λ λ¬Έμ κ° μμ΅λλ€. μ΄κ²μ΄ **ESI**κ° μ¬μ©λλ μ΄μ λ‘, ESI νκ·Έλ₯Ό μ¬μ©νμ¬ **μμ±ν΄μΌ νλ λμ μ½ν
μΈ **λ₯Ό λνλ
λλ€.\
λ§μ½ **곡격μ**κ° μΊμ μ½ν
μΈ λ΄μ **ESI νκ·Έλ₯Ό μ£Όμ
**ν μ μλ€λ©΄, κ·Έλ λ¬Έμκ° μ¬μ©μμκ² μ μ‘λκΈ° μ μ **μμμ μ½ν
μΈ λ₯Ό μ£Όμ
**ν μ μμ΅λλ€.
### ESI Detection
μλ²μ μλ΅μμ λ€μ **ν€λ**λ μλ²κ° ESIλ₯Ό μ¬μ©νκ³ μμμ μλ―Έν©λλ€:
```
Surrogate-Control: content="ESI/1.0"
```
μ΄ ν€λλ₯Ό μ°Ύμ μ μλ€λ©΄, μλ²λ **μ΄μ¨λ ESIλ₯Ό μ¬μ©νκ³ μμ μ μμ΅λλ€**.\
**λΈλΌμΈλ μ΅μ€νλ‘μ μ κ·Ό λ°©μλ μ¬μ©ν μ μμ΅λλ€**. μμ²μ 곡격μμ μλ²μ λμ°©ν΄μΌ ν©λλ€:
```javascript
// Basic detection
hello
// If previous is reflected as "hello", it's vulnerable
// Blind detection
// XSS Exploitation Example
// Cookie Stealer (bypass httpOnly flag)
// Introduce private local files (Not LFI per se)
// Valid for Akamai, sends debug information in the response
```
### ESI μ
μ©
[GoSecureλ](https://www.gosecure.net/blog/2018/04/03/beyond-xss-edge-side-include-injection/) λ€μν ESI κΈ°λ₯μ μ§μνλ μννΈμ¨μ΄μ λν΄ μλν μ μλ κ°λ₯ν 곡격μ μ΄ν΄νκΈ° μν νλ₯Ό λ§λ€μμ΅λλ€:
* **Includes**: `` μ§μμ΄λ₯Ό μ§μν©λλ€.
* **Vars**: `` μ§μμ΄λ₯Ό μ§μν©λλ€. XSS νν°λ₯Ό μ°ννλ λ° μ μ©ν©λλ€.
* **Cookie**: λ¬Έμ μΏ ν€λ ESI μμ§μ μ κ·Όν μ μμ΅λλ€.
* **Upstream Headers Required**: μμ μ ν리μΌμ΄μ
μ΄ ν€λλ₯Ό μ 곡νμ§ μμΌλ©΄ λ리 μ ν리μΌμ΄μ
μ ESI λ¬Έμ₯μ μ²λ¦¬νμ§ μμ΅λλ€.
* **Host Allowlist**: μ΄ κ²½μ° ESI ν¬ν¨μ νμ©λ μλ² νΈμ€νΈμμλ§ κ°λ₯νλ―λ‘, μλ₯Ό λ€μ΄ SSRFλ ν΄λΉ νΈμ€νΈμ λν΄μλ§ κ°λ₯ν©λλ€.
| **μννΈμ¨μ΄** | **Includes** | **Vars** | **Cookies** | **Upstream Headers Required** | **Host Whitelist** |
| :--------------------------: | :----------: | :------: | :---------: | :---------------------------: | :----------------: |
| Squid3 | Yes | Yes | Yes | Yes | No |
| Varnish Cache | Yes | No | No | Yes | Yes |
| Fastly | Yes | No | No | No | Yes |
| Akamai ESI Test Server (ETS) | Yes | Yes | Yes | No | No |
| NodeJS esi | Yes | Yes | Yes | No | No |
| NodeJS nodesi | Yes | No | No | No | Optional |
#### XSS
λ€μ ESI μ§μμ΄λ μλ²μ μλ΅ λ΄μμ μμμ νμΌμ λ‘λν©λλ€.
```xml
```
#### ν΄λΌμ΄μΈνΈ XSS λ³΄νΈ μ°ν
```xml
x=>alert(/Chrome%20XSS%20filter%20bypass/);>
Use to bypass WAFs:
ipt>alert(1)ript>
error=alert(1)>
```
#### μΏ ν€ νμΉκΈ°
* μ격 μΏ ν€ νμΉκΈ°
```xml
```
* XSSλ₯Ό μ¬μ©νμ¬ μλ΅μ λ°μνμ¬ HTTP\_ONLY μΏ ν€λ₯Ό νμΉκΈ°:
```bash
# This will reflect the cookies in the response
# Reflect XSS (you can put '">