135, 593 - Pentesting MSRPC

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 μ§€μ›ν•˜κΈ°

κΈ°λ³Έ 정보

Microsoft 원격 ν”„λ‘œμ‹œμ € 호좜(MSRPC) ν”„λ‘œν† μ½œμ€ ν΄λΌμ΄μ–ΈνŠΈ-μ„œλ²„ λͺ¨λΈλ‘œ, ν”„λ‘œκ·Έλž¨μ΄ λ„€νŠΈμ›Œν¬μ˜ μ„ΈλΆ€ 사항을 μ΄ν•΄ν•˜μ§€ μ•Šκ³ λ„ λ‹€λ₯Έ 컴퓨터에 μœ„μΉ˜ν•œ ν”„λ‘œκ·Έλž¨μœΌλ‘œλΆ€ν„° μ„œλΉ„μŠ€λ₯Ό μš”μ²­ν•  수 있게 ν•΄μ€λ‹ˆλ‹€. 이 ν”„λ‘œν† μ½œμ€ μ²˜μŒμ— μ˜€ν”ˆ μ†ŒμŠ€ μ†Œν”„νŠΈμ›¨μ–΄μ—μ„œ νŒŒμƒλ˜μ—ˆμœΌλ©°, 이후 Microsoft에 μ˜ν•΄ 개발되고 μ €μž‘κΆŒμ΄ λΆ€μ—¬λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

RPC μ—”λ“œν¬μΈνŠΈ λ§€νΌλŠ” TCP 및 UDP 포트 135, TCP 139 및 445μ—μ„œ SMB(널 λ˜λŠ” 인증된 μ„Έμ…˜ μ‚¬μš©)둜, 그리고 TCP 포트 593μ—μ„œ μ›Ή μ„œλΉ„μŠ€λ‘œ μ ‘κ·Όν•  수 μžˆμŠ΅λ‹ˆλ‹€.

135/tcp   open     msrpc         Microsoft Windows RPC

MSRPCλŠ” μ–΄λ–»κ²Œ μž‘λ™ν•˜λ‚˜μš”?

ν΄λΌμ΄μ–ΈνŠΈ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— μ˜ν•΄ μ‹œμž‘λœ MSRPC ν”„λ‘œμ„ΈμŠ€λŠ” 둜컬 μŠ€ν… ν”„λ‘œμ‹œμ €λ₯Ό ν˜ΈμΆœν•œ λ‹€μŒ ν΄λΌμ΄μ–ΈνŠΈ λŸ°νƒ€μž„ λΌμ΄λΈŒλŸ¬λ¦¬μ™€ μƒν˜Έμž‘μš©ν•˜μ—¬ μš”μ²­μ„ μ„œλ²„λ‘œ μ€€λΉ„ν•˜κ³  μ „μ†‘ν•˜λŠ” 과정을 ν¬ν•¨ν•©λ‹ˆλ‹€. μ—¬κΈ°μ—λŠ” λ§€κ°œλ³€μˆ˜λ₯Ό ν‘œμ€€ λ„€νŠΈμ›Œν¬ 데이터 ν‘œν˜„ ν˜•μ‹μœΌλ‘œ λ³€ν™˜ν•˜λŠ” 것이 ν¬ν•¨λ©λ‹ˆλ‹€. μ„œλ²„κ°€ 원격인 경우 전솑 ν”„λ‘œν† μ½œμ˜ 선택은 λŸ°νƒ€μž„ λΌμ΄λΈŒλŸ¬λ¦¬μ— μ˜ν•΄ κ²°μ •λ˜μ–΄ RPCκ°€ λ„€νŠΈμ›Œν¬ μŠ€νƒμ„ 톡해 μ „λ‹¬λ˜λ„λ‘ 보μž₯ν•©λ‹ˆλ‹€.

https://0xffsec.com/handbook/images/msrpc.png

λ…ΈμΆœλœ RPC μ„œλΉ„μŠ€ μ‹λ³„ν•˜κΈ°

