๐Ÿ–ฅ๏ธ Computer Science/Linux

[Linux] ํ™˜๊ฒฝ๋ณ€์ˆ˜์™€ ํ™˜๊ฒฝ๋ณ€์ˆ˜ PATH๋ž€? (+๋ช…๋ น์–ด๋ฅผ ์ฐพ๋Š” ๊ฒฝ๋กœ์™€ ์ ˆ์ฐจ, PATH ๊ณต๊ฒฉ)

Rosieblue 2023. 2. 24. 14:48
728x90

 

์ผ๋‹จ ํ™˜๊ฒฝ๋ณ€์ˆ˜๊ฐ€ ๋ฌด์—‡์ธ์ง€์— ๋‹คํ•ด์„œ ๊ฐ„๋‹จํžˆ๋งŒ ์งš๊ณ  ๋„˜์–ด๊ฐ€์ž.
๋ถ„๋ช… ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ผ๋Š” ๋‹จ์–ด, ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ •์ด๋ผ๋Š” ๊ฑด ๋ณดํ†ต ๊ฐœ๋ฐœํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•  ๋•Œ ๋งŽ์ด ๋“ค์–ด๋ณด๊ธด ํ–ˆ์„ ๊ฒƒ ๊ฐ™์€๋ฐ ๊ทธ๊ฒŒ ๋ญ”์ง€์— ๋Œ€ํ•ด์„œ ์•Œ๋ ค์ฃผ๋Š” ๊ณณ์€ ๋ณ„๋กœ ์—†์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ด๋ฒˆ ๊ธฐํšŒ์— ๊ณต๋ถ€ํ•˜๋Š” ๊น€์— ์ •๋ฆฌํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ž€?

ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ปดํ“จํ„ฐ์—์„œ ๋™์ž‘ํ•˜๋Š” ๋ฐฉ์‹์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ๋ณ€์ˆ˜๋“ค์˜ ๋ชจ์ž„์ด๋‹ค.
์ฆ‰ ์ปดํ“จํ„ฐ ํ™˜๊ฒฝ ์„ค์ •ํ•  ๋•Œ ๊ฐ’์œผ๋กœ ์„ค์ •๋˜์–ด์žˆ๋Š” ์• ๋“ค์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ํŽธํ•˜๋‹ค.
๋ฆฌ๋ˆ…์Šค๋‚˜ ์œˆ๋„์šฐ๋‚˜ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋Š” ๋‹ค ์žˆ๋‹ค.

์˜ˆ) $PARH, $HOME, $PWD, $TZ ๋“ฑ
 
์ฐธ๊ณ ๋กœ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋Š” ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž๊ฐ€ ์ž„์˜๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค. (๋ฃจํŠธ๋Š” ๊ฐ€๋Šฅํ•œ๋“ฏ)

ํ•œํŽธ ๋ฆฌ๋ˆ…์Šค์—์„œ export ๋ช…๋ น์–ด๋ฅผ ์น˜๋ฉด ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์ •๋ณด๋“ค์„ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๋‹ค.

 

export ๋ช…๋ น์–ด์˜ ๊ฒฐ๊ณผ๋กœ ์ถœ๋ ฅ๋œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์ •๋ณด๋“ค

 

์ด๋Ÿฐ์‹์œผ๋กœ echo๋กœ ์›ํ•˜๋Š” ํ™˜๊ฒฝ๋ณ€์ˆ˜๋„ ์ถœ๋ ฅ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

์šฐ๋ฆฌ๊ฐ€ ๋ช…๋ น์–ด๋ฅผ ์น  ๋•Œ๋„ ํ„ฐ๋ฏธ๋„์—์„œ๋Š” ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•œ๋‹ค(์•„๋ž˜ ์ž์„ธํžˆ). ๋˜ํ•œ ํ”„๋กœ๊ทธ๋žจ์—์„œ๋„ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•œ๋‹ค. ํ”„๋กœ๊ทธ๋žจ์ด ๋กœ๋“œ๋  ๋•Œ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋„ ๊ฐ™์ด ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๊ณผ์ •์„ ๊ฑฐ์น˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. (ํ”„๋กœ์„ธ์Šค์—์„œ๋Š” ์Šคํƒ์— ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ •๋ณด๋“ค์„ ์ €์žฅํ•ด ๋†“๊ณ , ์ด ํ…Œ์ด๋ธ”์„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ __environ ๋ณ€์ˆ˜๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ๋œ๋‹ค.)

์ž์„ธํ•œ ๋‚ด์šฉ์€ ์š”๊ธฐ -> [๋“œ๋ฆผํ•ต(Dreamhack)] __environ ,

