
๐ฌ ๋ฌธ์ ์ค๋ช
File Download ์ทจ์ฝ์ ์ด ์กด์ฌํ๋ ์น ์๋น์ค์
๋๋ค.
flag.py๋ฅผ ๋ค์ด๋ก๋ ๋ฐ์ผ๋ฉด ํ๋๊ทธ๋ฅผ ํ๋ํ ์ ์์ต๋๋ค.
โจ ํ์ด
File Download ์ทจ์ฝ์
์น ์๋ฒ์ ์๋ ํ์ผ์ ๋ค์ด๋ก๋ ํ ์ ์๋ ๊ฒฝ์ฐ์ ๋ค์ด๋ก๋ ์์ ํ์ผ ๊ฒฝ๋ก๋ฅผ ์กฐ์ํ์ฌ ๋ด๋ถ ์ ๋ณด ๋ค์ด๋ก๋ ๊ฐ๋ฅํ๊ฒ ํ๋ ์ทจ์ฝ์
๊ฐ๋จํ๊ฒ ํ์ผ ์ ๋ก๋ ๋ฐ ์ฝ๊ธฐ๊ฐ ๊ฐ๋ฅํ ์ฌ์ดํธ์๋ค.
์์ค์ฝ๋๋ฅผ ๋ดค์ ๋ ์๋์ ๊ฐ์ด ..์ ์
๋ ฅ์ ๋ง๊ธธ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์ฐพ๋๋ผ ํค๋งธ๋ค.
if filename.find('..') != -1:
return render_template('upload_result.html', data='bad characters,,')
๊ทธ๋ฐ๋ฐ ๋ค์ ์๊ฐํด๋ณด๋ upload์๋ง ํด๋น ์ ํจ์ฑ์ ํ์ธํ๋ ๋ถ๋ถ์ด ์๊ณ read์๋ ๊ทธ ๋ถ๋ถ์ด ์๋ค๋ ์ฌ์ค์ ์๊ฒ ๋๋ค!
read์ ๊ฒฝ๋ก๊ฐ /read?name=memo์ ๊ฐ์ด ์ฟผ๋ฆฌ ์คํธ๋ง์ผ๋ก ํ์ผ์ด๋ฆ์ ๋ฐ๋๋ค๋ ๊ฒ์ ์๊ฒ ๋์๋ค.
์ฝ๋๋ฅผ ํตํด ์ ์ฅ๋ ํ์ผ์ด ์ต์์ ํด๋ ํ์์ ์ ์ฅ๋๋ค๋ ๊ฒ์ ์๊ฒ ๋์ด ์ต์ข
๋ชฉํ๊ฐ ../flag.py์์ ์๊ฒ ๋์๋ค.
try:
with open(f'{UPLOAD_DIR}/{filename}', 'rb') as f:
data = f.read()
/read?name=../flag.py๋ก ๊ฒฝ๋ก ์์ฒญํ๋ ํ๋๊ทธ ๊ฐ์ด ๋์๋ค!

'CTF > Web Hacking' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [Dreamhack] command-injection-1 (0) | 2024.04.03 |
|---|---|
| [Dreamhack] devtools-sources (0) | 2024.04.03 |
| [Dreamhack] cookie (0) | 2024.04.03 |