TCP, UDP, HTTP 및 SMBλ₯Ό ν†΅ν•œ RPC μ„œλΉ„μŠ€μ˜ λ…ΈμΆœμ€ RPC λ‘œμΌ€μ΄ν„° μ„œλΉ„μŠ€ 및 κ°œλ³„ μ—”λ“œν¬μΈνŠΈλ₯Ό μΏΌλ¦¬ν•˜μ—¬ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. rpcdump와 같은 λ„κ΅¬λŠ” IFID κ°’μœΌλ‘œ ν‘œμ‹œλœ κ³ μœ ν•œ RPC μ„œλΉ„μŠ€μ˜ 식별을 μš©μ΄ν•˜κ²Œ ν•˜μ—¬ μ„œλΉ„μŠ€ 세뢀정보 및 톡신 바인딩을 λ“œλŸ¬λƒ…λ‹ˆλ‹€:

D:\rpctools> rpcdump [-p port] <IP>
**IFID**: 5a7b91f8-ff00-11d0-a9b2-00c04fb6e6fc version 1.0
Annotation: Messenger Service
UUID: 00000000-0000-0000-0000-000000000000
Binding: ncadg_ip_udp:<IP>[1028]

RPC λ‘œμΌ€μ΄ν„° μ„œλΉ„μŠ€μ— λŒ€ν•œ 접근은 νŠΉμ • ν”„λ‘œν† μ½œμ„ 톡해 ν™œμ„±ν™”λ©λ‹ˆλ‹€: ncacn_ip_tcp 및 ncadg_ip_udpλŠ” 포트 135λ₯Ό 톡해 μ ‘κ·Όν•˜κΈ° μœ„ν•΄, ncacn_npλŠ” SMB 연결을 μœ„ν•΄, ncacn_httpλŠ” μ›Ή 기반 RPC 톡신을 μœ„ν•΄ μ‚¬μš©λ©λ‹ˆλ‹€. λ‹€μŒ λͺ…λ Ήμ–΄λŠ” 주둜 포트 135에 μ΄ˆμ μ„ λ§žμΆ”μ–΄ MSRPC μ„œλΉ„μŠ€μ— λŒ€ν•œ 감사 및 μƒν˜Έμž‘μš©μ„ μœ„ν•΄ Metasploit λͺ¨λ“ˆμ„ ν™œμš©ν•˜λŠ” 예λ₯Ό λ³΄μ—¬μ€λ‹ˆλ‹€:

use auxiliary/scanner/dcerpc/endpoint_mapper
use auxiliary/scanner/dcerpc/hidden
use auxiliary/scanner/dcerpc/management
use auxiliary/scanner/dcerpc/tcp_dcerpc_auditor
rpcdump.py <IP> -p 135

λͺ¨λ“  μ˜΅μ…˜μ€ tcp_dcerpc_auditorλ₯Ό μ œμ™Έν•˜κ³  포트 135μ—μ„œ MSRPCλ₯Ό νƒ€κ²ŸνŒ…ν•˜λ„λ‘ νŠΉλ³„νžˆ μ„€κ³„λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