์‹ฌํ™”๋ฌธ์ œ๋Š” ์—ฌ๊ธฐ [๋“œ๋ฆผํ•ต(Dreamhack)] environ (๋‘˜์ด ๋‹ค๋ฅธ ๋ฌธ์ œ๋‹ค. ๋ฐ‘์—๊ฑฐ๊ฐ€ ๋” ์–ด๋ ค์›€)

 

$PATH

์ด์ œ PATH ํ™˜๊ฒฝ ๋ณ€์ˆ˜($PATH)์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜์ž. ์‰ฝ๊ฒŒ ๋งํ•ด์„œ ์šฐ๋ฆฌ๊ฐ€ ์–ด๋–ค ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•œ๋‹ค๊ณ  ํ•˜๋Š” ์ƒํ™ฉ์„ ๊ฐ€์ •ํ•ด๋ณด์ž.
๊ทธ๋Ÿฐ๋ฐ ์ •๋ง ์‹ ๊ธฐํ•œ ๊ฒƒ์ด ๋ช…๋ น์–ด๊ฐ€ ์‚ฌ์‹ค์€ '์‹คํ–‰'ํŒŒ์ผ์ด๋ผ๋Š” ๊ฒƒ์ด๋‹ค.

์˜ˆ๋ฅผ๋“ค์–ด ๋ฆฌ๋ˆ…์Šค์—์„œ mkdir ๋ช…๋ น์„ ์‹คํ–‰ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด์ž ๊ทธ๋Ÿฐ๋ฐ ์‚ฌ์‹ค mkdir๋Š” ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋งŒ๋“œ๋Š” ํ–‰๋™์„ '์‹คํ–‰'ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๊ฒฐ๊ตญ mkdir์„ ์ž…๋ ฅํ•˜๋ฉด ํ•˜๋‚˜์˜ ์‹คํ–‰ํŒŒ์ผ์ด ์‹คํ–‰๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.
 
๊ทธ๋Ÿผ $PATH๋Š” ๋ฌด์—‡์ธ๊ฐ€?
์ด ์‹คํ–‰ ํŒŒ์ผ์˜ ์œ„์น˜๊ฐ€ !!! ์–ด๋”˜์ง€ ์•Œ๋ ค์ฃผ๋Š” ๊ฑฐ๋‹ค ์˜ˆ๋ฅผ๋“ค์–ด mkdir๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์–ด๋Š ๊ฒฝ๋กœ์˜ ์–ด๋Š ํŒŒ์ผ๋กœ ๊ฐ€์•ผํ•ด? ์ด๊ฑธ ์•Œ๋ ค์ฃผ๋Š” ๊ฒƒ์ด๋‹ค~! ์‚ฌ์šฉ์ž๊ฐ€ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์ปดํ“จํ„ฐ๋Š”  PATH์— ์ ํžŒ ์œ„์น˜๋“ค๋กœ ํ•˜๋‚˜์”ฉ ๊ฐ€๋ณด๋ฉฐ ๋ช…๋ น์–ด ํŒŒ์ผ์„ ์ฐพ์€ ํ›„ ์‹คํ–‰ํ•˜๊ฒŒ๋œ๋‹ค.

 

echo $PATH๋ฅผ ํ†ตํ•ด์„œ PATH ํ™˜๊ฒฝ ๋ณ€์ˆ˜์˜ ๋‚ด์šฉ์„ ์ถœ๋ ฅํ•ด๋ณด์•˜๋‹ค.

':'(์ฝœ๋ก )์œผ๋กœ ๊ตฌ๋ถ„๋œ ๊ฒƒ๋“ค์ด ๋‹ค ๊ฒฝ๋กœ๋“ค์ด๊ณ , ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ์ด ๊ฒฝ๋กœ๋“ค์— ๋“ค์–ด๊ฐ€์„œ ๋ช…๋ น์–ด๊ฐ€ ์žˆ๋Š”์ง€๋ฅผ ํƒ์ƒ‰ํ•œ๋‹ค.

 

์œ„์—์„œ ~๋””๋ ‰ํ† ๋ฆฌ์— id๋ผ๋Š” ์‹คํ–‰ํŒŒ์ผ์ด ์กด์žฌํ•˜์ง€๋„ ์•Š์Œ์—๋„ id ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ ๊ฒƒ์€ ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ํƒ์ƒ‰ํ•œ ํ›„ id ํŒŒ์ผ์ด ์—†์–ด์„œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜์˜ ๊ฒฝ๋กœ๋“ค์„ ๋‹ค ํƒ์ƒ‰ํ•ด๋ดค๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

