9์›” 2์ฃผ์ฐจ ํ•ดํ‚น ์•Œ๋ ค์ค„๊ฒŒ : Path Traversal


ํ•ดํ‚น ์•Œ๋ ค์ค„๊ฒŒ
6ํ™”: Path Traversal

๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์šฐ๋ฆฌ ์ง‘์„ ๋งˆ์Œ๋Œ€๋กœ ๋Œ์•„๋‹ค๋‹ ์ˆ˜ ์žˆ๋‹ค๋ฉด ์–ด๋–จ๊นŒ์š”? ๋งˆ๊ตฌ ํ—ค์ง‘์–ด๋†“์•„ ์—‰๋ง์ด ๋  ์ˆ˜๋„ ์žˆ๊ณ , ๊ท€์ค‘ํ’ˆ์ด ์—†์–ด์งˆ ์ˆ˜๋„ ์žˆ๊ณ  ์ •๋ง ์šด์ด ๋‚˜์˜๋ฉด ํญํƒ„์„ ๋‘๊ณ  ๊ฐˆ์ง€๋„ ๋ชจ๋ฅด๋Š” ์ผ์ด์ฃ  ๐Ÿ˜ข
์ด๋ฒˆ ์ฃผ์— ์•Œ์•„๋ณผ ์ทจ์•ฝ์ ์€ ๋ฐ”๋กœ Logical Bug์ธ Path Traversal๋กœ, Directory Traversal์ด๋ผ๊ณ ๋„ ๋ถˆ๋ฆฌ๋Š” ์›น ์ทจ์•ฝ์ ์ด์—์š”! ์šฐ๋ฆฌ ์›น ์ทจ์•ฝ์ ์€ ์ฒ˜์Œ์ด๋„ค์š” ๐Ÿ™‚

Path Traversal ์ด์ „์—.. Logical Bug๋Š” ๋ญ”๋ฐ์š”? ๐Ÿ˜–
Stack Buffer Overflow๋ฅผ ๊ณต๋ถ€ํ•  ๋•Œ ํ• ๋‹น๋œ ํฌ๊ธฐ์˜ ๋ฒ„ํผ๋ณด๋‹ค ํฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ•ด ๋ฉ”๋ชจ๋ฆฌ์˜ ๋‹ค๋ฅธ ์˜์—ญ์„ ์นจ๋ฒ”ํ•ด ์˜ค์—ผ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋˜ ๊ฒƒ์„ ๊ธฐ์–ตํ•˜์‹œ๋‚˜์š”? ๐Ÿฅบ
์ด์ฒ˜๋Ÿผ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์˜ค์—ผ์‹œํ‚ค๋Š” ์ทจ์•ฝ์  ์ข…๋ฅ˜๋ฅผ Memory Corruption ์ทจ์•ฝ์ ์ด๋ผ๊ณ  ํ•ด์š”.
๋ฐ˜๋ฉด์— Logical Bug๋Š” ๋ฉ”๋ชจ๋ฆฌ ์กฐ์ž‘ ์—†์ด ํ”„๋กœ๊ทธ๋žจ์˜ ๋…ผ๋ฆฌ์ ์ธ ํ๋ฆ„์— ๋Œ€ํ•œ ์˜ค๋ฅ˜๋ฅผ ์ด์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•œ ์˜ˆ์‹œ๋กœ ์‚ดํŽด๋ณผ๊ฒŒ์š”.

Logical_bug.c ์ฝ”๋“œ๋Š” ์‚ฌ์šฉํ•  ์ฟ ํฐ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ž…๋ ฅํ•ด ๊ฒฐ์ œ ๊ธˆ์•ก์„ discount() ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ž…๋ ฅํ•œ ์ฟ ํฐ ์ˆ˜๋งŒํผ 10,000์›์”ฉ ํ• ์ธํ•œ ๊ธˆ์•ก์„ ์ถœ๋ ฅํ•˜๊ณ  ์žˆ๋„ค์š”. ๊ฒฐ์ œ ๊ธˆ์•ก์€ 50,000์›์ด๊ณ , ์ฟ ํฐ์€ 3์žฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์š”.
์–ด๋–ค ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์„๊นŒ์š”? ๐Ÿค”
๊ฐ€์žฅ ํฐ ๋ฌธ์ œ์ ์€ ํ˜„์žฌ 3์žฅ์˜ ์ฟ ํฐ์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉด์„œ '๋‚˜ ์ฟ ํฐ 10์žฅ ์“ธ๋ž˜!!' ๋ผ๊ณ  ํ•˜๋ฉด ๋ง‰์„ ์ˆ˜๊ฐ€ ์—†๋Š” ๊ฑฐ์—์š”.๐Ÿ˜ฑ coupon_to_use์— 10์„ ์ž…๋ ฅํ•˜๋ฉด ๊ฒฐ๊ณผ์ ์œผ๋กœ ์ตœ์ข… ๊ฒฐ์ œ ๊ธˆ์•ก์ด ์˜คํžˆ๋ ค -50000๊ฐ€ ๋˜๋„ค์š”.