μ£Όλͺ©ν•  λ§Œν•œ RPC μΈν„°νŽ˜μ΄μŠ€

  • IFID: 12345778-1234-abcd-ef00-0123456789ab
  • Named Pipe: \pipe\lsarpc
  • Description: LSA μΈν„°νŽ˜μ΄μŠ€, μ‚¬μš©μž 열거에 μ‚¬μš©λ©λ‹ˆλ‹€.
  • IFID: 3919286a-b10c-11d0-9ba8-00c04fd92ef5
  • Named Pipe: \pipe\lsarpc
  • Description: LSA 디렉터리 μ„œλΉ„μŠ€(DS) μΈν„°νŽ˜μ΄μŠ€, 도메인 및 μ‹ λ’° 관계 열거에 μ‚¬μš©λ©λ‹ˆλ‹€.
  • IFID: 12345778-1234-abcd-ef00-0123456789ac
  • Named Pipe: \pipe\samr
  • Description: LSA SAMR μΈν„°νŽ˜μ΄μŠ€, 곡개 SAM λ°μ΄ν„°λ² μ΄μŠ€ μš”μ†Œ(예: μ‚¬μš©μž 이름)에 μ ‘κ·Όν•˜κ³  계정 잠금 정책에 관계없이 μ‚¬μš©μž λΉ„λ°€λ²ˆν˜Έλ₯Ό 무차별 λŒ€μž…ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.
  • IFID: 1ff70682-0a51-30e8-076d-740be8cee98b
  • Named Pipe: \pipe\atsvc
  • Description: μž‘μ—… μŠ€μΌ€μ€„λŸ¬, μ›κ²©μœΌλ‘œ λͺ…령을 μ‹€ν–‰ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.
  • IFID: 338cd001-2244-31f1-aaaa-900038001003
  • Named Pipe: \pipe\winreg
  • Description: 원격 λ ˆμ§€μŠ€νŠΈλ¦¬ μ„œλΉ„μŠ€, μ‹œμŠ€ν…œ λ ˆμ§€μŠ€νŠΈλ¦¬μ— μ ‘κ·Όν•˜κ³  μˆ˜μ •ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.
  • IFID: 367abb81-9844-35f1-ad32-98f038001003
  • Named Pipe: \pipe\svcctl
  • Description: μ„œλΉ„μŠ€ μ œμ–΄ κ΄€λ¦¬μž 및 μ„œλ²„ μ„œλΉ„μŠ€, μ›κ²©μœΌλ‘œ μ„œλΉ„μŠ€λ₯Ό μ‹œμž‘ 및 μ€‘μ§€ν•˜κ³  λͺ…령을 μ‹€ν–‰ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.
  • IFID: 4b324fc8-1670-01d3-1278-5a47bf6ee188
  • Named Pipe: \pipe\srvsvc
  • Description: μ„œλΉ„μŠ€ μ œμ–΄ κ΄€λ¦¬μž 및 μ„œλ²„ μ„œλΉ„μŠ€, μ›κ²©μœΌλ‘œ μ„œλΉ„μŠ€λ₯Ό μ‹œμž‘ 및 μ€‘μ§€ν•˜κ³  λͺ…령을 μ‹€ν–‰ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.
  • IFID: 4d9f4ab8-7d1c-11cf-861e-0020af6e7c57
  • Named Pipe: \pipe\epmapper
  • Description: DCOM μΈν„°νŽ˜μ΄μŠ€, λΉ„λ°€λ²ˆν˜Έ 무차별 λŒ€μž… 및 WM을 ν†΅ν•œ 정보 μˆ˜μ§‘μ— μ‚¬μš©λ©λ‹ˆλ‹€.

IP μ£Όμ†Œ 식별

https://github.com/mubix/IOXIDResolverλ₯Ό μ‚¬μš©ν•˜λ©΄ Airbus researchμ—μ„œ μ œκ³΅ν•˜λŠ” ServerAlive2 λ©”μ„œλ“œλ₯Ό IOXIDResolver μΈν„°νŽ˜μ΄μŠ€ λ‚΄μ—μ„œ μ•…μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

이 방법은 HTB λ°•μŠ€ _APT_μ—μ„œ IPv6 μ£Όμ†Œλ‘œ μΈν„°νŽ˜μ΄μŠ€ 정보λ₯Ό μ–»λŠ” 데 μ‚¬μš©λ˜μ—ˆμŠ΅λ‹ˆλ‹€. μ—¬κΈ°μ—μ„œ 0xdf APT μž‘μ„±λ¬Όμ„ ν™•μΈν•˜λ©΄, _stringbinding_을 μ‚¬μš©ν•˜λŠ” Impacket의 rpcmap.pyλ₯Ό μ‚¬μš©ν•˜λŠ” λŒ€μ²΄ 방법이 ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

μœ νš¨ν•œ 자격 증λͺ…을 μ‚¬μš©ν•œ RCE μ‹€ν–‰

μœ νš¨ν•œ μ‚¬μš©μžμ˜ 자격 증λͺ…이 μžˆλŠ” 경우 dcomexec.pyμ—μ„œ 원격 μ½”λ“œλ₯Ό μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ‚¬μš© κ°€λŠ₯ν•œ λ‹€μ–‘ν•œ 객체둜 μ‹œλ„ν•˜λŠ” 것을 μžŠμ§€ λ§ˆμ„Έμš”

  • ShellWindows
  • ShellBrowserWindow
  • MMC20

포트 593

rpctools의 rpcdump.exeλŠ” 이 ν¬νŠΈμ™€ μƒν˜Έμž‘μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

MSRPC μΈν„°νŽ˜μ΄μŠ€μ˜ μžλ™ 퍼징