๋ช…๋ น์–ด ์‹คํ–‰ ํ๋ฆ„

์‚ฌ์šฉ์ž๊ฐ€ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•  ๋•Œ ์ปดํ“จํ„ฐ๊ฐ€ ์ด๋ฅผ ์–ด๋–ป๊ฒŒ ์‹คํ–‰ํ•˜๋Š”์ง€ ํ๋ฆ„๋„๋ฅผ ์•„๋ž˜์— ๊ฐ€์ ธ์™€๋ดค๋‹ค.

๋จผ์ € ํ•ด๋‹น ๋ช…๋ น์–ด ํŒŒ์ผ์ด ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ ์•ˆ์— ์žˆ๋Š”์ง€ ์ฐพ๋Š”๋‹ค.

๋งŒ์•ฝ ์—†์œผ๋ฉด $PATH์— ์žˆ๋Š” ๊ฒฝ๋กœ๋“ค์„ ๊ฐ€๋ณธ๋‹ค.

๊ทธ ๋ช…๋ น์–ด ์‹คํ–‰๊ถŒํ•œ์ด ์žˆ์œผ๋ฉด ์ด๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.

๋งŒ์•ฝ ์‹คํ–‰๊ถŒํ•œ์ด ์—†์œผ๋ฉด ํ•ด๋‹น ๋ช…๋ น์–ด ํŒŒ์ผ์ด setuid ํ˜น์€ setgid๊ฐ€ ์„ค์ •๋˜์–ด์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. setuid๊ฐ€ ์„ค์ •๋˜์–ด์žˆ๊ณ  ์‹คํ–‰๊ถŒํ•œ์ด ์žˆ์œผ๋ฉด ์ด๋ฅผ ์‹คํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค. (setuid์™€ setgid๋Š” ๋ฆฌ๋ˆ…์Šค ๊ถŒํ•œ ์ค‘ ํŠน์ˆ˜๊ถŒํ•œ์œผ๋กœ ๋”ฐ๋กœ ํฌ์ŠคํŒ…ํ•  ์˜ˆ์ •์ด๋‹ค.)

 

์ฐธ๊ณ ๋กœ ์‹คํ–‰ํŒŒ์ผ์€ ๋ช…๋ น์–ด์ธ์ง€์•„๋‹Œ์ง€ ์ƒ๊ด€์—†์ด ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋กœ ์‹คํ–‰ํ•ด์ฃผ๋ฉด ๋‹ค ์‹คํ–‰์ด๋˜๋Š”๊ฒƒ์„ ์žŠ์ง€๋ง์ž

path๋ฅผ ์ดˆ๊ธฐํ™” ํ•ด์ฃผ๋”๋ผ๋„ ๋งŒ์•ฝ ์ ˆ๋Œ€๊ฒฝ๋กœ๋กœ ์ž…๋ ฅํ•ด์ฃผ๋ฉด ๊ทธ๋ƒฅ cmd์— ์ ˆ๋Œ€๊ฒฝ๋กœ๋ฅผ ์ž…๋ ฅํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•˜๋ฏ€๋กœ ํ•ด๋‹น ์‹คํ–‰ํŒŒ์ผ(๋ช…๋ น์–ด ํŒŒ์ผ ํฌํ•จ)์ด ์‹คํ–‰๋œ๋‹ค

 

$PATH ์กฐ์ž‘?

๊ทธ๋Ÿผ ๋งŒ์•ฝ์— $PATH๋ฅผ ์กฐ์ž‘ํ•œ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?

 

์•„๋ž˜ ๊ทธ๋ฆผ์—์„œ๋Š” PATH ๊ฐ’ ์ž์ฒด๋ฅผ ์•„์˜ˆ ์ง€์›Œ๋ฒ„๋ ธ๋‹ค. ๋”ฐ๋ผ์„œ id ๋ช…๋ น์–ด๊ฐ€ ์•„์˜ˆ ์‹คํ–‰์ด ์•ˆ ๋˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

์ด๋Ÿฌ๊ณ  shell ๋”ฐ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค์–ด ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ์— ๋„ฃ์–ด๋ดค๋‹ค.

 

 

PATH๋ฅผ ์ œ๊ฑฐํ•ด์ฃผ์—ˆ๋”๋‹ˆ id๋ฅผ ์น˜๋‹ˆ ์‰˜์ด ๋”ฐ์ง€๋Š” ๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค (๋ฌผ๋ก  PATH๋ฅผ ์ดˆ๊ธฐํ™”ํ•ด์„œ ls ๋ช…๋ น์–ด๋Š” ๋จนํžˆ์ง€ ์•Š๋Š” ๋ชจ์Šต๋‹ค)

 

 

