- If a folder for which your user has write permission is located in the path, you could potentially hijack an application to run a script.
- **PATH** in Linux is an environmental variable that tells the OS where to search for executables.
- For any command that is not built into the shell or that is not defined with an absolute path, Linux will start searching in folders defined under PATH.
A simple search for writable folders using [[find]]
```bash
find / -writable 2>/dev/null
find / -type d -writable 2>/dev/null | cut -d "/" -f 2 | sort -u
find / -type d -writable 2>/dev/null | cut -d "/" -f 2,3 | sort -u
```
adding `/tmp` in `PATH` env variable.
```bash
echo $PATH
export PATH=/tmp:$PATH
```
```bash
cd /tmp
echo "/bin/bash" > wook
chmod 777 wook
```
---
# PATH 하이재킹: 권한 상승 공격 이해하기
간단히 말해, PATH 하이재킹은 시스템이 특정 프로그램을 찾을 때 우리가 만든 악성 프로그램을 대신 실행하도록 속이는 방법이다.
공격 원리
- 시스템에 `path_script`라는 프로그램이 있다고 가정하자.
- 이 `path_script`는 루트 권한으로 실행되도록 설정되어 있다. **중요**
- `path_script`의 역할은 내부적으로 다른 `wook`이라는 프로그램을 실행하는 것이다.
- 문제는 `path_script`가 `wook`프로그램을 실행할 때 `/usr/bin/wook`처럼 정확한 위치 (절대 경로)를 지정하지 않고 그냥 "wook"이라고만 호출한다는 점이다.
- 여기서 취약점이 발생! `path_script`가 `wook`의 정확한 위치를 모르기 때문에 `PATH` 환경 변수에 있는 폴더들을 뒤져서 `wook`을 찾으려고 한다.
공격 단계
1. 내가 '쓰기' 권한을 가진 폴더를 찾는다.
1. `echo $PATH`로 변수에 어떤 폴더들이 지정되어 있는지 확인.
2. `PATH` 변수에 있는 폴더들 중에서 내가 파일 쓰기 권한을 가진 폴더가 있는지 확인.
3. `PATH` 변수에 내가 '쓰기' 권한을 가진 폴더가 없다면 내가 쓰기 권한을 가진 폴더, 예를 들어 `/tmp`,를 `PATH`의 가장 앞부분에 추가한다. (`export PATH=/tmp:$PATH`). 이렇게 되면 시스템이 프로그램을 찾을 때 `/tmp` 폴더를 가장 먼저 확인한다.
2. 가짜 `wook` 프로그램 만들기.
1. `/tmp`에 `wook`이라는 같은 이름의 프로그램을 만든다.
2. `echo "/bin/bash" > wook`
3. 권한 상승
1. 우리가 만든 가짜 `wook` 프로그램을 만든 상태에서, 루트 권한으로 실행되는 `path_script`를 실행한다.
2. `path_script`는 `wook`프로그램을 찾기 위해 `PATH` 변수를 확인한다.
3. `/tmp` 가 `PATH` 변수 가장 앞에 있기 때문에 `path_script`는 `/tmp`에 만들어둔 가짜 프로그램을 먼저 발견하고 실행하게 된다.
4. 여기서 중요한 점은 `bash_script`가 root 권한으로 실행되기 때문에, `path_script`에 의해 실행되는 우리의 가짜 `wook` 프로그램 역시 root 권한으로 실행된다는 것!