Logical Bug๊ฐ€ ๋ญ”์ง€ ๊ฐ์„ ์žก์œผ์…จ๋‚˜์š”? ๐Ÿ˜‰

ํŒŒ์ผ์˜ ๊ฒฝ๋กœ๋Š” ์–ด๋–ป๊ฒŒ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‚˜์š”?
Path Traversal์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์„ค๋ช…ํ•˜๊ธฐ ์ „์— ์—ฌ๊ธฐ์„œ ๋งํ•˜๋Š” Path์ธ ๊ฒฝ๋กœ์— ๋Œ€ํ•ด์„œ ์ž ๊น ์–˜๊ธฐํ•ด์š”! 
ํŒŒ์ผ์˜ ๊ฒฝ๋กœ๋Š” ์ ˆ๋Œ€๊ฒฝ๋กœ์™€ ์ƒ๋Œ€๊ฒฝ๋กœ๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ ˆ๋Œ€๊ฒฝ๋กœ๋Š” ๋ง ๊ทธ๋Œ€๋กœ ์ ˆ๋Œ€์ ์ธ ์œ„์น˜!! ํŒŒ์ผ์˜ ๊ณ ์œ ํ•œ ๊ฒฝ๋กœ์ด๋ฉฐ, ์ตœ์ƒ์œ„ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ๋ถ€ํ„ฐ ํ•ด๋‹น ํŒŒ์ผ๊นŒ์ง€ ๊ฑฐ์นœ ๊ฒฝ๋กœ๋ฅผ ๋ชจ๋‘ ํ‘œ๊ธฐํ•˜๋Š” ๋ฐฉ์‹์ด์—์š”. C:\\Program Files (x86)\\Kakao\\KakaoTalk ์ฒ˜๋Ÿผ ์ ˆ๋Œ€๊ฒฝ๋กœ๋ฅผ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค.
์ƒ๋Œ€๊ฒฝ๋กœ๋Š” ํ˜„์žฌ ์œ„์น˜ํ•œ ๊ณณ์„ ๊ธฐ์ค€์œผ๋กœ ์›ํ•˜๋Š” ํŒŒ์ผ์˜ ์œ„์น˜๋ฅผ ๋‚˜ํƒ€๋‚ธ ๊ฑฐ์—์š”. ํ˜„์žฌ C:\\Program Files (x86)\\Microsoft\\Edge์— ์žˆ๋‹ค๋ฉด KakaoTalk ํŒŒ์ผ๊นŒ์ง€์˜ ๊ฒฝ๋กœ๋Š” ํ˜„์žฌ ์œ„์น˜์˜ ์ƒ๋‹จ ํด๋”๋ฅผ ์˜๋ฏธํ•˜๋Š” ../๋ฅผ ์‚ฌ์šฉํ•ด์„œ ../../Kakao/kakaoTalk์œผ๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๊ฒ ๋„ค์š”! ์ฐธ๊ณ ๋กœ ์ตœ์ƒ์œ„ ๋””๋ ‰ํ† ๋ฆฌ๋Š” /, ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ๋Š” ./๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์‹ค์ƒํ™œ์—์„œ ์˜ˆ์‹œ๋ฅผ ๋“ค์–ด๋ณผ๊ฒŒ์š”. ๐Ÿ™‚  ์šฐ๋ฆฌ๊ฐ€ ๋กฏ๋ฐ์›”๋“œ์˜ ์œ„์น˜๋ฅผ ๋งํ•  ๋•Œ "๋กฏ๋ฐ์›”๋“œ๋Š” ๋Œ€ํ•œ๋ฏผ๊ตญ ์„œ์šธ์‹œ ์†กํŒŒ๊ตฌ ์ž ์‹ค๋™ ์˜ฌ๋ฆผํ”ฝ๋กœ 240์— ์žˆ์–ด!"๋ผ๊ณ  ๋งํ•œ ๊ฒƒ์ด ์ ˆ๋Œ€๊ฒฝ๋กœ, "๋กฏ๋ฐ์›”๋“œ๋Š” ์—ฌ๊ธฐ์„œ 2ํ˜ธ์„  ํƒ€๊ณ  ์ž ์‹ค์—ญ์— ๋‚ด๋ ค์„œ 4๋ฒˆ ์ถœ๊ตฌ๋กœ ๋‚˜๊ฐ€๋ฉด ์žˆ์–ด"๋ผ๊ณ  ๋งํ•œ ๊ฒƒ์ด ์ƒ๋Œ€๊ฒฝ๋กœ์ž…๋‹ˆ๋‹ค.
์ด์ œ Path๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์•Œ์•˜์œผ๋‹ˆ ๋ณธ๊ฒฉ์ ์œผ๋กœ Path Traversal์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค!

