๐Ÿšช Intro

์ทจ์•ฝ์  ๋ฐ CVE ํš๋“์„ ์œ„ํ•ด ๋ถ„์„ํ•˜๊ณ  ์žˆ๋Š” ํ”„๋กœ์ ํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

file upload๋ฅผ ํ†ตํ•œ webshell ํš๋“ ๊ณผ์ •์„ ์ •๋ฆฌํ•˜๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.

 

๐Ÿ’ก Analysis

๋ถ„์„ํ•˜๋ ค๋Š” ์›น ์‚ฌ์ดํŠธ์—๋Š” ์—…๋กœ๋“œ ๊ธฐ๋Šฅ์ด ์กด์žฌ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋งŒ ico, webp, svg ํ™•์žฅ์ž๋งŒ ์—…๋กœ๋“œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด์„œ ์˜๋ฌธ์ ์ด ์ƒ๊ธฐ๋”๋ผ๊ตฌ์š”.

 

๋ณดํ†ต ํŒŒ์ผ ์—…๋กœ๋“œ ๊ด€๋ จ ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค ๋•Œ, ํ™•์žฅ์ž ๊ฒ€์ฆ์€ .(dot) ์„ ๊ธฐ์ค€์œผ๋กœ ๋ฌธ์ž์—ด์„ ๋‚˜๋ˆ„์–ด ๋งจ ๋งˆ์ง€๋ง‰ ๊ฐ’์„ ํ™•์žฅ์ž๋กœ ํŒ๋‹จ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์ถ”์ถœ๋œ ํ™•์žฅ์ž๋กœ ์—…๋กœ๋“œ ํ•  ํŒŒ์ผ์„ ํ•„ํ„ฐ๋ง ํ•˜๊ฒŒ ๋˜์ฃ .

 

ํ•˜์ง€๋งŒ, ์œ„ ์ฝ”๋“œ๋Š” `strpos()` ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—…๋กœ๋“œ ํŒŒ์ผ์˜ ํ™•์žฅ์ž๋ฅผ ๊ฒ€์‚ฌํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ํ•จ์ˆ˜๋Š” ๋ฌธ์ž์—ด์˜ ์œ„์น˜๋ฅผ int ๋กœ ๋ฆฌํ„ดํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด, ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

๋‹ค์‹œ ๋Œ์•„์™€์„œ ๋ฌธ์ œ์˜ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด, if๋ฌธ์œผ๋กœ `strpos()` ํ•จ์ˆ˜์˜ ๋ฆฌํ„ด ๊ฐ’์ด `false` ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ์—…๋กœ๋“œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฆ‰, `$filename` ๋ณ€์ˆ˜์— `simple.svg` ๊ฐ€ ์•„๋‹ˆ๋ผ `simple.svg.php` ๋ผ๊ณ  ์—…๋กœ๋“œ ํ•˜๋ฉด, if ๋ฌธ์„ bypass ํ•  ์ˆ˜ ์žˆ๊ฒ ๋„ค์š”.

 

์ตœ์ข…์ ์œผ๋กœ ์•„๋ž˜ ์‚ฌ์ง„์ฒ˜๋Ÿผ webshell ์„ ์—…๋กœ๋“œ ํ•˜์—ฌ, ์‹œ์Šคํ…œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.