Writable Sys Path +Dll Hijacking Privesc

Tip

AWS ν•΄ν‚Ή 배우기 및 μ—°μŠ΅ν•˜κΈ°:HackTricks Training AWS Red Team Expert (ARTE)
GCP ν•΄ν‚Ή 배우기 및 μ—°μŠ΅ν•˜κΈ°: HackTricks Training GCP Red Team Expert (GRTE) Azure ν•΄ν‚Ή 배우기 및 μ—°μŠ΅ν•˜κΈ°: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks μ§€μ›ν•˜κΈ°

μ†Œκ°œ

λ§Œμ•½ 당신이 write in a System Path folder에 μ“Έ 수 μžˆλ‹€λŠ” 것을 λ°œκ²¬ν–ˆλ‹€λ©΄(μ°Έκ³ : 이것은 User Path folder에 μ“Έ 수 μžˆλŠ” κ²½μš°μ—λŠ” μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€), μ‹œμŠ€ν…œμ—μ„œ escalate privilegesν•  κ°€λŠ₯성이 μžˆμŠ΅λ‹ˆλ‹€.

이λ₯Ό μœ„ν•΄ 당신은 Dll Hijacking을 μ•…μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” 당신보닀 more privilegesλ₯Ό κ°€μ§„ μ„œλΉ„μŠ€λ‚˜ ν”„λ‘œμ„ΈμŠ€κ°€ λ‘œλ“œν•˜λŠ” 라이브러리λ₯Ό hijack a library being loadedν•˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€. 그리고 κ·Έ μ„œλΉ„μŠ€κ°€ μ‹œμŠ€ν…œ 전체에 μ‘΄μž¬ν•˜μ§€ μ•Šμ„ κ°€λŠ₯성이 큰 Dll을 λ‘œλ“œν•˜λ € ν•˜κΈ° λ•Œλ¬Έμ—, 당신이 μ“Έ 수 μžˆλŠ” System Pathμ—μ„œ 그것을 λ‘œλ“œν•˜λ € μ‹œλ„ν•  κ²ƒμž…λ‹ˆλ‹€.

μžμ„Έν•œ λ‚΄μš©μ€ what is Dll Hijackig을(λ₯Ό) ν™•μΈν•˜μ„Έμš”:

Dll Hijacking

Privesc with Dll Hijacking

λˆ„λ½λœ Dll μ°ΎκΈ°

λ¨Όμ € ν•„μš”ν•œ 것은 당신보닀 more privileges둜 μ‹€ν–‰λ˜λ©° 당신이 μ“Έ 수 μžˆλŠ” load a Dll from the System Path을 μ‹œλ„ν•˜λŠ” ν”„λ‘œμ„ΈμŠ€λ₯Ό identify a processν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

λ¬Έμ œλŠ” μ΄λŸ¬ν•œ 경우 ν•΄λ‹Ή ν”„λ‘œμ„ΈμŠ€λ“€μ΄ 이미 μ‹€ν–‰ 쀑일 κ°€λŠ₯성이 ν¬λ‹€λŠ” μ μž…λ‹ˆλ‹€. μ–΄λ–€ Dll듀이 λˆ„λ½λ˜μ—ˆλŠ”μ§€ 찾으렀면 ν”„λ‘œμ„ΈμŠ€λ“€μ΄ λ‘œλ“œλ˜κΈ° 전에 κ°€λŠ₯ν•œ 빨리 procmon을 μ‹€ν–‰ν•΄μ•Ό ν•©λ‹ˆλ‹€. λ”°λΌμ„œ λˆ„λ½λœ .dll을 찾으렀면 λ‹€μŒμ„ μˆ˜ν–‰ν•˜μ„Έμš”:

  • C:\privesc_hijacking 폴더λ₯Ό μƒμ„±ν•˜κ³  ν•΄λ‹Ή 경둜 C:\privesc_hijackingλ₯Ό System Path env variable에 μΆ”κ°€ν•˜μ„Έμš”. 이 μž‘μ—…μ€ μˆ˜λ™(manually)으둜 ν•˜κ±°λ‚˜ PS둜 μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€:
# Set the folder path to create and check events for
$folderPath = "C:\privesc_hijacking"