MS-RPC μΈν„°νŽ˜μ΄μŠ€λŠ” 크고 μ’…μ’… λ¬Έμ„œν™”λ˜μ§€ μ•Šμ€ 곡격 ν‘œλ©΄μ„ λ…ΈμΆœν•©λ‹ˆλ‹€. μ˜€ν”ˆ μ†ŒμŠ€ MS-RPC-Fuzzer PowerShell λͺ¨λ“ˆμ€ James Forshaw의 NtObjectManagerλ₯Ό 기반으둜 ν•˜μ—¬ λ™μ μœΌλ‘œ Windows λ°”μ΄λ„ˆλ¦¬μ— 이미 μ‘΄μž¬ν•˜λŠ” μΈν„°νŽ˜μ΄μŠ€ λ©”νƒ€λ°μ΄ν„°μ—μ„œ RPC ν΄λΌμ΄μ–ΈνŠΈ μŠ€ν…μ„ μƒμ„±ν•©λ‹ˆλ‹€. μŠ€ν…μ΄ μ‘΄μž¬ν•˜λ©΄ λͺ¨λ“ˆμ€ λ³€ν˜•λœ μž…λ ₯으둜 각 ν”„λ‘œμ‹œμ €λ₯Ό ν­κ²©ν•˜κ³  κ²°κ³Όλ₯Ό κΈ°λ‘ν•˜μ—¬ IDL을 ν•œ 쀄도 μž‘μ„±ν•˜μ§€ μ•Šκ³  RPC μ—”λ“œν¬μΈνŠΈμ˜ μž¬ν˜„ κ°€λŠ₯ν•œ λŒ€κ·œλͺ¨ 퍼징을 κ°€λŠ₯ν•˜κ²Œ ν•©λ‹ˆλ‹€.

1. μΈν„°νŽ˜μ΄μŠ€ λͺ©λ‘ μž‘μ„±

# Import the module (download / git clone first)
Import-Module .\MS-RPC-Fuzzer.psm1

# Parse a single binary
Get-RpcServerData -Target "C:\Windows\System32\efssvc.dll" -OutPath .\output

# Or crawl the whole %SystemRoot%\System32 directory
Get-RpcServerData -OutPath .\output

Get-RpcServerDataλŠ” UUID, 버전, 바인딩 λ¬Έμžμ—΄(λͺ…λͺ…λœ νŒŒμ΄ν”„ / TCP / HTTP) 및 λͺ¨λ“  μΈν„°νŽ˜μ΄μŠ€μ— λŒ€ν•œ 전체 ν”„λ‘œμ‹œμ € ν”„λ‘œν† νƒ€μž…μ„ μΆ”μΆœν•˜μ—¬ rpcServerData.json에 μ €μž₯ν•©λ‹ˆλ‹€.

2. 퍼저 μ‹€ν–‰

'.\output\rpcServerData.json' |
Invoke-RpcFuzzer -OutPath .\output `
-MinStrLen 100  -MaxStrLen 1000 `
-MinIntSize 9999 -MaxIntSize 99999

κ΄€λ ¨ μ˜΅μ…˜:

  • -MinStrLen / -MaxStrLen – μƒμ„±λœ λ¬Έμžμ—΄μ˜ 크기 λ²”μœ„
  • -MinIntSize / -MaxIntSize – λ³€ν˜•λœ μ •μˆ˜μ˜ κ°’ λ²”μœ„ (μ˜€λ²„ν”Œλ‘œμš° ν…ŒμŠ€νŠΈμ— 유용)
  • -Sorted – λ§€κ°œλ³€μˆ˜ μ˜μ‘΄μ„±μ„ μ‘΄μ€‘ν•˜λŠ” μˆœμ„œλ‘œ 절차λ₯Ό μ‹€ν–‰ν•˜μ—¬ ν•œ 호좜의 좜λ ₯이 λ‹€μŒ 호좜의 μž…λ ₯으둜 μ‚¬μš©λ  수 μžˆλ„λ‘ 함 (도달 κ°€λŠ₯ν•œ 경둜λ₯Ό 극적으둜 μ¦κ°€μ‹œν‚΄)

