GTFO 사용 실패

agnusdei·2025년 7월 19일
0

CTF

목록 보기
47/154

❗️질문 요약:

sudo에 SUID 비트 있고, 실행권한(o+x)도 있는데, 명령어 실행해도 쉘이 안 뜨거나 권한이 안 올라간다.
→ 이거 원래 그런 건가? 왜 그런 거야?


✅ 결론부터 말하면:

SUID가 있다고 해서 무조건 권한 상승이 가능한 건 아닙니다.
이유는 다음과 같습니다.


🧠 이유 5가지 정리

1. SUID 동작은 루트로 실행된다는 뜻이지, 쉘이 열린다는 뜻이 아님

  • SUID는 "해당 프로그램을 실행할 때 소유자의 권한으로 실행하라"는 의미.
  • sudoroot 소유이고 SUID면, sudo가 실행될 때만 루트 권한이 생김.
  • BUT sudo는 내부적으로 자체 검증 (sudoers 등) 없이 무조건 쉘을 주지 않음.

🔒 예시:

-rwsr-xr-x 1 root root 186584 /usr/bin/sudo

✅ 실행은 루트 권한으로 됨
sudo는 policy check (sudoers, 패스워드 등) 통과 못 하면 쉘 안 줌


2. 내가 실행한 방식이 권한 상승 루틴을 우회하지 못한 것

  • 예를 들어, sudo 자체는 루트 권한으로 실행되지만,
    내부 로직에서 "이 사용자한테 쉘 열지 마"라고 판단하면 막힘.
  • 그래서 sudo 명령어를 단순 실행한다고 권한 상승 안 됨.
  • 실제 쉘 획득하려면 우회 기법을 써야 함 → GTFOBins 명령어들 참고

3. 대부분의 SUID 바이너리는 보안 대비가 되어 있음

  • sudo, passwd, su, mount, ping 등은 SUID지만 쉘 안 열려요.

  • 왜냐면 내부적으로:

    • 실행된 사용자 UID 검사
    • 환경 변수 검증
    • 입력 제한
    • root 쉘 실행 막는 로직이 있음

4. 쉘이 "setuid" 자체를 무시할 수도 있음

  • /bin/bash 등 최신 쉘들은 보안상 setuid 설정을 무시하게 설계됨
  • 그래서 SUID 바이너리라고 해도, bash -p 같은 특수 옵션 없으면 쉘 권한이 안 올라감
./bash -p   # <- 이렇게 해야 SUID 쉘이 뜸

5. 커널 레벨 보안 기능에 막혔을 수 있음

  • AppArmor, SELinux, seccomp, capabilities
  • root가 실행하더라도 제한된 작업만 허용될 수 있음

🔍 요약

조건기대 결과
SUID + 실행 가능해당 프로그램을 소유자 권한으로 실행
내부 검증 우회 필요sudo 자체 쉘 안 열면 GTFOBins 루틴 필요
쉘 바이너리의 보안 옵션 무시bash -p 등으로 setuid 효과 유지 필요
시스템 보안 정책 존재 가능AppArmor/SELinux 등에서 실행 제한될 수 있음

✅ 권한 상승 체크리스트

  1. ls -l 확인 – SUID가 있는지, 누구 소유인지
  2. file / which로 실행파일 맞는지 확인
  3. 실제 실행 후 id 확인uid=0이 뜨는지
  4. GTFOBins에 해당 바이너리 있는지 확인
  5. 쉘 안 뜨면 bash -p, sh -p, python, perl, awk 등 다른 방법 시도
  6. 막히면 AppArmor/SELinux 로그 확인

💬 요약 한 줄

SUID + 실행 권한만 있다고 쉘이 뜨는 건 아니고, 내부 로직이나 시스템 보안 설정, 쉘 자체의 제한 등 여러 조건이 맞아야 실제 권한 상승이 됩니다.

profile
DevSecOps ⚙️ + CTF🚩

0개의 댓글