Windows Local Privilege Escalation
Best tool to look for Windows local privilege escalation vectors: WinPEAS
Initial Windows Theory
Access Tokens
Windows Access Tokens이 무엇인지 모른다면, 계속하기 전에 다음 페이지를 읽어보세요:
Access TokensACLs - DACLs/SACLs/ACEs
ACLs - DACLs/SACLs/ACEs에 대한 더 많은 정보는 다음 페이지를 확인하세요:
ACLs - DACLs/SACLs/ACEsIntegrity Levels
Windows에서의 무결성 수준이 무엇인지 모른다면, 계속하기 전에 다음 페이지를 읽어보세요:
Integrity LevelsWindows Security Controls
Windows에는 시스템을 열거하는 것을 방지하거나, 실행 파일을 실행하거나 심지어 당신의 활동을 감지하는 다양한 요소가 있습니다. 권한 상승 열거를 시작하기 전에 다음 페이지를 읽고 모든 방어 메커니즘을 열거해야 합니다:
Windows Security ControlsSystem Info
Version info enumeration
Windows 버전에 알려진 취약점이 있는지 확인하세요 (적용된 패치도 확인하세요).
Version Exploits
이 사이트는 Microsoft 보안 취약점에 대한 자세한 정보를 검색하는 데 유용합니다. 이 데이터베이스에는 4,700개 이상의 보안 취약점이 있으며, Windows 환경이 제공하는 대규모 공격 표면을 보여줍니다.
시스템에서
post/windows/gather/enum_patches
post/multi/recon/local_exploit_suggester
winpeas (Winpeas는 watson이 내장되어 있습니다)
시스템 정보로 로컬에서
익스플로잇의 Github 리포지토리:
Environment
환경 변수에 저장된 자격 증명/유용한 정보가 있습니까?
PowerShell 기록
PowerShell 전사 파일
이 기능을 활성화하는 방법은 https://sid-500.com/2017/11/07/powershell-enabling-transcription-logging-by-using-group-policy/에서 확인할 수 있습니다.
PowerShell 모듈 로깅
PowerShell 파이프라인 실행의 세부 사항이 기록되며, 실행된 명령, 명령 호출 및 스크립트의 일부가 포함됩니다. 그러나 전체 실행 세부 사항 및 출력 결과는 캡처되지 않을 수 있습니다.
이를 활성화하려면 문서의 "전사 파일" 섹션의 지침을 따르고 **"모듈 로깅"**을 선택하십시오. "Powershell 전사" 대신에.
Powershell 로그에서 마지막 15개의 이벤트를 보려면 다음을 실행할 수 있습니다:
PowerShell 스크립트 블록 로깅
스크립트 실행의 전체 활동 및 전체 콘텐츠 기록이 캡처되어, 실행되는 모든 코드 블록이 문서화됩니다. 이 과정은 각 활동의 포괄적인 감사 추적을 보존하여 포렌식 및 악의적인 행동 분석에 유용합니다. 실행 시 모든 활동을 문서화함으로써 프로세스에 대한 자세한 통찰력을 제공합니다.
스크립트 블록에 대한 로그 이벤트는 Windows 이벤트 뷰어의 경로 응용 프로그램 및 서비스 로그 > Microsoft > Windows > PowerShell > 운영에서 찾을 수 있습니다. 마지막 20개의 이벤트를 보려면 다음을 사용할 수 있습니다:
인터넷 설정
드라이브
WSUS
업데이트가 http가 아닌 httpS를 사용하여 요청되지 않는 경우 시스템을 손상시킬 수 있습니다.
다음 명령어를 실행하여 네트워크가 비SSL WSUS 업데이트를 사용하는지 확인합니다:
만약 다음과 같은 응답을 받으면:
And if HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate\AU /v UseWUServer
is equals to 1
.
Then, 악용 가능성 있음. 마지막 레지스트리가 0이면 WSUS 항목은 무시됩니다.
이 취약점을 악용하기 위해 다음과 같은 도구를 사용할 수 있습니다: Wsuxploit, pyWSUS - 이는 비 SSL WSUS 트래픽에 '가짜' 업데이트를 주입하기 위한 MiTM 무기화된 익스플로잇 스크립트입니다.
여기에서 연구를 읽어보세요:
WSUS CVE-2020-1013
전체 보고서를 여기에서 읽어보세요. 기본적으로, 이 버그가 악용하는 결함은 다음과 같습니다:
우리가 로컬 사용자 프록시를 수정할 수 있는 권한이 있고, Windows 업데이트가 Internet Explorer의 설정에 구성된 프록시를 사용한다면, 우리는 PyWSUS를 로컬에서 실행하여 자신의 트래픽을 가로채고 자산에서 상승된 사용자로서 코드를 실행할 수 있는 권한을 가지게 됩니다.
게다가, WSUS 서비스는 현재 사용자의 설정을 사용하므로, 현재 사용자의 인증서 저장소도 사용합니다. WSUS 호스트 이름에 대해 자체 서명된 인증서를 생성하고 이 인증서를 현재 사용자의 인증서 저장소에 추가하면 HTTP 및 HTTPS WSUS 트래픽을 모두 가로챌 수 있습니다. WSUS는 인증서에 대한 신뢰-첫 사용 유형 검증을 구현하기 위해 HSTS와 유사한 메커니즘을 사용하지 않습니다. 제시된 인증서가 사용자에 의해 신뢰되고 올바른 호스트 이름을 가지고 있다면, 서비스에 의해 수용됩니다.
이 취약점을 WSUSpicious 도구를 사용하여 악용할 수 있습니다 (해방되면).
KrbRelayUp
로컬 권한 상승 취약점이 특정 조건 하에 Windows 도메인 환경에 존재합니다. 이러한 조건에는 LDAP 서명이 시행되지 않는 환경, 사용자가 **리소스 기반 제약 위임(RBCD)**을 구성할 수 있는 자기 권한을 가지며, 사용자가 도메인 내에서 컴퓨터를 생성할 수 있는 능력이 포함됩니다. 이러한 요구 사항은 기본 설정을 사용하여 충족된다는 점에 유의해야 합니다.
익스플로잇을 찾으세요 https://github.com/Dec0ne/KrbRelayUp
공격 흐름에 대한 자세한 정보는 https://research.nccgroup.com/2019/08/20/kerberos-resource-based-constrained-delegation-when-an-image-change-leads-to-a-privilege-escalation/를 확인하세요.
AlwaysInstallElevated
이 2개의 레지스터가 활성화되어 있으면 (값이 0x1), 모든 권한의 사용자가 NT AUTHORITY\SYSTEM으로 *.msi
파일을 설치(실행)할 수 있습니다.
메타스플로잇 페이로드
If you have a meterpreter session you can automate this technique using the module exploit/windows/local/always_install_elevated
PowerUP
Write-UserAddMSI
명령어를 사용하여 현재 디렉토리 내에 권한 상승을 위한 Windows MSI 바이너리를 생성합니다. 이 스크립트는 사용자/그룹 추가를 요청하는 미리 컴파일된 MSI 설치 프로그램을 작성합니다(따라서 GIU 접근이 필요합니다):
Just execute the created binary to escalate privileges.
MSI Wrapper
이 튜토리얼을 읽고 이 도구를 사용하여 MSI 래퍼를 만드는 방법을 배우세요. 명령줄을 실행하려는 경우 ".bat" 파일을 래핑할 수 있습니다.
MSI WrapperCreate MSI with WIX
Create MSI with WIXCreate MSI with Visual Studio
Cobalt Strike 또는 Metasploit를 사용하여
C:\privesc\beacon.exe
에 새 Windows EXE TCP 페이로드를 생성합니다.Visual Studio를 열고 새 프로젝트 만들기를 선택한 후 검색 상자에 "installer"를 입력합니다. Setup Wizard 프로젝트를 선택하고 Next를 클릭합니다.
프로젝트 이름을 AlwaysPrivesc로 지정하고, 위치에 **
C:\privesc
**를 사용하며, 해결책과 프로젝트를 동일한 디렉토리에 배치를 선택하고 Create를 클릭합니다.4단계 중 3단계(포함할 파일 선택)에 도달할 때까지 Next를 계속 클릭합니다. Add를 클릭하고 방금 생성한 Beacon 페이로드를 선택합니다. 그런 다음 Finish를 클릭합니다.
Solution Explorer에서 AlwaysPrivesc 프로젝트를 강조 표시하고 Properties에서 TargetPlatform을 x86에서 x64로 변경합니다.
설치된 앱이 더 합법적으로 보이도록 Author 및 Manufacturer와 같은 다른 속성을 변경할 수 있습니다.
프로젝트를 마우스 오른쪽 버튼으로 클릭하고 View > Custom Actions를 선택합니다.
Install을 마우스 오른쪽 버튼으로 클릭하고 Add Custom Action을 선택합니다.
Application Folder를 두 번 클릭하고 beacon.exe 파일을 선택한 후 OK를 클릭합니다. 이렇게 하면 설치 프로그램이 실행될 때 비콘 페이로드가 즉시 실행됩니다.
Custom Action Properties에서 Run64Bit를 True로 변경합니다.
마지막으로 빌드합니다.
File 'beacon-tcp.exe' targeting 'x64' is not compatible with the project's target platform 'x86'
경고가 표시되면 플랫폼을 x64로 설정했는지 확인합니다.
MSI Installation
악성 .msi
파일의 설치를 백그라운드에서 실행하려면:
이 취약점을 악용하려면 다음을 사용할 수 있습니다: exploit/windows/local/always_install_elevated
안티바이러스 및 탐지기
감사 설정
이 설정은 무엇이 로그되는지를 결정하므로 주의해야 합니다.
WEF
Windows Event Forwarding는 로그가 어디로 전송되는지 아는 것이 흥미롭습니다.
LAPS
LAPS는 로컬 관리자 비밀번호 관리를 위해 설계되었으며, 각 비밀번호가 고유하고 무작위이며 정기적으로 업데이트되도록 보장합니다. 이러한 비밀번호는 Active Directory 내에 안전하게 저장되며, ACL을 통해 충분한 권한이 부여된 사용자만 접근할 수 있어, 권한이 있는 경우 로컬 관리자 비밀번호를 볼 수 있습니다.
LAPSWDigest
활성화된 경우, 평문 비밀번호는 LSASS(로컬 보안 권한 하위 시스템 서비스)에 저장됩니다. WDigest에 대한 더 많은 정보는 이 페이지에서 확인하세요.
LSA 보호
Windows 8.1부터 Microsoft는 신뢰할 수 없는 프로세스가 메모리를 읽거나 코드를 주입하려는 시도를 차단하기 위해 로컬 보안 권한(LSA)에 대한 향상된 보호 기능을 도입하여 시스템을 더욱 안전하게 만들었습니다. LSA 보호에 대한 자세한 정보는 여기에서 확인하세요.
Credentials Guard
Credential Guard는 Windows 10에서 도입되었습니다. 그 목적은 패스-더-해시 공격과 같은 위협으로부터 장치에 저장된 자격 증명을 보호하는 것입니다.| 자격 증명 보호에 대한 자세한 정보는 여기에서 확인하세요.
Cached Credentials
도메인 자격 증명은 로컬 보안 권한(LSA)에 의해 인증되며 운영 체제 구성 요소에서 사용됩니다. 사용자의 로그인 데이터가 등록된 보안 패키지에 의해 인증되면, 일반적으로 사용자의 도메인 자격 증명이 설정됩니다. Cached Credentials에 대한 자세한 정보는 여기에서 확인하세요.
사용자 및 그룹
사용자 및 그룹 나열
귀하가 속한 그룹 중 흥미로운 권한이 있는지 확인해야 합니다.
Privileged groups
만약 당신이 특권 그룹에 속한다면 권한을 상승시킬 수 있습니다. 특권 그룹에 대해 배우고 이를 악용하여 권한을 상승시키는 방법은 여기에서 확인하세요:
Privileged GroupsToken manipulation
더 알아보세요 이 페이지에서 토큰이 무엇인지: Windows Tokens. 다음 페이지를 확인하여 흥미로운 토큰에 대해 배우고 이를 악용하는 방법을 알아보세요:
Abusing TokensLogged users / Sessions
홈 폴더
비밀번호 정책
클립보드의 내용 가져오기
실행 중인 프로세스
파일 및 폴더 권한
우선, 프로세스를 나열하여 프로세스의 명령줄에 있는 비밀번호를 확인합니다. 실행 중인 일부 바이너리를 덮어쓸 수 있는지 또는 바이너리 폴더에 대한 쓰기 권한이 있는지 확인하여 가능한 DLL 하이재킹 공격을 이용합니다:
항상 가능한 electron/cef/chromium 디버거가 실행 중인지 확인하세요. 이를 악용하여 권한을 상승시킬 수 있습니다.
프로세스 바이너리의 권한 확인
프로세스 바이너리의 폴더 권한 확인 (DLL Hijacking)
Memory Password mining
procdump를 사용하여 실행 중인 프로세스의 메모리 덤프를 생성할 수 있습니다. FTP와 같은 서비스는 메모리에 평문으로 자격 증명을 저장하므로, 메모리를 덤프하고 자격 증명을 읽어보세요.
안전하지 않은 GUI 앱
SYSTEM으로 실행되는 애플리케이션은 사용자가 CMD를 실행하거나 디렉토리를 탐색할 수 있도록 허용할 수 있습니다.
예: "Windows 도움말 및 지원" (Windows + F1), "명령 프롬프트" 검색, "명령 프롬프트 열기 클릭" 클릭
서비스
서비스 목록 가져오기:
Permissions
sc를 사용하여 서비스 정보를 얻을 수 있습니다.
각 서비스에 필요한 권한 수준을 확인하기 위해 _Sysinternals_의 바이너리 accesschk를 사용하는 것이 좋습니다.
"인증된 사용자"가 어떤 서비스도 수정할 수 있는지 확인하는 것이 권장됩니다:
여기에서 XP용 accesschk.exe를 다운로드할 수 있습니다
서비스 활성화
이 오류가 발생하는 경우(예: SSDPSRV):
시스템 오류 1058이 발생했습니다. 서비스를 시작할 수 없습니다. 서비스가 비활성화되었거나 활성화된 장치가 연결되어 있지 않기 때문입니다.
다음과 같이 활성화할 수 있습니다.
서비스 upnphost가 SSDPSRV에 의존하여 작동한다는 점을 고려하세요 (XP SP1의 경우)
이 문제의 또 다른 해결 방법은 다음을 실행하는 것입니다:
서비스 이진 경로 수정
"인증된 사용자" 그룹이 서비스에 대해 SERVICE_ALL_ACCESS를 보유한 경우, 서비스의 실행 파일을 수정할 수 있습니다. sc를 수정하고 실행하려면:
서비스 재시작
권한은 다양한 권한을 통해 상승할 수 있습니다:
SERVICE_CHANGE_CONFIG: 서비스 바이너리의 재구성을 허용합니다.
WRITE_DAC: 권한 재구성을 가능하게 하여 서비스 구성을 변경할 수 있게 합니다.
WRITE_OWNER: 소유권 획득 및 권한 재구성을 허용합니다.
GENERIC_WRITE: 서비스 구성을 변경할 수 있는 능력을 상속받습니다.
GENERIC_ALL: 또한 서비스 구성을 변경할 수 있는 능력을 상속받습니다.
이 취약점을 탐지하고 악용하기 위해 _exploit/windows/local/service_permissions_를 사용할 수 있습니다.
서비스 바이너리의 약한 권한
서비스에 의해 실행되는 바이너리를 수정할 수 있는지 또는 바이너리가 위치한 폴더에 대한 쓰기 권한이 있는지 확인하십시오 (DLL Hijacking). wmic를 사용하여 서비스에 의해 실행되는 모든 바이너리를 가져오고 icacls를 사용하여 권한을 확인할 수 있습니다:
You can also use sc and icacls:
서비스 레지스트리 수정 권한
서비스 레지스트리를 수정할 수 있는지 확인해야 합니다. 서비스 레지스트리에 대한 권한을 확인하려면 다음을 수행할 수 있습니다:
인증된 사용자 또는 NT AUTHORITY\INTERACTIVE가 FullControl
권한을 가지고 있는지 확인해야 합니다. 그렇다면 서비스에 의해 실행되는 바이너리를 변경할 수 있습니다.
실행되는 바이너리의 경로를 변경하려면:
Services registry AppendData/AddSubdirectory permissions
이 권한이 레지스트리에 있으면 이 레지스트리에서 하위 레지스트리를 생성할 수 있습니다. Windows 서비스의 경우, 이는 임의의 코드를 실행하기에 충분합니다:
AppendData/AddSubdirectory permission over service registryUnquoted Service Paths
실행 파일의 경로가 따옴표 안에 없으면, Windows는 공백 이전의 모든 끝을 실행하려고 시도합니다.
예를 들어, 경로 _C:\Program Files\Some Folder\Service.exe_에 대해 Windows는 다음을 실행하려고 시도합니다:
모든 따옴표가 없는 서비스 경로를 나열하되, 기본 제공 Windows 서비스에 속하는 것은 제외합니다:
이 취약점을 탐지하고 악용할 수 있습니다 metasploit로: exploit/windows/local/trusted\_service\_path
metasploit로 서비스 바이너리를 수동으로 생성할 수 있습니다:
Recovery Actions
Windows는 서비스가 실패할 경우 취할 작업을 사용자가 지정할 수 있도록 허용합니다. 이 기능은 바이너리를 가리키도록 구성할 수 있습니다. 이 바이너리가 교체 가능하다면, 권한 상승이 가능할 수 있습니다. 더 많은 세부정보는 공식 문서에서 확인할 수 있습니다.
Applications
Installed Applications
바이너리의 권한(하나를 덮어쓸 수 있을지도 모르므로 권한 상승 가능성)과 폴더의 권한(DLL Hijacking)을 확인하십시오.
쓰기 권한
특정 파일을 읽기 위해 일부 구성 파일을 수정할 수 있는지 또는 관리자 계정에 의해 실행될 이진 파일을 수정할 수 있는지 확인하십시오 (schedtasks).
시스템에서 약한 폴더/파일 권한을 찾는 방법은 다음과 같습니다:
시작 시 실행
다른 사용자가 실행할 레지스트리나 바이너리를 덮어쓸 수 있는지 확인하세요. 다음 페이지를 읽어 권한 상승을 위한 흥미로운 autoruns 위치에 대해 더 알아보세요:
Privilege Escalation with Autoruns드라이버
가능한 서드파티 이상한/취약한 드라이버를 찾아보세요.
PATH DLL Hijacking
PATH에 있는 폴더 내에 쓰기 권한이 있는 경우 프로세스에 의해 로드된 DLL을 하이재킹하고 권한을 상승시킬 수 있습니다.
PATH 내 모든 폴더의 권한을 확인하세요:
더 많은 정보는 이 체크를 악용하는 방법에 대해:
Writable Sys Path +Dll Hijacking Privesc네트워크
공유
hosts file
hosts 파일에 하드코딩된 다른 알려진 컴퓨터가 있는지 확인하십시오.
네트워크 인터페이스 및 DNS
Open Ports
외부에서 제한된 서비스를 확인하십시오.
라우팅 테이블
ARP 테이블
방화벽 규칙
방화벽 관련 명령어는 이 페이지를 확인하세요 (규칙 목록, 규칙 생성, 끄기, 끄기...)
네트워크 열거를 위한 명령어는 여기에서 확인하세요
윈도우 리눅스 하위 시스템 (wsl)
Binary bash.exe
는 C:\Windows\WinSxS\amd64_microsoft-windows-lxssbash_[...]\bash.exe
에서도 찾을 수 있습니다.
루트 사용자 권한을 얻으면 어떤 포트에서도 수신할 수 있습니다(처음 nc.exe
를 사용하여 포트에서 수신할 때 GUI를 통해 nc
가 방화벽에 의해 허용되어야 하는지 묻습니다).
bash를 루트로 쉽게 시작하려면 --default-user root
를 시도할 수 있습니다.
WSL
파일 시스템은 C:\Users\%USERNAME%\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs\
폴더에서 탐색할 수 있습니다.