νΌμ €λŠ” 2κ°€μ§€ μ „λž΅μ„ κ΅¬ν˜„ν•©λ‹ˆλ‹€:

  1. κΈ°λ³Έ 퍼저 – λ¬΄μž‘μœ„ μ›μ‹œ κ°’ + 볡합 μœ ν˜•μ— λŒ€ν•œ κΈ°λ³Έ μΈμŠ€ν„΄μŠ€
  2. μ •λ ¬λœ 퍼저 – μ˜μ‘΄μ„± 인식 μ •λ ¬ (μ°Έμ‘°: docs/Procedure dependency design.md)

λͺ¨λ“  ν˜ΈμΆœμ€ log.txt에 μ›μžμ μœΌλ‘œ κΈ°λ‘λ©λ‹ˆλ‹€; 좩돌 ν›„ λ§ˆμ§€λ§‰ 쀄은 μ¦‰μ‹œ 문제λ₯Ό μΌμœΌν‚¨ 절차λ₯Ό μ•Œλ €μ€λ‹ˆλ‹€. 각 호좜의 κ²°κ³ΌλŠ” μ„Έ 개의 JSON 파일둜 λΆ„λ₯˜λ©λ‹ˆλ‹€:

  • allowed.json – 호좜이 μ„±κ³΅ν•˜κ³  데이터λ₯Ό λ°˜ν™˜ν•¨
  • denied.json – μ„œλ²„κ°€ Access Denied둜 응닡함
  • error.json – 기타 였λ₯˜ / 좩돌

3. Neo4j둜 μ‹œκ°ν™”ν•˜κΈ°

'.\output\allowed.json' |
Import-DataToNeo4j -Neo4jHost 192.168.56.10:7474 -Neo4jUsername neo4j

Import-DataToNeo4jλŠ” JSON μ•„ν‹°νŒ©νŠΈλ₯Ό κ·Έλž˜ν”„ ꡬ쑰둜 λ³€ν™˜ν•©λ‹ˆλ‹€:

  • RPC μ„œλ²„, μΈν„°νŽ˜μ΄μŠ€ 및 μ ˆμ°¨λŠ” λ…Έλ“œμž…λ‹ˆλ‹€.
  • μƒν˜Έμž‘μš©(ALLOWED, DENIED, ERROR)은 κ΄€κ³„μž…λ‹ˆλ‹€.

Cypher 쿼리λ₯Ό μ‚¬μš©ν•˜μ—¬ μœ„ν—˜ν•œ 절차λ₯Ό λΉ λ₯΄κ²Œ μ°Ύμ•„λ‚΄κ±°λ‚˜ 좩돌 μ΄μ „μ˜ μ •ν™•ν•œ 호좜 체인을 μž¬μƒν•  수 μžˆμŠ΅λ‹ˆλ‹€.

⚠️ νΌμ €λŠ” νŒŒκ΄΄μ μž…λ‹ˆλ‹€: μ„œλΉ„μŠ€ 좩돌 및 BSODλ₯Ό μ˜ˆμƒν•˜μ‹­μ‹œμ˜€ – 항상 격리된 VM μŠ€λƒ…μƒ·μ—μ„œ μ‹€ν–‰ν•˜μ‹­μ‹œμ˜€.

μžλ™ν™”λœ μΈν„°νŽ˜μ΄μŠ€ μ—΄κ±° 및 동적 ν΄λΌμ΄μ–ΈνŠΈ 생성 (NtObjectManager)

PowerShell μ „λ¬Έκ°€ James ForshawλŠ” μ˜€ν”ˆ μ†ŒμŠ€ NtObjectManager λͺ¨λ“ˆ λ‚΄μ—μ„œ λŒ€λΆ€λΆ„μ˜ Windows RPC λ‚΄λΆ€λ₯Ό κ³΅κ°œν–ˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό μ‚¬μš©ν•˜λ©΄ IDL, MIDL λ˜λŠ” μˆ˜λ™ μ–Έλ§ˆμƒ¬λ§ 없이 λͺ‡ 초 λ§Œμ— λͺ¨λ“  RPC μ„œλ²„ DLL / EXEλ₯Ό μ™„μ „ν•œ κΈ°λŠ₯을 κ°–μΆ˜ ν΄λΌμ΄μ–ΈνŠΈ μŠ€ν…μœΌλ‘œ λ³€ν™˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

# Install the module once
Install-Module NtObjectManager -Force