๊ทธ๋Ÿผ ์ด์ œ Path Traversal ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”!
๋“œ๋””์–ด ์ทจ์•ฝ์ ์„ ์„ค๋ช…ํ•  ์ฐจ๋ก€๋„ค์š”!
Path Traversal ์ทจ์•ฝ์ ์€ ํŒŒ์ผ์˜ ๊ฒฝ๋กœ๋ฅผ ์กฐ์ž‘ํ•˜์—ฌ, ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ์„œ๋ฒ„ ๋‚ด์˜ ์ž„์˜์˜ ํŒŒ์ผ์„ ์ฝ๊ณ , ์“ธ ์ˆ˜ ์žˆ๋Š” arbitary file read, arbitary file write๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์–ด์š”. ์‹ฌ์ง€์–ด๋Š” ๋ฐ์ดํ„ฐ ๋˜๋Š” ๋™์ž‘์„ ์ˆ˜์ •ํ•˜๊ณ  ์„œ๋ฒ„๋ฅผ ์™„์ „ํžˆ ์ œ์–ด ํ•  ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค. ๐Ÿ˜ฑ

์ด๋ฏธ์ง€๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ์›น ์‚ฌ์ดํŠธ๋ฅผ ์ƒ๊ฐํ•ด๋ณผ๊นŒ์š”?
์ด๋ฏธ์ง€๋Š” <img src = "/loadImage?filename=hackyboiz.png"> ๊ฐ™์€ html ์ฝ”๋“œ๋กœ ์˜ฌ๋ผ๊ฐˆ ๊ฑฐ์—์š”. ๊ทธ๋ฆฌ๊ณ  ์ด๋ฏธ์ง€ ์ž์ฒด๋Š” /var/www/images ์— ์ €์žฅ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์š”์ฒญ๋œ ํŒŒ์ผ ์ด๋ฆ„์„ ๋’ค์— ์ถ”๊ฐ€ํ•œ /var/www/images/hackyboiz.png ์—์„œ ์ด๋ฏธ์ง€๋ฅผ ๊ฐ€์ ธ์™€ ๋ณผ ์ˆ˜ ์žˆ์–ด์š”.
๋งŒ์•ฝ https://pathtraversal.com/loadImage?filename=../../../etc/passwd๋ผ๊ณ  ์š”์ฒญ์„ ํ•˜๋ฉด /var/www/images/../../../etc/passwd์„ ์ฝ์„๊ฑฐ์—์š”. ์—ฌ๊ธฐ์„œ ../๋Š” ํ˜„์žฌ ์œ„์น˜์˜ ์ƒ๋‹จ ํด๋”๋ฅผ ์˜๋ฏธํ•˜๋ฏ€๋กœ ๊ฒฐ๊ตญ /var/www/images/../../../๋กœ ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ๊นŒ์ง€ ์˜ฌ๋ผ๊ฐ€๊ณ  /etc/passwd๋ฅผ ์ฝ์–ด๋ฒ„๋ฆฌ๋Š” ๊ฑฐ์ฃ . ๐Ÿ˜ฑ

