Path Traversal [2]

DATE : 2023/10/29

์•ž์„  Path Traversal [1]์—์„œ ์‚ดํŽด๋ณธ ๋‚ด์šฉ์€ Path traversal์ด ๋ฌด์—‡์ธ์ง€,

์•„๋ฌด๋Ÿฐ ์กฐ์น˜๋„ ์ทจํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ traversal sequence๊ฐ€ ์–ด๋–ค ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ์ง€์— ๋Œ€ํ•ด

๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ดํŽด๋ณด์•˜๋‹ค.

์ด๋ฒˆ์— ์‚ดํŽด๋ณผ ๋‚ด์šฉ์€ traversal sequence๋ฅผ ์ฐจ๋‹จํ•˜๊ธฐ ์œ„ํ•œ ์–ด๋–ค ๊ณผ์ •์ด ์ถ”๊ฐ€๋˜์—ˆ์ง€๋งŒ

์ด๋ฅผ ์šฐํšŒํ•˜์—ฌ ์›ํ•˜๋Š” ๊ฒฐ๊ณผ(/etc/passwd)๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Œ์„ ํ™•์ธํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค.

[ LAB 1 ]

์ฒซ ๋ฒˆ์งธ๋กœ ์‚ดํŽด๋ณผ Lab์€ traversal sequence๋ฅผ strip ํ•ด๋ฒ„๋ฆฐ๋‹ค๊ณ  ํ•œ๋‹ค.

์—ฌ๊ธฐ์„œ strip์€ ์—†์• ๊ณ ์ž ํ•˜๋Š” ๊ฐ’์„ ๋ฐœ๊ฒฌํ–ˆ์„ ๋•Œ ์ œ๊ฑฐํ•œ๋‹ค๋Š” ์˜๋ฏธ๋กœ ๋ณด๋ฉด ๋œ๋‹ค.

๋งˆ์Œ์— ๋“œ๋Š” ์ƒํ’ˆ ํ•˜๋‚˜๋ฅผ ๊ณจ๋ผ์„œ ํด๋ฆญํ•˜๋ฉด ์ด 2๊ฐœ์˜ packet์ด ์ง€๋‚˜๊ฐ€๋Š” ๊ฑธ ๋ณผ ์ˆ˜ ์žˆ๋Š”๋ฐ

์ฒซ ๋ฒˆ์งธ packet์€ productID parameter๋ฅผ ๋ณด๋‚ด๋Š” Get request์ด๊ณ 

๋‘ ๋ฒˆ์งธ packet์€ filename parameter๋กœ ์‚ฌ์šฉํ•  ์ด๋ฏธ์ง€ ํŒŒ์ผ๋ช…์„ ๋ณด๋‚ธ๋‹ค.

์—ฌ๊ธฐ์„œ ์šฐ๋ฆฌ๋Š” ๋‘ ๋ฒˆ์งธ packet์„ ํ™œ์šฉํ•  ๊ฒƒ์ด๋‹ค.

์ด์ „ LAB์—์„œ ํ–ˆ๋˜ ๊ฒƒ์ฒ˜๋Ÿผ

../../../etc/passwd

parameter ๊ฐ’์„ ๋„ฃ์–ด๋ณด๋ฉด

์•„๋งˆ ์›ํ•˜๋Š” ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค์ง€ ์•Š์„ ๊ฒƒ์ด๋‹ค.

์ด๋ฒˆ LAB์—์„œ๋Š” ๊ณต๊ฒฉ์ž๊ฐ€ sequence๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•˜๋„๋ก " ../ "๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค๊ณ  ํ–ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ์ด๋ฅผ ์–ด๋–ป๊ฒŒ ์šฐํšŒํ•ด /etc/passwd์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์„๊นŒ??

๋‹จ์ˆœํ•˜๊ฒŒ ์ƒ๊ฐํ•ด๋ดค์„ ๋•Œ, ์šฐ๋ฆฌ๋Š” " ../ " ๋ฅผ ์ด์šฉํ•ด์•ผ ํ•˜๊ณ  ์„œ๋ฒ„์—์„œ๋Š” " ../ "๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด ์„œ๋ฒ„๊ฐ€ " ../ " sequence๋ฅผ ์ œ๊ฑฐํ–ˆ์„ ๋•Œ์˜ ๊ฒฐ๊ณผ๊ฐ€ " ../ " sequence๊ฐ€ ๋˜๋„๋ก ํ•˜๋ฉด ๋˜์ง€ ์•Š์„๊นŒ?

....// => .. ../ / => ../

traversal sequence๋ฅผ ๋˜ ๋‹ค๋ฅธ sequence๊ฐ€ ๊ฐ์‹ธ๋Š” ํ˜•ํƒœ๋กœ ์ž…๋ ฅํ•˜๊ฒŒ ๋˜๋ฉด

์„œ๋ฒ„์—์„œ๋Š” ๊ฐ์‹ธ์ ธ ์žˆ๋Š” ๋‚ด๋ถ€ sequence๋งŒ ์ œ๊ฑฐํ•˜๊ฒŒ ๋˜๊ณ 

๋‚ด๋ถ€ sequence๊ฐ€ ์ œ๊ฑฐ๋˜๋ฉด์„œ ์™ธ๋ถ€์— ์ž‘์„ฑ๋œ ๊ฐ’์ด ์„œ๋กœ ์ด์–ด ๋ถ™์—ฌ์ง€๋ฉด

