LFI2RCE via PHP_SESSION_UPLOAD_PROGRESS

Tip

AWS ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ:HackTricks Training AWS Red Team Expert (ARTE)
GCP ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training GCP Red Team Expert (GRTE) Azure ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks ์ง€์›ํ•˜๊ธฐ

๊ธฐ๋ณธ ์ •๋ณด

์„ธ์…˜์ด ์—†๊ณ  session.auto_start๊ฐ€ ๊บผ์ ธ ์žˆ์–ด๋„ Local File Inclusion์„ ๋ฐœ๊ฒฌํ•œ ๊ฒฝ์šฐ, **session.upload_progress.enabled**๊ฐ€ ์ผœ์ ธ ์žˆ๊ณ  multipart POST ๋ฐ์ดํ„ฐ์— **PHP_SESSION_UPLOAD_PROGRESS**๋ฅผ ์ œ๊ณตํ•˜๋ฉด PHP๊ฐ€ ์„ธ์…˜์„ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.

$ curl http://127.0.0.1/ -H 'Cookie: PHPSESSID=iamorange'
$ ls -a /var/lib/php/sessions/
. ..
$ curl http://127.0.0.1/ -H 'Cookie: PHPSESSID=iamorange' -d 'PHP_SESSION_UPLOAD_PROGRESS=blahblahblah'
$ ls -a /var/lib/php/sessions/
. ..
$ curl http://127.0.0.1/ -H 'Cookie: PHPSESSID=iamorange' -F 'PHP_SESSION_UPLOAD_PROGRESS=blahblahblah'  -F 'file=@/etc/passwd'
$ ls -a /var/lib/php/sessions/
. .. sess_iamorange

In the last example the session will contain the string blahblahblah

**PHP_SESSION_UPLOAD_PROGRESS**๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์„ธ์…˜ ๋‚ด์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ์„ธ์…˜ ํŒŒ์ผ์„ ํฌํ•จํ•˜๋ฉด ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„(์˜ˆ: php ์‰˜์ฝ”๋“œ)์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Note

์ธํ„ฐ๋„ท์˜ ๋Œ€๋ถ€๋ถ„์˜ ํŠœํ† ๋ฆฌ์–ผ์—์„œ๋Š” ๋””๋ฒ„๊น… ๋ชฉ์ ์œผ๋กœ session.upload_progress.cleanup์„ Off๋กœ ์„ค์ •ํ•  ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ PHP์˜ ๊ธฐ๋ณธ session.upload_progress.cleanup์€ ์—ฌ์ „ํžˆ On์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์„ธ์…˜์˜ ์—…๋กœ๋“œ ์ง„ํ–‰ ์ƒํ™ฉ์ด ๊ฐ€๋Šฅํ•œ ํ•œ ๋นจ๋ฆฌ ์ •๋ฆฌ๋œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด๋Š” ๊ฒฝ์Ÿ ์กฐ๊ฑด์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

CTF

์ด ๊ธฐ์ˆ ์ด ์–ธ๊ธ‰๋œ ์›๋ž˜ CTF์—์„œ๋Š” ๊ฒฝ์Ÿ ์กฐ๊ฑด์„ ์•…์šฉํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์•˜๊ณ , ๋กœ๋“œ๋œ ์ฝ˜ํ…์ธ ๋Š” @<?php ๋ฌธ์ž์—ด๋กœ ์‹œ์ž‘ํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

session.upload_progress.prefix์˜ ๊ธฐ๋ณธ ์„ค์ •์œผ๋กœ ์ธํ•ด, ์šฐ๋ฆฌ์˜ SESSION ํŒŒ์ผ์€ ์„ฑ๊ฐ€์‹  ์ ‘๋‘์‚ฌ upload_progress_๋กœ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ: upload_progress_controlledcontentbyattacker

์ดˆ๊ธฐ ์ ‘๋‘์‚ฌ๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ์š”๋ น์€ ํŽ˜์ด๋กœ๋“œ๋ฅผ 3๋ฒˆ base64 ์ธ์ฝ”๋”ฉํ•œ ๋‹ค์Œ convert.base64-decode ํ•„ํ„ฐ๋ฅผ ํ†ตํ•ด ๋””์ฝ”๋”ฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Š” base64 ๋””์ฝ”๋”ฉ ์‹œ PHP๊ฐ€ ์ด์ƒํ•œ ๋ฌธ์ž๋ฅผ ์ œ๊ฑฐํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ 3๋ฒˆ ํ›„์—๋Š” ์˜ค์ง ๊ณต๊ฒฉ์ž๊ฐ€ ์ „์†กํ•œ ํŽ˜์ด๋กœ๋“œ๋งŒ ๋‚จ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค(๊ทธ ํ›„ ๊ณต๊ฒฉ์ž๋Š” ์ดˆ๊ธฐ ๋ถ€๋ถ„์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค).

์›๋ž˜ ์ž‘์„ฑ๋ฌผ์— ๋Œ€ํ•œ ๋” ๋งŽ์€ ์ •๋ณด๋Š” https://blog.orange.tw/2018/10/์™€ ์ตœ์ข… ์ต์Šคํ”Œ๋กœ์ž‡ https://github.com/orangetw/My-CTF-Web-Challenges/blob/master/hitcon-ctf-2018/one-line-php-challenge/exp_for_php.py
๋˜ ๋‹ค๋ฅธ ์ž‘์„ฑ๋ฌผ์€ https://spyclub.tech/2018/12/21/one-line-and-return-of-one-line-php-writeup/์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Tip

AWS ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ:HackTricks Training AWS Red Team Expert (ARTE)
GCP ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training GCP Red Team Expert (GRTE) Azure ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks ์ง€์›ํ•˜๊ธฐ