๋˜ ๋‹ค๋ฅธ ์˜ˆ์‹œ๋ฅผ ๋ณด์ž

// gcc -o environ1 environ1.c
#include <stdlib.h>
#include <unistd.h>
int main()
{
    printf("Screen Cleaner\n");
    system("clear");
         
    return 0;
}

์œ„ ์ฝ”๋“œ๋Š” clear ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜๋Š” ์ฝ”๋“œ์ด๋‹ค.

 

๊ทธ๋Ÿฐ๋ฐ ๋งŒ์•ฝ PATH๋ณ€์ˆ˜๊ฐ€ ๋น„์›Œ์ ธ์žˆ๋‹ค๋ฉด ์œ„ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ์˜ค๋ฅ˜๊ฐ€ ๋œฐ๊ฒƒ์ด๋‹ค. ์™œ๋ƒํ•˜๋ฉด clear๋ผ๋Š” ์‹คํ–‰ํŒŒ์ผ์„ ์ฐพ์„ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

clear:not found ์—๋Ÿฌ๊ฐ€ ๋œธ

 

ํ•œํŽธ ๋ฆฌ๋ˆ…์Šค์—์„œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ์–ด๋–ป๊ฒŒ ํ•œ๋‹ค๊ณ  ํ–ˆ๋Š”์ง€ ๊ธฐ์–ตํ•˜๋Š”๊ฐ€? ์ผ๋‹จ ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ์—์„œ๋„ clear๋ผ๋Š” ์ด๋ฆ„์˜ ์‹คํ–‰ํŒŒ์ผ์ด ์žˆ๋Š”์ง€๋ฅผ ์ฐพ๋Š” ๊ฒƒ์ด๋‹ค !!!! ๊ทธ๋ ‡๋‹ค๋ฉด ๋””๋ ‰ํ† ๋ฆฌ์— clear๋ผ๋Š” ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด์ฃผ๊ณ  ๊ฑฐ๊ธฐ๋‹ค ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ๊ฑธ ํ•˜๊ฒŒ ์‹œํ‚ค๋ฉด ๋˜์ง€ ์•Š์„๊นŒ?

 

 

์•„๋ž˜์ฒ˜๋Ÿผ ./clear๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ /bin/sh์˜ ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ๊ฑธ์–ด์ฃผ์—ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  PATH๋ฅผ ์ดˆ๊ธฐํ™”ํ–ˆ๋‹ค.

 

 

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด clear ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•  ๋•Œ /bin/sh๊ฐ€ ์‹คํ–‰๋˜๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค. ์œ„ ๊ทธ๋ฆผ์„ ํ†ตํ•ด์„œ ์ •์ƒ์ ์œผ๋กœ ์‰˜์ด ๋”ฐ์ง„ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค!! 

 

์ฝ”๋“œ์—์„œ๋Š” system("clear"); ํ˜•์‹์œผ๋กœ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ–ˆ์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋Ÿฌํ•œ ์ฝ”๋“œ๋“ค์€ ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ์— ๊ฐ™์€ ์ด๋ฆ„์œผ๋กœ ๋‹ค๋ฅธ ํŒŒ์ผ์„ ๋งŒ๋“ค๋ฉด ์•…์˜์ ์ธ ํŒŒ์ผ์„ ์‹ฌ๊ณ  ์ด๋ฅผ ์‹คํ–‰์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. 

 

๋”ฐ๋ผ์„œ ๋ณด์•ˆ์ ์œผ๋กœ ์•ˆ์ „ํ•œ ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„  ์•„๋ž˜์ฒ˜๋Ÿผ ์ ˆ๋Œ€๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•ด์ฃผ๋Š” ๊ฒƒ์ด ๋” ๋ฐ”๋žŒ์งํ•˜๋‹ค.

system("/usr/bin/clear");

 

์ด๋Ÿฌํ•œ ๊ณต๊ฒฉ๋“ค์€ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ PATH๋ฅผ ์ด์šฉํ•œ ๊ณต๊ฒฉ์œผ๋กœ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ๊ณต๊ฒฉ (Environment Attack)์˜ ์ผ๋ถ€์ด๋‹ค. ์ด์— ๋Œ€ํ•œ ๋‚ด์šฉ์€ ๋‹ค๋ฅธ ํฌ์ŠคํŠธ์—์„œ ์ž์„ธํ•˜๊ฒŒ ๋‹ค๋ฃจ๋„๋ก ํ•˜๊ฒ ๋‹ค.