๋ถ์ ์ผ๊ธฐ - file upload ์ทจ์ฝ์
๐ช Intro
์ทจ์ฝ์ ๋ฐ CVE ํ๋์ ์ํด ๋ถ์ํ๊ณ ์๋ ํ๋ก์ ํธ๊ฐ ์์ต๋๋ค.
file upload๋ฅผ ํตํ webshell ํ๋ ๊ณผ์ ์ ์ ๋ฆฌํ๊ณ ์ ํฉ๋๋ค.
๐ก Analysis
๋ถ์ํ๋ ค๋ ์น ์ฌ์ดํธ์๋ ์ ๋ก๋ ๊ธฐ๋ฅ์ด ์กด์ฌ ํฉ๋๋ค. ๋ค๋ง ico, webp, svg ํ์ฅ์๋ง ์ ๋ก๋ ํ ์ ์์ต๋๋ค.
๊ทธ๋ฐ๋ฐ ์๋ ์ฝ๋๋ฅผ ๋ณด๋ฉด์ ์๋ฌธ์ ์ด ์๊ธฐ๋๋ผ๊ตฌ์.
๋ณดํต ํ์ผ ์ ๋ก๋ ๊ด๋ จ ๊ธฐ๋ฅ์ ๋ง๋ค ๋, ํ์ฅ์ ๊ฒ์ฆ์ .(dot) ์ ๊ธฐ์ค์ผ๋ก ๋ฌธ์์ด์ ๋๋์ด ๋งจ ๋ง์ง๋ง ๊ฐ์ ํ์ฅ์๋ก ํ๋จ ํฉ๋๋ค. ์ด๋ ๊ฒ ์ถ์ถ๋ ํ์ฅ์๋ก ์ ๋ก๋ ํ ํ์ผ์ ํํฐ๋ง ํ๊ฒ ๋์ฃ .
ํ์ง๋ง, ์ ์ฝ๋๋ `strpos()` ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ ๋ก๋ ํ์ผ์ ํ์ฅ์๋ฅผ ๊ฒ์ฌํ๊ณ ์์ต๋๋ค.
์ด ํจ์๋ ๋ฌธ์์ด์ ์์น๋ฅผ int ๋ก ๋ฆฌํดํฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด, ์๋์ ๊ฐ์ต๋๋ค.
๋ค์ ๋์์์ ๋ฌธ์ ์ ์ฝ๋๋ฅผ ๋ณด๋ฉด, if๋ฌธ์ผ๋ก `strpos()` ํจ์์ ๋ฆฌํด ๊ฐ์ด `false` ๊ฐ ์๋๋ผ๋ฉด ์ ๋ก๋ ํ ์ ์์ต๋๋ค.
์ฆ, `$filename` ๋ณ์์ `simple.svg` ๊ฐ ์๋๋ผ `simple.svg.php` ๋ผ๊ณ ์ ๋ก๋ ํ๋ฉด, if ๋ฌธ์ bypass ํ ์ ์๊ฒ ๋ค์.
์ต์ข ์ ์ผ๋ก ์๋ ์ฌ์ง์ฒ๋ผ webshell ์ ์ ๋ก๋ ํ์ฌ, ์์คํ ๋ช ๋ น์ด๋ฅผ ์คํํ ์ ์๊ฒ ๋์์ต๋๋ค.
'Security' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ถ์ ์ผ๊ธฐ] - EJS, Server Side Template Injection to RCE (CVE-2022-29078) (4) | 2022.07.21 |
---|---|
Node.js querystring ํจ์ ๋ถ์๊ณผ bug ์ค๋ช (0) | 2022.07.09 |
๋ถ์ ์ผ๊ธฐ - php dynamic variable (0) | 2022.04.03 |
Foobar CTF 2022 writeup (0) | 2022.03.06 |
nodejs express routing case sensitive options (0) | 2022.03.06 |
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote
๋ค๋ฅธ ๊ธ
-
[๋ถ์ ์ผ๊ธฐ] - EJS, Server Side Template Injection to RCE (CVE-2022-29078)
[๋ถ์ ์ผ๊ธฐ] - EJS, Server Side Template Injection to RCE (CVE-2022-29078)
2022.07.21 -
Node.js querystring ํจ์ ๋ถ์๊ณผ bug ์ค๋ช
Node.js querystring ํจ์ ๋ถ์๊ณผ bug ์ค๋ช
2022.07.09 -
๋ถ์ ์ผ๊ธฐ - php dynamic variable
๋ถ์ ์ผ๊ธฐ - php dynamic variable
2022.04.03 -
Foobar CTF 2022 writeup
Foobar CTF 2022 writeup
2022.03.06