# Create the folder if it does not exist
if (!(Test-Path $folderPath -PathType Container)) {
New-Item -ItemType Directory -Path $folderPath | Out-Null
}

# Set the folder path in the System environment variable PATH
$envPath = [Environment]::GetEnvironmentVariable("PATH", "Machine")
if ($envPath -notlike "*$folderPath*") {
$newPath = "$envPath;$folderPath"
[Environment]::SetEnvironmentVariable("PATH", $newPath, "Machine")
}
  • procmon λ₯Ό μ‹€ν–‰ν•˜κ³  Options –> Enable boot logging 둜 μ΄λ™ν•œ λ‹€μŒ ν”„λ‘¬ν”„νŠΈμ—μ„œ OK λ₯Ό λˆ„λ¦…λ‹ˆλ‹€.
  • κ·Έλ‹€μŒ μž¬λΆ€νŒ…(reboot) ν•©λ‹ˆλ‹€. 컴퓨터가 μž¬μ‹œμž‘λ˜λ©΄ procmon 이 κ°€λŠ₯ν•œ ν•œ 빨리 이벀트 기둝을 μ‹œμž‘ν•©λ‹ˆλ‹€.
  • Windowsκ°€ μ‹œμž‘λœ ν›„ procmon 을 λ‹€μ‹œ μ‹€ν–‰ν•˜λ©΄ 이미 μ‹€ν–‰ μ€‘μ΄μ—ˆλ‹€κ³  μ•Œλ¦¬κ³  이벀트λ₯Ό νŒŒμΌμ— μ €μž₯ν• μ§€ λ¬Όμ–΄λ΄…λ‹ˆλ‹€. yes 라고 λ‹΅ν•˜κ³  이벀트λ₯Ό νŒŒμΌμ— μ €μž₯ ν•©λ‹ˆλ‹€.
  • 파일이 μƒμ„±λœ ν›„, μ—΄λ € μžˆλŠ” procmon 창을 λ‹«κ³  이벀트 νŒŒμΌμ„ μ—½λ‹ˆλ‹€.
  • λ‹€μŒ 필터듀을 μΆ”κ°€ν•˜λ©΄ writable System Path ν΄λ”μ—μ„œ μ–΄λ–€ ν”„λ‘œμ„ΈμŠ€κ°€ λ‘œλ“œν•˜λ €κ³  ν–ˆλŠ”μ§€ λͺ¨λ“  Dll을 찾을 수 μžˆμŠ΅λ‹ˆλ‹€:

λˆ„λ½λœ Dlls

무료 가상(vmware) Windows 11 λ¨Έμ‹ μ—μ„œ 이 방법을 μ‹€ν–‰ν–ˆμ„ λ•Œ λ‹€μŒκ³Ό 같은 κ²°κ³Όλ₯Ό μ–»μ—ˆμŠ΅λ‹ˆλ‹€:

이 경우 .exe νŒŒμΌλ“€μ€ μ“Έλͺ¨μ—†μœΌλ‹ˆ λ¬΄μ‹œν•˜κ³ , λˆ„λ½λœ DLL듀은 λ‹€μŒμ—μ„œ λ‘œλ“œλ˜μ—ˆμŠ΅λ‹ˆλ‹€:

μ„œλΉ„μŠ€DllCMD line
Task Scheduler (Schedule)WptsExtensions.dllC:\Windows\system32\svchost.exe -k netsvcs -p -s Schedule
Diagnostic Policy Service (DPS)Unknown.DLLC:\Windows\System32\svchost.exe -k LocalServiceNoNetwork -p -s DPS
???SharedRes.dllC:\Windows\system32\svchost.exe -k UnistackSvcGroup

이걸 찾은 λ’€, λ‹€μŒ ν₯미둜운 λΈ”λ‘œκ·Έ ν¬μŠ€νŠΈλ„ λ°œκ²¬ν–ˆλŠ”λ° abuse WptsExtensions.dll for privesc μ—μ„œλ„ 이λ₯Ό μ„€λͺ…ν•©λ‹ˆλ‹€. 이것이 μ§€κΈˆ μš°λ¦¬κ°€ ν•˜λ €λŠ” μž‘μ—…μž…λ‹ˆλ‹€.

Exploitation