์ •๋ง๋กœ passwdํŒŒ์ผ๊นŒ์ง€ ์ฝ์„ ์ˆ˜ ์žˆ์„๊นŒ์š”?? ์ง„์งœ๋กœ?
๋ฏฟ๊ธฐ ํž˜๋“ค๊นŒ ๋ด ์ž‘๋…„์— ์ œ๋ณด๋œ GitLab Path Traversal ์ทจ์•ฝ์ (CVE-2020-10977)์„ ๊ฐ„๋‹จํžˆ ์†Œ๊ฐœํ•ด์ค„๊ฒŒ์š”. ๐Ÿ˜‰
GitLab์—์„œ ์ด์Šˆ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ๋Š” ๋งˆํฌ๋‹ค์šด์„ ์ด์šฉํ•ด์„œ ![file_name](./file_path) ํ˜•์‹์œผ๋กœ ํŒŒ์ผ์— ๋Œ€ํ•œ ๋งํฌ๋ฅผ ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ์–ด์š”. ํ•˜์ง€๋งŒ ํŒŒ์ผ ์ด๋ฆ„์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•˜์ง€ ์•Š์•„ ์ด์Šˆ๋ฅผ ์ƒˆ ํ”„๋กœ์ ํŠธ๋กœ ์ด๋™ํ•  ๋•Œ ๋””๋ ‰ํ† ๋ฆฌ ํƒ์ƒ‰์„ ํ†ตํ•ด ์ž„์˜์˜ ํŒŒ์ผ์„ ๋ณต์‚ฌ ํ•  ์ˆ˜ ์žˆ๋Š” ์ทจ์•ฝ์ ์ด ๋ฐœ๊ฒฌ๋˜์—ˆ๋‹ต๋‹ˆ๋‹ค.

์ด๊ฒŒ ๋ฌธ์ œ์˜ ์ฝ”๋“œ์˜€๋Š”๋ฐ์š”, ๋‹ค ์ดํ•ด ๋ชป ํ•ด๋„ ๊ดœ์ฐฎ์•„์š”!๐Ÿ‘Œ๐Ÿป  find_file() ํ•จ์ˆ˜์—์„œ ๋ฌด์Šจ ํŒŒ์ผ์„ ์ฐพ๋Š”์ง€์— ๋Œ€ํ•œ ์ œํ•œ๊ณผ ํ•„ํ„ฐ๋ง์ด ์—†์œผ๋ฏ€๋กœ Path Traversal์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“  ํŒŒ์ผ์„ ๋ณต์‚ฌ ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค๋Š” ๊ฒƒ๋งŒ ์ดํ•ดํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
ํ•ด๋‹น ์ทจ์•ฝ์ ์˜ ์ œ๋ณด์ž๋Š” ![a](/uploads/11111111111111111111111111111111/../../../../../../../../../../../../../etc/passwd) ๋กœ ์ด์Šˆ๋ฅผ ๋งŒ๋“ค์–ด passwd ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•˜๋Š”๋ฐ ์„ฑ๊ณตํ–ˆ๋‹ต๋‹ˆ๋‹ค.
๊ฐ„๋‹จํ•ด ๋ณด์ด๋‚˜์š”? ๐Ÿคจ  ํ•˜์ง€๋งŒ ์ด ์ œ๋ณด๋Š” $20,000์ด๋‚˜ ๋ฐ›์•˜๋‹ต๋‹ˆ๋‹ค. ๐Ÿ’ธ ๐Ÿ’ธ  ๊ณต๊ฒฉ์„ ๋™์˜์ƒ์œผ๋กœ ์ง์ ‘ ๋ณด๊ณ  ์‹ถ์œผ๋ฉด ์˜์ƒ์„ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”!

์ด ์ทจ์•ฝ์ ์œผ๋กœ GitLab์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด GitLab::Utils.check_path_traversal ์œผ๋กœ ๊ฒ€์‚ฌํ•˜๋Š” ๊ณผ์ •์„ ์ถ”๊ฐ€ํ•จ์œผ๋กœ์จ ํŒจ์น˜ํ–ˆ์Šต๋‹ˆ๋‹ค.


