๋ถ์ ์ผ๊ธฐ - php dynamic variable
๐ช Intro
์ทจ์ฝ์ ์ ์ฐพ๊ธฐ ์ํด ๋ถ์ํ๊ณ ์๋ ์คํ์์ค ์น ์๋น์ค๊ฐ ์์ต๋๋ค.
๋ฉฐ์น ๋์ ์ฝ์ง์ ํตํด ๋ฐ๊ฒฌํ ์ทจ์ฝ์ (?)์ ๊ธฐ๋ก ๋ฐ ์ ๋ฆฌํ๊ณ ์ ํฉ๋๋ค.
๐ก Analysis
ํด๋น ์ทจ์ฝ์ ์ ์น ๊ด๋ฆฌ์๋ง ์ ๊ทผ ๊ฐ๋ฅํ๋ฉฐ, php dynamic variable ์ ํตํด ๋ค๋ฅธ ๋ณ์์ ๊ฐ์ overwrite ํ์ฌ Stored XSS๋ฅผ ๋์ ์ํฌ ์ ์์ต๋๋ค.
๊ด๋ฆฌ์ ํ์ด์ง์๋ ์๋ ์ฌ์ง์ฒ๋ผ ์ด๋ค ๋ฒ์๋ฅผ ์ง์ ํด ์ค ์ ์์ต๋๋ค.
ํ์ง๋ง, ํด๋น ์์ค ์ฝ๋๋ฅผ ๋ถ์ํด ๋ณธ ๊ฒฐ๊ณผ, ์ซ์ ์ฌ๋ถ๋ฅผ ํ์ธํ์ง ์๊ณ ์์์ต๋๋ค.
์ ์ฌ์ง์์ 100 ์ด๋ผ๋ ๊ฐ์ ์๋ ์ฌ์ง 56๋ฒ์งธ ์ค์ธ `$mb_id1_to` ๋ณ์์ ์ ์ฅ๋์ด ์์ต๋๋ค.
๊ฐ๊ฐ์ ๊ฐ์ `$ma_last_option` ๋ณ์์ ์ด์ด ๋ถ์ด๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
์ต์ข ์ ์ผ๋ก `$ma_last_option` ๋ณ์์ ๊ฐ์ DB์ ๋ค์๊ณผ ๊ฐ์ด ์ ์ฅ ๋ฉ๋๋ค.
mb_id1=1||mb_id1_from=1||mb_id1_to=100||mb_email=admin@domain.com||mb_mailling=1||mb_level_from=1||mb_level_to=10||gr_id=
์์์ ์ ์ฅ๋ ๊ฐ์ ๋ถ๋ฌ์ค๋ ๊ณผ์ ์ ์๋ ์ฝ๋์ ๊ฐ์ต๋๋ค.
27๋ฒ์งธ ์ค์์ `||` ๋ฌธ์์ด์ ๊ธฐ์ค์ผ๋ก ๋๋๋๋ค.
์ดํ for๋ฌธ์ ํตํด ํ๋ฒ ๋ `=` ๋ฌธ์์ด์ ๊ธฐ์ค์ผ๋ก ๋๋๋๋ค. ์ด๋ key์ value ๋ฅผ ๋๋๊ธฐ ์ํจ ์ ๋๋ค.
31๋ฒ์งธ ์ค์์ key๋ฅผ `$var` ๋ณ์์ ์ ์ฅํ๊ณ value ๊ฐ์ด ์๋ค๋ฉด, `Dynamic variable` ์ ์ฌ์ฉํ์ฌ `$$var` ๋ณ์์ value๋ฅผ ์ ์ฅํฉ๋๋ค.
์ ๊ณผ์ ์ ๋ณด๋ฉด ์ด๋์๋ `||` ๋ผ๋ ๋ฌธ์์ด์ ํํฐ๋ง ํ๋ ์ฝ๋๋ ์์์ต๋๋ค.
๋ฐ๋ผ์ ๊ณต๊ฒฉ์๋ [๊ทธ๋ฆผ 1]์์ `||` ๋ฌธ์์ด๊ณผ overwrite ํ ๋ณ์ ์ด๋ฆ๊ณผ ๊ฐ์ ๋ฃ์ผ๋ฉด ๊ฒฝ์ฐ์ ๋ฐ๋ผ ์ฝ๋ ํ๋ฆ์ ๋ฐ๊ฟ ์ ์์ต๋๋ค.
SQLI ๋ฅผ ์๋ํ๋ ค๊ณ ํ์ผ๋, overwrite ํ ๋ณ์๊ฐ ๋ง๋ ํ ์์์ต๋๋ค. ์์ฌ์ด๋๋ก ์๋ ์ฝ๋์ ์๋ `$ma_id` ๋ณ์๋ฅผ ํ๊ฒ์ผ๋ก ์ ํด overwrite ํ๋ ๋ฐฉ๋ฒ์ ์ ์ด๋ณด๋ ค๊ณ ํฉ๋๋ค.
๐ฉ PoC
์์์ ์ค๋ช ํ๋ฏ์ด [๊ทธ๋ฆผ 1]์์ ๊ณต๊ฒฉ์ ํ๋ ค๊ณ ํฉ๋๋ค. ์๋ ์ฌ์ง ์ฒ๋ผ ์ ๋ ฅํฉ๋๋ค.
๊ทธ๋ผ [๊ทธ๋ฆผ 2]์ `$ma_last_option` ๋ณ์์๋ ๋ค์๊ณผ ๊ฐ์ ๊ฐ์ด ์ ์ฅ๋ฉ๋๋ค.
์๋ ์ฝ๋์ฒ๋ผ `||` ๋ฌธ์์ด๊ณผ `=` ๋ฌธ์์ด๋ก ๋ถ๋ฆฌ ์ํค๊ณ , ์ด๋ฅผ 32๋ฒ์งธ ์ค์์ `$ma_id` ๋ณ์ ๊ฐ์ด `"><script>alert(1)</script>` ๋ก overwrite ๋ฉ๋๋ค.
๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด XSS๊ฐ ๋์ํ๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
๐ ETC
XSS ๋ณด๋ค ์ข ๋ ๊ฐ๋ ฅํ(?) ๊ฒ์ ์ฐพ์๋ณด๋ ค๊ณ ํ์ผ๋, ์ ์ทจ์ฝ์ ์ผ๋ก ํ ์ ์๋๊ฒ ์๋ค์..
๋ํ ๊ด๋ฆฌ์ ํ์ด์ง์์๋ง ๋๋๊ฑฐ๋ผ ๋ถ์ ํ ํธ๋ฆฌ๊ฑฐ ํ ๊ฒ์ ๋ง์กฑํด์ผ ๊ฒ ๋ค์.
'Security' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Node.js querystring ํจ์ ๋ถ์๊ณผ bug ์ค๋ช (0) | 2022.07.09 |
---|---|
๋ถ์ ์ผ๊ธฐ - file upload ์ทจ์ฝ์ (0) | 2022.05.12 |
Foobar CTF 2022 writeup (0) | 2022.03.06 |
nodejs express routing case sensitive options (0) | 2022.03.06 |
java URL class๋ฅผ ์ด์ฉํ ๋ด๋ถ ํ์ผ ์ฝ๊ธฐ (0) | 2022.03.02 |
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote
๋ค๋ฅธ ๊ธ
-
Node.js querystring ํจ์ ๋ถ์๊ณผ bug ์ค๋ช
Node.js querystring ํจ์ ๋ถ์๊ณผ bug ์ค๋ช
2022.07.09 -
๋ถ์ ์ผ๊ธฐ - file upload ์ทจ์ฝ์
๋ถ์ ์ผ๊ธฐ - file upload ์ทจ์ฝ์
2022.05.12 -
Foobar CTF 2022 writeup
Foobar CTF 2022 writeup
2022.03.06 -
nodejs express routing case sensitive options
nodejs express routing case sensitive options
2022.03.06