# Parse every RPC interface exported by the target binary
$rpcinterfaces = Get-RpcServer "C:\Windows\System32\efssvc.dll"
$rpcinterfaces | Format-Table Name,Uuid,Version,Procedures

# Inspect a single procedure (opnum 0)
$rpcinterfaces[0].Procedures[0] | Format-List *

μ „ν˜•μ μΈ 좜λ ₯은 λ§€κ°œλ³€μˆ˜ μœ ν˜•μ„ MIDL에 λ‚˜νƒ€λ‚˜λŠ” κ·ΈλŒ€λ‘œ λ…ΈμΆœν•©λ‹ˆλ‹€ (예: FC_C_WSTRING, FC_LONG, FC_BIND_CONTEXT).

μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ•Œκ²Œ 되면 μ»΄νŒŒμΌν•  μ€€λΉ„κ°€ 된 C# ν΄λΌμ΄μ–ΈνŠΈλ₯Ό 생성할 수 μžˆμŠ΅λ‹ˆλ‹€:

# Reverse the MS-EFSR (EfsRpc*) interface into C#
Format-RpcClient $rpcinterfaces[0] -Namespace MS_EFSR -OutputPath .\MS_EFSR.cs

μƒμ„±λœ μŠ€ν… μ•ˆμ—λŠ” λ‹€μŒκ³Ό 같은 λ©”μ„œλ“œκ°€ ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€:

public int EfsRpcOpenFileRaw(out Marshal.NdrContextHandle ctx, string FileName, int Flags) {
// marshals parameters & calls opnum 0
}

PowerShell λ„μš°λ―Έ Get-RpcClientλŠ” λŒ€ν™”ν˜• ν΄λΌμ΄μ–ΈνŠΈ 객체λ₯Ό μƒμ„±ν•˜μ—¬ 절차λ₯Ό μ¦‰μ‹œ ν˜ΈμΆœν•  수 μžˆμŠ΅λ‹ˆλ‹€:

$client = Get-RpcClient $rpcinterfaces[0]
Connect-RpcClient $client -stringbinding 'ncacn_np:127.0.0.1[\\pipe\\efsrpc]' `
-AuthenticationLevel PacketPrivacy `
-AuthenticationType  WinNT  # NTLM auth

# Invoke the procedure β†’ returns an authenticated context handle
$ctx = New-Object Marshal.NdrContextHandle
$client.EfsRpcOpenFileRaw([ref]$ctx, "\\\127.0.0.1\test", 0)

인증(Kerberos / NTLM) 및 μ•”ν˜Έν™” μˆ˜μ€€(PacketIntegrity, PacketPrivacy, …)은 Connect-RpcClient cmdlet을 톡해 직접 제곡될 수 μžˆμŠ΅λ‹ˆλ‹€ – μ΄λŠ” κ³ κΈ‰ κΆŒν•œ λͺ…λͺ…λœ νŒŒμ΄ν”„λ₯Ό λ³΄ν˜Έν•˜λŠ” λ³΄μ•ˆ μ„€λͺ…μžλ₯Ό μš°νšŒν•˜λŠ” 데 μ΄μƒμ μž…λ‹ˆλ‹€.

μ»¨ν…μŠ€νŠΈ 인식 RPC 퍼징 (MS-RPC-Fuzzer)