์–ด๋–ป๊ฒŒ Path Traversal์„ ๊ฒ€์‚ฌํ•ด์•ผ ํ• ๊นŒ์š”?
์—ญ์‹œ ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์ด ํŒŒ์ผ ์‹œ์Šคํ…œ API๋กœ ์ „์†ก๋˜์ง€ ์•Š๊ฒŒ ํ•˜๋Š” ๊ฑฐ์ฃ . ํ•˜์ง€๋งŒ ๊ผญ ์ „์†ก๋˜์•ผ ํ•œ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ์š”?
๊ฐ„๋‹จํžˆ ../๋ฅผ ํ•„ํ„ฐ๋งํ•˜๊ฑฐ๋‚˜ .png, .txt ๋“ฑ ํ™•์žฅ์ž๊ฐ€ ๊ผญ ๋ถ™์–ด์•ผ ๋œ๋‹ค๋Š” ์กฐ๊ฑด์œผ๋กœ Path Traversal์„ ํ”ผํ•  ์ˆ˜ ์žˆ์„๊นŒ์š”?
์•„์‰ฝ๊ฒŒ๋„ ../๋Š” ์—ฌ๋Ÿฌ ์ธ์ฝ”๋”ฉ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•ด ํ•„ํ„ฐ๋ง์„ ์šฐํšŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ..%252f, ..%c0%af์‹์œผ๋กœ์š”. ๊ทธ๋ฆฌ๊ณ  .png๊ฐ€ ๊ผญ ๋ถ™์–ด์•ผ ํ•œ๋‹ค๋ฉด filename=../../../etc/passwd%00.png์ฒ˜๋Ÿผ Null byte์ธ %00์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ๊ฒ ๋„ค์š”.
๊ทธ๋Ÿผ ์ด๋ ‡๊ฒŒ Path Traversal์„ ๋ง‰์•„๋ด์š”!
์ฒซ ๋ฒˆ์งธ๋กœ ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์ „์— ๊ผญ ๊ฒ€์ฆ์„ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ—ˆ์šฉ๋œ ๊ฐ’๋งŒ ๋ฐ›๋Š” ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ์™€ ๋น„๊ตํ•˜๋ฉด ์ข‹๊ณ , ์•„๋‹ˆ๋ผ๋ฉด ์˜๋ฌธ์ž์™€ ์ˆซ์ž๋งŒ ํ—ˆ์šฉํ•ด์š”.
๋‘ ๋ฒˆ์งธ๋Š” ์ œ๊ณต๋œ ์ž…๋ ฅ์„ ๊ฒ€์ฆํ•œ ๋’ค, ์ž…๋ ฅ์„ ๊ธฐ๋ณธ ๋””๋ ‰ํ† ๋ฆฌ์— ์ถ”๊ฐ€ํ•˜๊ณ  ํŒŒ์ผ ์‹œ์Šคํ…œ์˜ API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒฝ๋กœ๋ฅผ ์ •๊ทœํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฒˆ ์ฃผ์˜ ํ•ดํ‚น ๊ฐ€๋ฅด์ณ์ค„๊ฒŒ๋Š” ์—ฌ๊ธฐ๊นŒ์ง€! ๐Ÿ˜€ 
์˜ค๋Š˜ ์ „ํ•ด๋“œ๋ฆฐ ๋‚ด์šฉ์ด ๋งˆ์Œ์— ๋“œ์…จ๋‚˜์š”?
์ฃผ์œ„ ์นœ๊ตฌ๋“ค์—๊ฒŒ ๋‰ด์Šค๋ ˆํ„ฐ๋ฅผ ์ถ”์ฒœํ•ด์ฃผ์„ธ์š”!
๋‹ค์Œ์ฃผ์—๋„ ์•Œ์ฐฌ ๋‚ด์šฉ์œผ๋กœ ๋Œ์•„์˜ค๊ฒ ์Šต๋‹ˆ๋‹ค. ๐Ÿ˜™
ํ˜น์‹œ ๋งˆ์Œ์— ์•ˆ๋“œ๋Š” ๋ถ€๋ถ„์ด ์žˆ์—ˆ๋‚˜์š”? ์—ฌ๊ธฐ์—์„œ ํ”ผ๋“œ๋ฐฑ์„ ์ „๋‹ฌํ•ด์ฃผ์„ธ์š”!
์—ฌ๋Ÿฌ๋ถ„์˜ ์˜๊ฒฌ๋“ค์„ ์ ๊ทน ๋ฐ˜์˜ํ•ด์„œ ๋”์šฑ ์œ ์ตํ•œ ๋‰ด์Šค๋ ˆํ„ฐ๋ฅผ ๋งŒ๋“ค์–ด๊ฐ€๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๐Ÿ˜ƒ
Hackyboiz
hackyboizteam@gmail.com
์„œ์šธ์‹œ ๊ด‘์ง„๊ตฌ ๊ตฐ์ž๋™ 134-33 3์ธต
์ˆ˜์‹ ๊ฑฐ๋ถ€ Unsubscribe