nginx๊ฐ ์๋ ์ผ๋ถ ์๋ฒ๋ 2018๋ Blackhat ์ปจํผ๋ฐ์ค์์ ์ ์๋ Nginx Alias โโTraversal ๊ธฐ์ ์ ์ฌ์ ํ ์ทจ์ฝํ๋ฉฐ "alias" ์ง์๋ฌธ์ ์ง์ ๋ ๋ฃจํธ ๋๋ ํ ๋ฆฌ ์ธ๋ถ์ ์๋ ํ์ผ ๋ฐ ๋๋ ํ ๋ฆฌ์ ๋ํ ์ก์ธ์ค๋ฅผ ํ์ฉํฉ๋๋ค. ๋ฌธ์ ๋ ๋งค๊ฐ๋ณ์๊ฐ "/" ๋ฌธ์๋ก ๋๋์ง ์๊ณ "alias"๊ฐ "/"๋ก ๋๋๋ "location" ๋ธ๋ก ๋ด๋ถ์ ๋ฐฐ์น๋ "alias" ์ง์๋ฌธ์ด ์๋ ๊ตฌ์ฑ์์๋ง ๋ํ๋ฉ๋๋ค.
๋ฌธ์ ์ ๋ณธ์ง์ ์์ฒญ๋ ๊ฒฝ๋ก๋ฅผ ์์น ์ง์์ด์ ๋ง์คํฌ์ ์ผ์น์ํค๊ณ ์ด ๋ง์คํฌ์ ์ง์ ๋ ๊ฒฝ๋ก์ ์ผ๋ถ๋ฅผ ์๋ผ๋ธ ํ ์์ฒญ๋ ๊ฒฝ๋ก๋ฅผ ์ฒจ๋ถํ์ฌ ๋ณ์นญ ์ง์์ด๊ฐ ์๋ ๋ธ๋ก์ ๋ํ ํ์ผ์ ์ ๊ณตํ๋ค๋ ๊ฒ์ ๋๋ค. ์์ ํ์๋ ์ทจ์ฝํ ๊ตฌ์ฑ์ ์์์ ๊ณต๊ฒฉ์๋ "/img../test.txt" ํ์ผ์ ์์ฒญํ ์ ์์ผ๋ฉฐ ์ด ์์ฒญ์ "/img" ์์น์ ์ง์ ๋ ๋ง์คํฌ์ ์ผ์นํ๊ณ ๋๋จธ์ง ํ ์ผ "../ test.txt"๋ ๋ณ์นญ ์ง์๋ฌธ "/var/images/"์ ๊ฒฝ๋ก์ ์ฒจ๋ถ๋๋ฉฐ ๊ฒฐ๊ณผ์ ์ผ๋ก "/var/images/../test.txt" ํ์ผ์ด ์์ฒญ๋ฉ๋๋ค. ๋ฐ๋ผ์ ๊ณต๊ฒฉ์๋ "/var/images/"์ ํ์ผ๋ฟ๋ง ์๋๋ผ "/var" ๋๋ ํ ๋ฆฌ์ ๋ชจ๋ ํ์ผ์ ์ก์ธ์คํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด nginx ๋ก๊ทธ๋ฅผ ๋ค์ด๋ก๋ํ๋ ค๋ฉด "/img../log/" ์์ฒญ์ ๋ณด๋ผ ์ ์์ต๋๋ค. nginx/access.log".
๋ณ์นญ ์ง์๋ฌธ์ ๊ฐ์ด "/" ๋ฌธ์๋ก ๋๋์ง ์๋ ๊ตฌ์ฑ(์: "alias /var/images;")์์ ๊ณต๊ฒฉ์๋ ์์ ๋๋ ํฐ๋ฆฌ๋ก ๋ณ๊ฒฝํ ์ ์์ง๋ง /var์์ ๋ค๋ฅธ ๋๋ ํฐ๋ฆฌ๋ฅผ ์์ฒญํ ์ ์์ต๋๋ค. ๊ทธ ์ด๋ฆ์ ๊ตฌ์ฑ์์ ์ง์ ๋ ๊ฒ์ผ๋ก ์์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด "/img.old/test.txt"๋ฅผ ์์ฒญํ๋ฉด "var/images.old/test.txt" ๋๋ ํ ๋ฆฌ์ ์ก์ธ์คํ ์ ์์ต๋๋ค.
GitHub์ ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ๋ถ์ํ ๊ฒฐ๊ณผ ๋ฌธ์ ๋ฅผ ์ผ์ผํค๋ nginx ๊ตฌ์ฑ ์ค๋ฅ๊ฐ ์ค์ ํ๋ก์ ํธ์์ ์ฌ์ ํ ๋ฐ๊ฒฌ๋๋ ๊ฒ์ผ๋ก ๋ํ๋ฌ์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋ฌธ์ ์ ์กด์ฌ๋ Bitwarden ์ํธ ๊ด๋ฆฌ์์ ๋ฐฑ์๋์์ ์๋ณ๋์์ผ๋ฉฐ /etc/bitwarden ๋๋ ํ ๋ฆฌ์ ๋ชจ๋ ํ์ผ์ ์ก์ธ์คํ๋ ๋ฐ ์ฌ์ฉ๋ ์ ์์ต๋๋ค(/attachments์ ๋ํ ์์ฒญ์ /etc/bitwarden/attachments/์์ ๋ฐํ๋จ). ์ํธ "vault.db", ์ธ์ฆ์ ๋ฐ ๋ก๊ทธ์ ํจ๊ป ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ํฌํจํ์ฌ "/attachments../vault.db", "/attachments../identity.pfx", "/attachments ์์ฒญ์ ๋ณด๋ด๊ธฐ์ ์ถฉ๋ถํ์ต๋๋ค. ../logs/api.log" ๋ฑ .P.
์ด ๋ฐฉ๋ฒ์ ๋ํ /static ์์ฒญ์ด "../hpc-toolkit/community/front-end/website/static/" ๋๋ ํ ๋ฆฌ๋ก ๋ฆฌ๋๋ ์ ๋๋ Google HPC ํดํท๊ณผ ํจ๊ป ์๋ํ์ต๋๋ค. ๊ฐ์ธ ํค์ ์๊ฒฉ ์ฆ๋ช ์ด ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ป๊ธฐ ์ํด ๊ณต๊ฒฉ์๋ "/static../.secret_key" ๋ฐ "/static../db.sqlite3" ์ฟผ๋ฆฌ๋ฅผ ๋ณด๋ผ ์ ์์ต๋๋ค.
์ถ์ฒ : opennet.ru