κΆŒν•œμ„ μƒμŠΉμ‹œν‚€κΈ° μœ„ν•΄ WptsExtensions.dll 라이브러리λ₯Ό ν•˜μ΄μž¬ν‚Ήν•  κ²ƒμž…λ‹ˆλ‹€. κ²½λ‘œμ™€ 이름을 μ•Œμ•˜μœΌλ‹ˆ μ•…μ„± dll을 μƒμ„±ν•˜λ©΄ λ©λ‹ˆλ‹€.

try to use any of these examples λ₯Ό μ‹œλ„ν•΄λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€. μ‹€ν–‰ν•  수 μžˆλŠ” νŽ˜μ΄λ‘œλ“œ 예: rev shell νšλ“, μ‚¬μš©μž μΆ”κ°€, beacon μ‹€ν–‰ 등…

Warning

λͺ¨λ“  μ„œλΉ„μŠ€κ°€ NT AUTHORITY\SYSTEM 으둜 μ‹€ν–‰λ˜λŠ” 것은 μ•„λ‹™λ‹ˆλ‹€. μΌλΆ€λŠ” NT AUTHORITY\LOCAL SERVICE 둜 μ‹€ν–‰λ˜λ©° κΆŒν•œμ΄ 더 적기 λ•Œλ¬Έμ— μƒˆ μ‚¬μš©μžλ₯Ό 생성할 수 없을 수 μžˆμŠ΅λ‹ˆλ‹€.
ν•˜μ§€λ§Œ ν•΄λ‹Ή 계정은 seImpersonate κΆŒν•œμ„ κ°€μ§€κ³  μžˆμœΌλ―€λ‘œ potato suite to escalate privileges λ₯Ό μ‚¬μš©ν•΄ κΆŒν•œμ„ μƒμŠΉμ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ 이 경우 μƒˆ μ‚¬μš©μž λ§Œλ“€κΈ°λ₯Ό μ‹œλ„ν•˜λŠ” 것보닀 rev shell이 더 λ‚˜μ€ μ„ νƒμž…λ‹ˆλ‹€.

μž‘μ„± μ‹œμ μ—μ„œλŠ” Task Scheduler μ„œλΉ„μŠ€κ°€ Nt AUTHORITY\SYSTEM 으둜 μ‹€ν–‰λ˜κ³  μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

μ•…μ„± Dll을 μƒμ„±ν•œ ν›„(제 경우 x64 rev shell을 μ‚¬μš©ν–ˆκ³  셸을 μ–»μ—ˆμ§€λ§Œ msfvenomμ—μ„œ μƒμ„±λ˜μ–΄ defenderκ°€ μ°¨λ‹¨ν–ˆμŠ΅λ‹ˆλ‹€), 이λ₯Ό writable System Path에 이름을 WptsExtensions.dll 둜 μ €μž₯ν•˜κ³  컴퓨터λ₯Ό μž¬μ‹œμž‘ν•˜κ±°λ‚˜(λ˜λŠ” ν•΄λ‹Ή μ„œλΉ„μŠ€/ν”„λ‘œκ·Έλž¨μ„ μž¬μ‹œμž‘ν•˜μ—¬ λ‹€μ‹œ μ‹€ν–‰λ˜κ²Œ ν•©λ‹ˆλ‹€).

μ„œλΉ„μŠ€κ°€ μž¬μ‹œμž‘λ˜λ©΄ ν•΄λ‹Ή dll이 λ‘œλ“œλ˜μ–΄ μ‹€ν–‰λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€(λΌμ΄λΈŒλŸ¬λ¦¬κ°€ μ˜ˆμƒλŒ€λ‘œ λ‘œλ“œλ˜μ—ˆλŠ”μ§€ ν™•μΈν•˜λ €λ©΄ procmon νŠΈλ¦­μ„ μž¬μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€).

Tip

AWS ν•΄ν‚Ή 배우기 및 μ—°μŠ΅ν•˜κΈ°:HackTricks Training AWS Red Team Expert (ARTE)
GCP ν•΄ν‚Ή 배우기 및 μ—°μŠ΅ν•˜κΈ°: HackTricks Training GCP Red Team Expert (GRTE) Azure ν•΄ν‚Ή 배우기 및 μ—°μŠ΅ν•˜κΈ°: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks μ§€μ›ν•˜κΈ°