Skip to content

Commit b344b83

Browse files
committed
dcerpc: add support for http-v1 legacy connect
1 parent a96d5f2 commit b344b83

File tree

4 files changed

+153
-3
lines changed

4 files changed

+153
-3
lines changed

dcerpc/binding.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -437,7 +437,7 @@ func ParseStringBinding(s string) (*StringBinding, error) {
437437
url.Endpoint, url.Extra = "", extras
438438
}
439439
switch url.ProtocolSequence {
440-
case ProtocolSequenceIPTCP:
440+
case ProtocolSequenceIPTCP, ProtocolSequenceHTTP:
441441
// parse the port number.
442442
if _, err := strconv.ParseUint(url.Endpoint, 10, 16); err != nil {
443443
url.Endpoint, url.Extra = "", extras

dcerpc/conn.go

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -420,6 +420,48 @@ func (t *conn) dialConn(ctx context.Context, binding StringBinding) (RawConn, er
420420

421421
return conn, nil
422422

423+
case ProtocolSequenceHTTP:
424+
425+
addr := net.JoinHostPort(binding.NetworkAddress, binding.Endpoint)
426+
427+
if binding.NetworkAddress == "" || binding.NetworkAddress == "0.0.0.0" {
428+
addr = net.JoinHostPort(t.serverAddr, binding.Endpoint)
429+
}
430+
431+
t.logger.Debug().Msgf("dialing http (v1) %s", addr)
432+
433+
var (
434+
conn RawConn
435+
err error
436+
)
437+
438+
if t.settings.Dialer != nil {
439+
if conn, err = t.settings.Dialer.DialContext(ctx, "tcp", addr); err != nil {
440+
return nil, fmt.Errorf("ncacn_http: custom dialer: %w", err)
441+
}
442+
} else {
443+
if conn, err = net.DialTimeout("tcp", addr, t.settings.Timeout); err != nil {
444+
return nil, fmt.Errorf("ncacn_http: %w", err)
445+
}
446+
}
447+
448+
tmp := make([]byte, 1024)
449+
450+
n, err := conn.Read(tmp)
451+
if err != nil {
452+
conn.Close()
453+
return nil, fmt.Errorf("ncacn_http: read http response: %w", err)
454+
}
455+
456+
if string(tmp[:n]) != "ncacn_http/1.0" {
457+
conn.Close()
458+
return nil, fmt.Errorf("ncacn_http: invalid http response, expected 'ncacn_http/1.0', got '%s'", string(tmp[:n]))
459+
}
460+
461+
t.logger.Debug().Msgf("dialing http %s done", addr)
462+
463+
return conn, nil
464+
423465
case ProtocolSequenceNamedPipe:
424466

425467
t.logger.Debug().Msgf("dialing smb named pipe %s:%d:%s\\%s",

msrpc/well_known/data/well_known_endpoints.tsv

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -325,7 +325,7 @@ F120A684-B926-447F-9DF4-C966CB785648 MS-RAI Remote Assistance Initiation Protoco
325325
811109BF-A4E1-11D1-AB54-00A0C91E9B45 MS-RAIW Remote Administrative Interface: WINS winsif2 v1.0 ncacn_np:WinsPipe
326326
45F52C28-7F9F-101A-B52B-08002B2EFABE MS-RAIW Remote Administrative Interface: WINS winsif v1.0 ncacn_np:WinsPipe
327327
A35AF600-9CF4-11CD-A076-08002B2BD711 MS-RDPESC Remote Desktop Protocol: Smart Card Virtual Channel Extension TypeScardPack v1.0
328-
E1AF8308-5D1F-11C9-91A4-08002B14A0FA MS-RPCE Endpoint Mapper Protocol EndpointMapper v3.0 ncacn_ip_tcp:135 ncacn_np:epmapper
328+
E1AF8308-5D1F-11C9-91A4-08002B14A0FA MS-RPCE Endpoint Mapper Protocol EndpointMapper v3.0 ncacn_ip_tcp:135 ncacn_np:epmapper ncacn_http:593
329329
AFA8BD80-7D8A-11C9-BEF4-08002B102989 MS-RPCE Remote Management Protocol RemoteManagement v1.0 ncacn_ip_tcp:135
330330
71710533-BEBA-4937-8319-B5DBEF9CCC36 MS-RPCE Transfer Syntax NDR64 TransferNDR64 v1.0
331331
8A885D04-1CEB-11C9-9FE8-08002B104860 MS-RPCE Transfer Syntax NDR TransferNDR v2.0
@@ -762,3 +762,21 @@ E60C73E6-88F9-11CF-9AF1-0020AF6E72F4 RPCSS Local Object Exporter Service ILocalO
762762
0B0A6584-9E0F-11CF-A3CF-00805F68CB1B RPCSS Local Endpoint Mapper localepmp v1.1
763763
1D55B526-C137-46C5-AB79-638F2A68E869 RPCSS Dbgidl Dbgidl v1.0
764764
64FE0B7F-9EF5-4553-A7DB-9A1975777554 RPCSS Fwidl Fwidl v1.0
765+
4F32ADC8-6052-4A04-8701-293CCF2096F0 MS-DLL sspisrv.dll: LSA SSPI RPC interface sspirpc v1.0
766+
D25576E4-00D2-43F7-98F9-B4C0724158F9 MS-DLL lsasrv.dll: LSA Server lsasrv v1.0
767+
00000134-0000-0000-C000-000000000046 MS-DCOM The OID Rundown Interface IRundown v0.0
768+
18F70770-8E64-11CF-9AF1-0020AF6E72F4 MS-DCOM combase.dll: Microsoft COM for Windows combase v0.0
769+
A2C45F7C-7D32-46AD-96F5-ADAFB486BE74 MS-DLL Sens.dll: System Event Notification Service (SENS) servicechannel v1.0
770+
93149CA2-973B-11D1-8C39-00C04FB984F9 MS-DLL SceSvc SceSvc v0.0
771+
F50A28CF-5C9C-4F7E-9D80-E25E16E18C59 MS-WMI Internal_IWbemServices Internal_IWbemServices v0.0
772+
1BE41572-91DD-11D1-AEB2-00C04FB68820 MS-WMI IWbemProviderInit IWbemProviderInit v0.0
773+
6919DD07-1637-4611-A8A7-C16FAC5B2D53 MS-WMI Internal_IWbemProviderInit Internal_IWbemProviderInit v0.0
774+
FEC1B0AC-5808-4033-A915-C0185934581E MS-WMI _IWmiProviderSite _IWmiProviderSite v0.0
775+
E245105B-B06E-11D0-AD61-00C04FD8FDFF MS-WMI IWbemEventProvider IWbemEventProvider v0.0
776+
FD450835-CF1B-4C87-9FD2-5E0D42FDE081 MS-WMI Internal_IWbemEventProvider Internal_IWbemEventProvider v0.0
777+
580ACAF8-FA1C-11D0-AD72-00C04FD8FDFF MS-WMI IWbemEventProviderQuerySink IWbemEventProviderQuerySink v0.0
778+
8A0DC377-A9D3-41CB-BD69-AE1FDAF2DC68 MS-WMI Internal_IWbemEventProviderQuerySink Internal_IWbemEventProviderQuerySink v0.0
779+
631F7D96-D993-11D2-B339-00105A1F4AAF MS-WMI IWbemEventProviderSecurity IWbemEventProviderSecurity v0.0
780+
DF2373F5-EFB2-475C-AD58-3102D61967D4 MS-WMI Internal_IWbemEventProviderSecurity Internal_IWbemEventProviderSecurity v0.0
781+
00000132-0000-0000-C000-000000000046 MS-DCOM ILocalSystemActivator ILocalSystemActivator v0.0
782+
2A82BB21-E44F-4791-9AA1-DFAE788E2F43 MS-DLL UBPM.dll: Unified Background Process Manager UBPM v1.0

msrpc/well_known/well_known_endpoints.go

Lines changed: 91 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -769,6 +769,24 @@ var (
769769
RPCSSLocalepmp = uuid.UUID{TimeLow: 0xb0a6584, TimeMid: 0x9e0f, TimeHiAndVersion: 0x11cf, ClockSeqHiAndReserved: 0xa3, ClockSeqLow: 0xcf, Node: [6]uint8{0x0, 0x80, 0x5f, 0x68, 0xcb, 0x1b}}
770770
RPCSSDbgidl = uuid.UUID{TimeLow: 0x1d55b526, TimeMid: 0xc137, TimeHiAndVersion: 0x46c5, ClockSeqHiAndReserved: 0xab, ClockSeqLow: 0x79, Node: [6]uint8{0x63, 0x8f, 0x2a, 0x68, 0xe8, 0x69}}
771771
RPCSSFwidl = uuid.UUID{TimeLow: 0x64fe0b7f, TimeMid: 0x9ef5, TimeHiAndVersion: 0x4553, ClockSeqHiAndReserved: 0xa7, ClockSeqLow: 0xdb, Node: [6]uint8{0x9a, 0x19, 0x75, 0x77, 0x75, 0x54}}
772+
MSDLLSspirpc = uuid.UUID{TimeLow: 0x4f32adc8, TimeMid: 0x6052, TimeHiAndVersion: 0x4a04, ClockSeqHiAndReserved: 0x87, ClockSeqLow: 0x1, Node: [6]uint8{0x29, 0x3c, 0xcf, 0x20, 0x96, 0xf0}}
773+
MSDLLLsasrv = uuid.UUID{TimeLow: 0xd25576e4, TimeMid: 0xd2, TimeHiAndVersion: 0x43f7, ClockSeqHiAndReserved: 0x98, ClockSeqLow: 0xf9, Node: [6]uint8{0xb4, 0xc0, 0x72, 0x41, 0x58, 0xf9}}
774+
MSDCOMIRundown = uuid.UUID{TimeLow: 0x134, TimeMid: 0x0, TimeHiAndVersion: 0x0, ClockSeqHiAndReserved: 0xc0, ClockSeqLow: 0x0, Node: [6]uint8{0x0, 0x0, 0x0, 0x0, 0x0, 0x46}}
775+
MSDCOMCombase = uuid.UUID{TimeLow: 0x18f70770, TimeMid: 0x8e64, TimeHiAndVersion: 0x11cf, ClockSeqHiAndReserved: 0x9a, ClockSeqLow: 0xf1, Node: [6]uint8{0x0, 0x20, 0xaf, 0x6e, 0x72, 0xf4}}
776+
MSDLLServicechannel = uuid.UUID{TimeLow: 0xa2c45f7c, TimeMid: 0x7d32, TimeHiAndVersion: 0x46ad, ClockSeqHiAndReserved: 0x96, ClockSeqLow: 0xf5, Node: [6]uint8{0xad, 0xaf, 0xb4, 0x86, 0xbe, 0x74}}
777+
MSDLLSceSvc = uuid.UUID{TimeLow: 0x93149ca2, TimeMid: 0x973b, TimeHiAndVersion: 0x11d1, ClockSeqHiAndReserved: 0x8c, ClockSeqLow: 0x39, Node: [6]uint8{0x0, 0xc0, 0x4f, 0xb9, 0x84, 0xf9}}
778+
MSWMIInternal_IWbemServices = uuid.UUID{TimeLow: 0xf50a28cf, TimeMid: 0x5c9c, TimeHiAndVersion: 0x4f7e, ClockSeqHiAndReserved: 0x9d, ClockSeqLow: 0x80, Node: [6]uint8{0xe2, 0x5e, 0x16, 0xe1, 0x8c, 0x59}}
779+
MSWMIIWbemProviderInit = uuid.UUID{TimeLow: 0x1be41572, TimeMid: 0x91dd, TimeHiAndVersion: 0x11d1, ClockSeqHiAndReserved: 0xae, ClockSeqLow: 0xb2, Node: [6]uint8{0x0, 0xc0, 0x4f, 0xb6, 0x88, 0x20}}
780+
MSWMIInternal_IWbemProviderInit = uuid.UUID{TimeLow: 0x6919dd07, TimeMid: 0x1637, TimeHiAndVersion: 0x4611, ClockSeqHiAndReserved: 0xa8, ClockSeqLow: 0xa7, Node: [6]uint8{0xc1, 0x6f, 0xac, 0x5b, 0x2d, 0x53}}
781+
MSWMI_IWmiProviderSite = uuid.UUID{TimeLow: 0xfec1b0ac, TimeMid: 0x5808, TimeHiAndVersion: 0x4033, ClockSeqHiAndReserved: 0xa9, ClockSeqLow: 0x15, Node: [6]uint8{0xc0, 0x18, 0x59, 0x34, 0x58, 0x1e}}
782+
MSWMIIWbemEventProvider = uuid.UUID{TimeLow: 0xe245105b, TimeMid: 0xb06e, TimeHiAndVersion: 0x11d0, ClockSeqHiAndReserved: 0xad, ClockSeqLow: 0x61, Node: [6]uint8{0x0, 0xc0, 0x4f, 0xd8, 0xfd, 0xff}}
783+
MSWMIInternal_IWbemEventProvider = uuid.UUID{TimeLow: 0xfd450835, TimeMid: 0xcf1b, TimeHiAndVersion: 0x4c87, ClockSeqHiAndReserved: 0x9f, ClockSeqLow: 0xd2, Node: [6]uint8{0x5e, 0xd, 0x42, 0xfd, 0xe0, 0x81}}
784+
MSWMIIWbemEventProviderQuerySink = uuid.UUID{TimeLow: 0x580acaf8, TimeMid: 0xfa1c, TimeHiAndVersion: 0x11d0, ClockSeqHiAndReserved: 0xad, ClockSeqLow: 0x72, Node: [6]uint8{0x0, 0xc0, 0x4f, 0xd8, 0xfd, 0xff}}
785+
MSWMIInternal_IWbemEventProviderQuerySink = uuid.UUID{TimeLow: 0x8a0dc377, TimeMid: 0xa9d3, TimeHiAndVersion: 0x41cb, ClockSeqHiAndReserved: 0xbd, ClockSeqLow: 0x69, Node: [6]uint8{0xae, 0x1f, 0xda, 0xf2, 0xdc, 0x68}}
786+
MSWMIIWbemEventProviderSecurity = uuid.UUID{TimeLow: 0x631f7d96, TimeMid: 0xd993, TimeHiAndVersion: 0x11d2, ClockSeqHiAndReserved: 0xb3, ClockSeqLow: 0x39, Node: [6]uint8{0x0, 0x10, 0x5a, 0x1f, 0x4a, 0xaf}}
787+
MSWMIInternal_IWbemEventProviderSecurity = uuid.UUID{TimeLow: 0xdf2373f5, TimeMid: 0xefb2, TimeHiAndVersion: 0x475c, ClockSeqHiAndReserved: 0xad, ClockSeqLow: 0x58, Node: [6]uint8{0x31, 0x2, 0xd6, 0x19, 0x67, 0xd4}}
788+
MSDCOMILocalSystemActivator = uuid.UUID{TimeLow: 0x132, TimeMid: 0x0, TimeHiAndVersion: 0x0, ClockSeqHiAndReserved: 0xc0, ClockSeqLow: 0x0, Node: [6]uint8{0x0, 0x0, 0x0, 0x0, 0x0, 0x46}}
789+
MSDLLUBPM = uuid.UUID{TimeLow: 0x2a82bb21, TimeMid: 0xe44f, TimeHiAndVersion: 0x4791, ClockSeqHiAndReserved: 0x9a, ClockSeqLow: 0xa1, Node: [6]uint8{0xdf, 0xae, 0x78, 0x8e, 0x2f, 0x43}}
772790
)
773791

774792
type UUID uuid.UUID
@@ -2303,6 +2321,42 @@ func (u UUID) Describe() string {
23032321
return "RPCSS: Dbgidl: Dbgidl"
23042322
case RPCSSFwidl:
23052323
return "RPCSS: Fwidl: Fwidl"
2324+
case MSDLLSspirpc:
2325+
return "MS-DLL: sspisrv.dll: LSA SSPI RPC interface: sspirpc"
2326+
case MSDLLLsasrv:
2327+
return "MS-DLL: lsasrv.dll: LSA Server : lsasrv"
2328+
case MSDCOMIRundown:
2329+
return "MS-DCOM: The OID Rundown Interface: IRundown"
2330+
case MSDCOMCombase:
2331+
return "MS-DCOM: combase.dll: Microsoft COM for Windows: combase"
2332+
case MSDLLServicechannel:
2333+
return "MS-DLL: Sens.dll: System Event Notification Service (SENS): servicechannel"
2334+
case MSDLLSceSvc:
2335+
return "MS-DLL: SceSvc: SceSvc"
2336+
case MSWMIInternal_IWbemServices:
2337+
return "MS-WMI: Internal_IWbemServices: Internal_IWbemServices"
2338+
case MSWMIIWbemProviderInit:
2339+
return "MS-WMI: IWbemProviderInit: IWbemProviderInit"
2340+
case MSWMIInternal_IWbemProviderInit:
2341+
return "MS-WMI: Internal_IWbemProviderInit: Internal_IWbemProviderInit"
2342+
case MSWMI_IWmiProviderSite:
2343+
return "MS-WMI: _IWmiProviderSite: _IWmiProviderSite"
2344+
case MSWMIIWbemEventProvider:
2345+
return "MS-WMI: IWbemEventProvider: IWbemEventProvider"
2346+
case MSWMIInternal_IWbemEventProvider:
2347+
return "MS-WMI: Internal_IWbemEventProvider: Internal_IWbemEventProvider"
2348+
case MSWMIIWbemEventProviderQuerySink:
2349+
return "MS-WMI: IWbemEventProviderQuerySink: IWbemEventProviderQuerySink"
2350+
case MSWMIInternal_IWbemEventProviderQuerySink:
2351+
return "MS-WMI: Internal_IWbemEventProviderQuerySink: Internal_IWbemEventProviderQuerySink"
2352+
case MSWMIIWbemEventProviderSecurity:
2353+
return "MS-WMI: IWbemEventProviderSecurity: IWbemEventProviderSecurity"
2354+
case MSWMIInternal_IWbemEventProviderSecurity:
2355+
return "MS-WMI: Internal_IWbemEventProviderSecurity: Internal_IWbemEventProviderSecurity"
2356+
case MSDCOMILocalSystemActivator:
2357+
return "MS-DCOM: ILocalSystemActivator: ILocalSystemActivator"
2358+
case MSDLLUBPM:
2359+
return "MS-DLL: UBPM.dll: Unified Background Process Manager: UBPM"
23062360
}
23072361
return ""
23082362
}
@@ -2362,7 +2416,7 @@ func (u UUID) WellKnownEndpoint() []string {
23622416
case MSRAIWWinsif:
23632417
return []string{"ncacn_np:WinsPipe"}
23642418
case MSRPCEEndpointMapper:
2365-
return []string{"ncacn_ip_tcp:135", "ncacn_np:epmapper"}
2419+
return []string{"ncacn_ip_tcp:135", "ncacn_np:epmapper", "ncacn_http:593"}
23662420
case MSRPCERemoteManagement:
23672421
return []string{"ncacn_ip_tcp:135"}
23682422
case MSRPCLLocToLoc:
@@ -3956,6 +4010,42 @@ func (u UUID) Name() string {
39564010
return "Dbgidl"
39574011
case RPCSSFwidl:
39584012
return "Fwidl"
4013+
case MSDLLSspirpc:
4014+
return "sspirpc"
4015+
case MSDLLLsasrv:
4016+
return "lsasrv"
4017+
case MSDCOMIRundown:
4018+
return "IRundown"
4019+
case MSDCOMCombase:
4020+
return "combase"
4021+
case MSDLLServicechannel:
4022+
return "servicechannel"
4023+
case MSDLLSceSvc:
4024+
return "SceSvc"
4025+
case MSWMIInternal_IWbemServices:
4026+
return "Internal_IWbemServices"
4027+
case MSWMIIWbemProviderInit:
4028+
return "IWbemProviderInit"
4029+
case MSWMIInternal_IWbemProviderInit:
4030+
return "Internal_IWbemProviderInit"
4031+
case MSWMI_IWmiProviderSite:
4032+
return "_IWmiProviderSite"
4033+
case MSWMIIWbemEventProvider:
4034+
return "IWbemEventProvider"
4035+
case MSWMIInternal_IWbemEventProvider:
4036+
return "Internal_IWbemEventProvider"
4037+
case MSWMIIWbemEventProviderQuerySink:
4038+
return "IWbemEventProviderQuerySink"
4039+
case MSWMIInternal_IWbemEventProviderQuerySink:
4040+
return "Internal_IWbemEventProviderQuerySink"
4041+
case MSWMIIWbemEventProviderSecurity:
4042+
return "IWbemEventProviderSecurity"
4043+
case MSWMIInternal_IWbemEventProviderSecurity:
4044+
return "Internal_IWbemEventProviderSecurity"
4045+
case MSDCOMILocalSystemActivator:
4046+
return "ILocalSystemActivator"
4047+
case MSDLLUBPM:
4048+
return "UBPM"
39594049
}
39604050
return ""
39614051
}

0 commit comments

Comments
 (0)