์ƒˆ๋กœ์šด sequence๊ฐ€ ๋งŒ๋“ค์–ด์ง€๊ฒŒ ๋˜๋Š” ๊ฒƒ!!

์ด๋ฅผ ์ด์šฉํ•ด /etc/passwd์— ์ ‘๊ทผ์„ ์‹œ๋„ํ•ด๋ณด๋ฉด

....//....//....//etc/passwd

์„ฑ๊ณต์ ์œผ๋กœ ํŒŒ์ผ ๋‚ด์šฉ์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

[ LAB2 ]

์ด๋ฒˆ์—๋Š” ๋˜ ๋‹ค๋ฅธ LAB์„ ์‚ดํŽด๋ณด๊ณ ์ž ํ•œ๋‹ค.

์•ž์—์„œ๋Š” sequence ../ ๋ฅผ ์ œ๊ฑฐํ–ˆ๋‹ค๋ฉด ์ด๋ฒˆ์—” URL decoding์„ ์‹คํ–‰ํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.

๋˜‘๊ฐ™์ด packet์„ ์žก์•„

../../../etc/passwd

๋ฅผ ์ž…๋ ฅํ•ด๋ณด๋ฉด "No such file" ์‘๋‹ต์ด ๋Œ์•„์˜จ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ๋ฌธ์ œ์— ๊ท€๋”ํ•ด ์ค€ ๋Œ€๋กœ URL decoding ๊ณผ์ •์—์„œ ์‚ด์•„๋‚จ๊ธฐ ์œ„ํ•ด URL encoding์„ ํ•ด๋ณด์ž.

../ => %2e%2e%2f

../../../etc/passwd => %2e%2e%2f%2e%2e%2f%2e%2e%2fetc/passwd

์œ„์™€ ๊ฐ™์ด sequence ๋Œ€์‹  URL encoding ํ•œ ๊ฐ’์„ ๋„ฃ์–ด์ฃผ๋ฉด

๊ฒฐ๊ณผ ์•ˆ ๋‚˜์˜จ๋‹ค. (?)

ํ  ํ˜น์‹œ ๋ชจ๋ฅด๋‹ˆ encoding์„ ํ•œ ๋ฒˆ ๋” ํ•ด๋ณด์ž.

../ => %2e%2e%2f => %25%32%65%25%32%65%25%32%66

../../../etc/passwd => 
%25%32%65%25%32%65%25%32%66%25%32%65%25%32%65%25%32%66%25%32%65%25%32%65%25%32%66etc/passwd

URL encode๋ฅผ ๋‘ ๋ฒˆ ์‹คํ–‰ํ•œ ๊ฐ’์„ ๋„ฃ์œผ๋ฉด ์„ฑ๊ณต์ ์œผ๋กœ /etc/passwd ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค!!

(+) encode & decode ๊ฐ’ ์†์‰ฝ๊ฒŒ ํ™•์ธํ•˜๊ธฐ

์ž…๋ ฅ ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ’์„ ์ญ‰- ๋“œ๋ž˜๊ทธ ํ•ด๋ณด๋ฉด

sequence ../ ๋ฅผ ํ•œ ๋ฒˆ encoding ํ•œ ๊ฐ’, ๋‘ ๋ฒˆ encoding ํ•œ ๊ฐ’์— ๋Œ€ํ•ด

decode ๋œ ๊ฒฐ๊ณผ๋ฅผ ์‰ฝ๊ฒŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด๋ ‡๊ฒŒ ํ•ด์„œ path traversal sequence๋ฅผ ์ฐจ๋‹จํ•˜๊ธฐ ์œ„ํ•ด

(1) sequence stripํ•˜๊ธฐ

(2) URL decoding ๊ณผ์ •์„ ๊ฑฐ์ณ ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ’ ์‚ฌ์šฉํ•˜๊ธฐ

์™€ ๊ฐ™์€ ๊ฒฝ์šฐ๋ฅผ ์‚ดํŽด๋ณด์•˜๋‹ค.

์ด์— ๋Œ€ํ•ด ์šฐ๋ฆฌ๋Š”

(1) ์™ธ๋ถ€์—์„œ sequence๋ฅผ ๊ฐ์‹ธ๋Š” sequence ์‚ฌ์šฉํ•˜๊ธฐ

(2) URL encoding ๊ณผ์ •์„ ๊ฑฐ์ณ parameter ์กฐ์ž‘ํ•˜๊ธฐ

๋ฅผ ํ†ตํ•ด LAB์„ ํ’€ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

์ด ๊ณผ์ •์„ ํ†ตํ•ด์„œ sequence๋ฅผ ์ฐจ๋‹จํ•˜๊ธฐ ์œ„ํ•œ ๊ณผ์ •์ด ์ถฉ๋ถ„ํ•˜์ง€ ๋ชปํ•˜๋‹ค๋ฉด

์†์‰ฝ๊ฒŒ ์šฐํšŒ ๋  ์ˆ˜ ์žˆ์Œ์„ ์ธ์ง€ํ•˜๊ณ  ๋„˜์–ด๊ฐ€์•ผ ํ•œ๋‹ค!!

Last updated