정적 μΈν„°νŽ˜μ΄μŠ€ 지식은 ν›Œλ₯­ν•˜μ§€λ§Œ, μ‹€μ œλ‘œ μ›ν•˜λŠ” 것은 μ»¨ν…μŠ€νŠΈ ν•Έλ“€κ³Ό λ³΅μž‘ν•œ λ§€κ°œλ³€μˆ˜ 체인을 μ΄ν•΄ν•˜λŠ” 컀버리지 기반 νΌμ§•μž…λ‹ˆλ‹€. μ˜€ν”ˆ μ†ŒμŠ€ MS-RPC-Fuzzer ν”„λ‘œμ νŠΈλŠ” λ°”λ‘œ κ·Έ μ›Œν¬ν”Œλ‘œμš°λ₯Ό μžλ™ν™”ν•©λ‹ˆλ‹€:

  1. λŒ€μƒ λ°”μ΄λ„ˆλ¦¬(Get-RpcServer)에 μ˜ν•΄ 내보내진 λͺ¨λ“  μΈν„°νŽ˜μ΄μŠ€/절차λ₯Ό μ—΄κ±°ν•©λ‹ˆλ‹€.
  2. 각 μΈν„°νŽ˜μ΄μŠ€μ— λŒ€ν•œ 동적 ν΄λΌμ΄μ–ΈνŠΈλ₯Ό μƒμ„±ν•©λ‹ˆλ‹€(Format-RpcClient).
  3. μ›λž˜ NDR μœ ν˜•μ„ μ‘΄μ€‘ν•˜λ©΄μ„œ μž…λ ₯ λ§€κ°œλ³€μˆ˜(μ™€μ΄λ“œ λ¬Έμžμ—΄ 길이, μ •μˆ˜ λ²”μœ„, μ—΄κ±°ν˜•)λ₯Ό λ¬΄μž‘μœ„ν™”ν•©λ‹ˆλ‹€.
  4. ν•œ ν˜ΈμΆœμ— μ˜ν•΄ λ°˜ν™˜λœ μ»¨ν…μŠ€νŠΈ 핸듀을 μΆ”μ ν•˜μ—¬ 후속 μ ˆμ°¨μ— μžλ™μœΌλ‘œ κ³΅κΈ‰ν•©λ‹ˆλ‹€.
  5. μ„ νƒν•œ 전솑(ALPC, TCP, HTTP λ˜λŠ” λͺ…λͺ…λœ νŒŒμ΄ν”„)에 λŒ€ν•΄ λŒ€λŸ‰ ν˜ΈμΆœμ„ μ‹€ν–‰ν•©λ‹ˆλ‹€.
  6. μ’…λ£Œ μƒνƒœ/였λ₯˜/νƒ€μž„μ•„μ›ƒμ„ κΈ°λ‘ν•˜κ³  μΈν„°νŽ˜μ΄μŠ€ β†’ 절차 β†’ λ§€κ°œλ³€μˆ˜ 관계 및 좩돌 ν΄λŸ¬μŠ€ν„°λ₯Ό μ‹œκ°ν™”ν•˜κΈ° μœ„ν•΄ Neo4j κ°€μ Έμ˜€κΈ° νŒŒμΌμ„ λ‚΄λ³΄λƒ…λ‹ˆλ‹€.

μ˜ˆμ‹œ μ‹€ν–‰(λͺ…λͺ…λœ νŒŒμ΄ν”„ λŒ€μƒ):

Invoke-MSRPCFuzzer -Pipe "\\.\pipe\efsrpc" -Auth NTLM `
-MinLen 1  -MaxLen 0x400 `
-Iterations 100000 `
-OutDir .\results

단일 경계 초과 μ“°κΈ° λ˜λŠ” 예기치 μ•Šμ€ μ˜ˆμ™ΈλŠ” 이λ₯Ό μœ λ°œν•œ μ •ν™•ν•œ opnum + 퍼즈된 νŽ˜μ΄λ‘œλ“œμ™€ ν•¨κ»˜ μ¦‰μ‹œ λ“œλŸ¬λ‚©λ‹ˆλ‹€. μ΄λŠ” μ•ˆμ •μ μΈ κ°œλ… 증λͺ… μ΅μŠ€ν”Œλ‘œμž‡μ˜ μ™„λ²½ν•œ μ‹œμž‘μ μž…λ‹ˆλ‹€.

⚠️ λ§Žμ€ RPC μ„œλΉ„μŠ€λŠ” NT AUTHORITY\SYSTEM으둜 μ‹€ν–‰λ˜λŠ” ν”„λ‘œμ„ΈμŠ€μ—μ„œ μ‹€ν–‰λ©λ‹ˆλ‹€. μ—¬κΈ°μ„œ λ©”λͺ¨λ¦¬ μ•ˆμ „μ„± λ¬Έμ œλŠ” 일반적으둜 둜컬 κΆŒν•œ μƒμŠΉ λ˜λŠ” (SMB/135λ₯Ό 톡해 λ…ΈμΆœλ  경우) 원격 μ½”λ“œ μ‹€ν–‰μœΌλ‘œ μ΄μ–΄μ§‘λ‹ˆλ‹€.

References

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 μ§€μ›ν•˜κΈ°