Documentation
¶
Index ¶
- Constants
- type AddressStruct
- type CtxEItemResponseStruct
- type CtxEItemStruct
- type MSRPCBindAckStruct
- type MSRPCBindStruct
- type MSRPCHeaderStruct
- type MSRPCRequestHeaderStruct
- func NewOpenSCManagerWRequest() MSRPCRequestHeaderStruct
- func NewRCloseServiceHandleRequest(contextHandle []byte) MSRPCRequestHeaderStruct
- func NewRCreateServiceWRequest(contextHandle []byte, servicename, uploadPathFile string) MSRPCRequestHeaderStruct
- func NewRDeleteServiceRequest(contextHandle []byte) MSRPCRequestHeaderStruct
- func NewROpenServiceWRequest(contextHandle []byte, servicename string) MSRPCRequestHeaderStruct
- func NewRStartServiceWRequest(contextHandle []byte) MSRPCRequestHeaderStruct
- type OpenSCManagerWResponse
- type OpenSCManagerWStruct
- type RCloseServiceHandleRequestStruct
- type RCloseServiceHandleResponseStruct
- type RCreateServiceWRequestStruct
- type RCreateServiceWResponseStruct
- type RDeleteServiceRequestStruct
- type RDeleteServiceResponseStruct
- type ROpenServiceWRequestStruct
- type ROpenServiceWResponseStruct
- type RStartServiceWRequestStruct
- type RStartServiceWResponseStruct
- type SMBClient
- func (c *SMBClient) CloseService(treeId uint32, fileId, serviceHandle []byte, callId uint32) error
- func (c *SMBClient) CreateService(treeId uint32, fileId, contextHandle []byte, ...) (handler []byte, err error)
- func (c *SMBClient) DeleteService(treeId uint32, fileId, serviceHandle []byte, callId uint32) (err error)
- func (c *SMBClient) FileUpload(file, Path string) (filename string, err error)
- func (c *SMBClient) MSRPCBind(treeId uint32, fileId []byte, uuid string, version uint32) (err error)
- func (c *SMBClient) OpenService(treeId uint32, fileId, contextHandle []byte, servicename string, callId uint32) (err error)
- func (c *SMBClient) OpenSvcManager(treeId, callId uint32) (fileid, handler []byte, err error)
- func (c *SMBClient) ServiceDelete(serviceHandle []byte) (err error)
- func (c *SMBClient) ServiceInstall(servicename, file, path string) (service string, servicehandle []byte, err error)
- func (c *SMBClient) StartService(treeId uint32, fileId, serviceHandle []byte, callId uint32) (err error)
- type ServerAlive2RequestStruct
- type ServerAlive2ResponseStruct
- type SyntaxIDStruct
- type TCPClient
Constants ¶
const ( ResolveOxid = 0 SimplePing = 1 ComplexPing = 2 ServerAlive = 3 ResolveOxid2 = 4 ServerAlive2 = 5 )
RPC Opnum
const ( PDURequest = 0 PDUPing = 1 PDUResponse = 2 PDUFault = 3 PDUWorking = 4 PDUNoCall = 5 PDUReject = 6 PDUAck = 7 PDUCl_Cancel = 8 PDUFack = 9 PDUCancel_Ack = 10 PDUBind = 11 PDUBind_Ack = 12 PDUBind_Nak = 13 PDUAlter_Context = 14 PDUAlter_Context_Resp = 15 PDUShutdown = 17 PDUCo_Cancel = 18 PDUOrphaned = 19 )
PDU PacketType https://pubs.opengroup.org/onlinepubs/9629399/chap12.htm
const ( PDUFlagReserved_01 = 0x01 PDUFlagLastFrag = 0x02 PDUFlagPending = 0x03 PDUFlagFrag = 0x04 PDUFlagNoFack = 0x08 PDUFlagMayBe = 0x10 PDUFlagIdemPotent = 0x20 PDUFlagBroadcast = 0x40 PDUFlagReserved_80 = 0x80 )
PDU PacketFlags https://pubs.opengroup.org/onlinepubs/9629399/chap12.htm
const ( NDRSyntax = "8a885d04-1ceb-11c9-9fe8-08002b104860" //Version 02, NDR64 data representation protocol NDR64Syntax = "71710533-BEBA-4937-8319-B5DBEF9CCC36" //Version 01, NDR64 data representation protocol )
const ( SERVICE_ALL_ACCESS = 0x000F01FF SC_MANAGER_CREATE_SERVICE = 0x00000002 SC_MANAGER_CONNECT = 0x00000001 )
const ( RCloseServiceHandle = 0 RControlService = 1 RDeleteService = 2 RLockServiceDatabase = 3 RQueryServiceObjectSecurity = 4 RSetServiceObjectSecurity = 5 RQueryServiceStatus = 6 RSetServiceStatus = 7 RUnlockServiceDatabase = 8 RNotifyBootConfigStatus = 9 RChangeServiceConfigW = 11 RCreateServiceW = 12 REnumDependentServicesW = 13 REnumServicesStatusW = 14 ROpenSCManagerW = 15 ROpenServiceW = 16 RQueryServiceConfigW = 17 RQueryServiceLockStatusW = 18 RStartServiceW = 19 RGetServiceDisplayNameW = 20 RGetServiceKeyNameW = 21 RChangeServiceConfigA = 23 RCreateServiceA = 24 REnumDependentServicesA = 25 REnumServicesStatusA = 26 ROpenSCManagerA = 27 ROpenServiceA = 28 RQueryServiceConfigA = 29 RQueryServiceLockStatusA = 30 RStartServiceA = 31 RGetServiceDisplayNameA = 32 RGetServiceKeyNameA = 33 REnumServiceGroupW = 35 RChangeServiceConfig2A = 36 RChangeServiceConfig2W = 37 RQueryServiceConfig2A = 38 RQueryServiceConfig2W = 39 RQueryServiceStatusEx = 40 REnumServicesStatusExA = 41 REnumServicesStatusExW = 42 RCreateServiceWOW64A = 44 RCreateServiceWOW64W = 45 RNotifyServiceStatusChange = 47 RGetNotifyResults = 48 RCloseNotifyHandle = 49 RControlServiceExA = 50 RControlServiceExW = 51 RQueryServiceConfigEx = 56 RCreateWowService = 60 ROpenSCManager2 = 64 )
const ( SERVICE_KERNEL_DRIVER = 0x00000001 SERVICE_FILE_SYSTEM_DRIVER = 0x00000002 SERVICE_WIN32_OWN_PROCESS = 0x00000010 SERVICE_WIN32_SHARE_PROCESS = 0x00000020 SERVICE_INTERACTIVE_PROCESS = 0x00000100 )
https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-scmr/6a8ca926-9477-4dd4-b766-692fab07227e dwServiceType 类型
const ( SERVICE_BOOT_START = 0x00000000 SERVICE_SYSTEM_START = 0x00000001 SERVICE_AUTO_START = 0x00000002 SERVICE_DEMAND_START = 0x00000003 SERVICE_DISABLED = 0x00000004 )
dwStartType类型
const ( SERVICE_ERROR_IGNORE = 0x00000000 SERVICE_ERROR_NORMAL = 0x00000001 SERVICE_ERROR_SEVERE = 0x00000002 SERVICE_ERROR_CRITICAL = 0x00000003 )
dwErrorControl类型
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type CtxEItemResponseStruct ¶
type CtxEItemResponseStruct struct {
AckResult uint16
AckReason uint16
TransferSyntax []byte `smb:"fixed:16"` //16字节
SyntaxVer uint32
}
PDU CtxItem响应结构
type CtxEItemStruct ¶
type CtxEItemStruct struct {
ContextId uint16
NumTransItems uint8
Reserved uint8
AbstractSyntax SyntaxIDStruct
TransferSyntax SyntaxIDStruct
}
PDU CtxItem结构
type MSRPCBindAckStruct ¶
type MSRPCBindAckStruct struct {
MSRPCHeaderStruct
MaxXmitFrag uint16
MaxRecvFrag uint16
AssocGroup uint32
ScndryAddrlen uint16
ScndryAddr []byte `smb:"count:ScndryAddrlen"` //取决管道的长度
NumResults uint8
CtxItem CtxEItemResponseStruct
}
函数绑定响应结构
type MSRPCBindStruct ¶
type MSRPCBindStruct struct {
MSRPCHeaderStruct
MaxXmitFrag uint16 //4字节,发送大小协商
MaxRecvFrag uint16 //4字节,接收大小协商
AssocGroup uint32
NumCtxItems uint8
Reserved uint8
Reserved2 uint16
CtxItem CtxEItemStruct
}
函数绑定请求结构
type MSRPCHeaderStruct ¶
type MSRPCHeaderStruct struct {
Version uint8
VersionMinor uint8
PacketType uint8
PacketFlags uint8
DataRepresentation uint32 //4字节,小端排序,0x10
FragLength uint16 //2字节,整个结构的长度
AuthLength uint16
CallId uint32
}
MSRPC 标准头
func NewMSRPCHeader ¶
func NewMSRPCHeader() MSRPCHeaderStruct
type MSRPCRequestHeaderStruct ¶
type MSRPCRequestHeaderStruct struct {
MSRPCHeaderStruct
AllocHint uint32 `smb:"len:Buffer"` //Buffer的长度
ContextId uint16
OpNum uint16
Buffer interface{}
}
func NewOpenSCManagerWRequest ¶
func NewOpenSCManagerWRequest() MSRPCRequestHeaderStruct
OpenSCManagerW请求 DWORD ROpenSCManagerW(
[in, string, unique, range(0, SC_MAX_COMPUTER_NAME_LENGTH)] SVCCTL_HANDLEW lpMachineName, [in, string, unique, range(0, SC_MAX_NAME_LENGTH)] wchar_t* lpDatabaseName, [in] DWORD dwDesiredAccess, [out] LPSC_RPC_HANDLE lpScHandle );
lpMachineName:一种 SVCCTL_HANDLEW(第 2.2.3 节)数据类型,它定义指向以空字符结尾的 UNICODE 字符串的指针,该字符串指定服务器的机器名称。 lpDatabaseName:指向以空结尾的 UNICODE 字符串的指针,该字符串指定要打开的 SCM 数据库的名称。该参数必须设置为 NULL、“ServicesActive”或“ServicesFailed”。 dwDesiredAccess:一个值,指定对数据库的访问。这必须是第 3.1.4 节中指定的值之一。 客户端还必须具有 SC_MANAGER_CONNECT 访问权限。 lpScHandle:一种 LPSC_RPC_HANDLE 数据类型,用于定义新打开的 SCM 数据库的句柄。
func NewRCloseServiceHandleRequest ¶
func NewRCloseServiceHandleRequest(contextHandle []byte) MSRPCRequestHeaderStruct
初始化关闭服务句柄
func NewRCreateServiceWRequest ¶
func NewRCreateServiceWRequest(contextHandle []byte, servicename, uploadPathFile string) MSRPCRequestHeaderStruct
func NewRDeleteServiceRequest ¶
func NewRDeleteServiceRequest(contextHandle []byte) MSRPCRequestHeaderStruct
删除服务封装
func NewROpenServiceWRequest ¶
func NewROpenServiceWRequest(contextHandle []byte, servicename string) MSRPCRequestHeaderStruct
初始化打开服务请求
func NewRStartServiceWRequest ¶
func NewRStartServiceWRequest(contextHandle []byte) MSRPCRequestHeaderStruct
启动服务封装
type OpenSCManagerWResponse ¶
type OpenSCManagerWResponse struct {
MSRPCHeaderStruct
AllocHint uint32
ContextId uint16
CancelCount uint8
Reserved uint8
ContextHandle []byte `smb:"fixed:20"`
ReturnCode uint32
}
OpenSCManagerW响应结构
func NewOpenSCManagerWResponse ¶
func NewOpenSCManagerWResponse() OpenSCManagerWResponse
type OpenSCManagerWStruct ¶
type OpenSCManagerWStruct struct {
MachineName machineName
Database database
AccessMask uint32
}
type RCloseServiceHandleRequestStruct ¶
type RCloseServiceHandleRequestStruct struct {
ContextHandle []byte `smb:"fixed:20"`
}
关闭服务句柄
type RCloseServiceHandleResponseStruct ¶
type RCloseServiceHandleResponseStruct struct {
MSRPCHeaderStruct
AllocHint uint32
ContextId uint16
CancelCount uint8
Reserved uint8
ContextHandle []byte `smb:"fixed:20"`
ReturnCode uint32
}
func NewRCloseServiceHandleResponse ¶
func NewRCloseServiceHandleResponse() RCloseServiceHandleResponseStruct
type RCreateServiceWRequestStruct ¶
type RCreateServiceWRequestStruct struct {
ContextHandle []byte `smb:"fixed:20"` //OpenSCManagerW 句柄
ServiceName serviceName
DisplayName displayName
AccessMask uint32
ServiceType uint32
ServiceStartType uint32
ServiceErrorControl uint32
BinaryPathName binaryPathName
NULLPointer uint32
TagId uint32
NULLPointer2 uint32
DependSize uint32
NULLPointer3 uint32
NULLPointer4 uint32
PasswordSize uint32
}
type RCreateServiceWResponseStruct ¶
type RCreateServiceWResponseStruct struct {
MSRPCHeaderStruct
AllocHint uint32
ContextId uint16
CancelCount uint8
Reserved uint8
TagId uint32
ContextHandle []byte `smb:"fixed:20"`
ReturnCode uint32
}
RCreateServiceW响应结构
func NewRCreateServiceWResponse ¶
func NewRCreateServiceWResponse() RCreateServiceWResponseStruct
type RDeleteServiceRequestStruct ¶
type RDeleteServiceRequestStruct struct {
ContextHandle []byte `smb:"fixed:20"` //20字节,创建服务返回的句柄
}
type RDeleteServiceResponseStruct ¶
type RDeleteServiceResponseStruct struct {
MSRPCHeaderStruct
AllocHint uint32
ContextId uint16
CancelCount uint8
Reserved uint8
ReturnCode uint32
}
func NewRDeleteServiceResponse ¶
func NewRDeleteServiceResponse() RDeleteServiceResponseStruct
删除服务响应
type ROpenServiceWRequestStruct ¶
type ROpenServiceWResponseStruct ¶
type ROpenServiceWResponseStruct struct {
MSRPCHeaderStruct
AllocHint uint32
ContextId uint16
CancelCount uint8
Reserved uint8
ContextHandle []byte `smb:"fixed:20"`
ReturnCode uint32
}
func NewROpenServiceWResponse ¶
func NewROpenServiceWResponse() ROpenServiceWResponseStruct
type RStartServiceWRequestStruct ¶
type RStartServiceWResponseStruct ¶
type RStartServiceWResponseStruct struct {
MSRPCHeaderStruct
AllocHint uint32
ContextId uint16
CancelCount uint8
Reserved uint8
StubData uint32
}
func NewRStartServiceWResponse ¶
func NewRStartServiceWResponse() RStartServiceWResponseStruct
启动服务响应
type SMBClient ¶
func (*SMBClient) CloseService ¶
smb->关闭scm句柄
func (*SMBClient) CreateService ¶
func (c *SMBClient) CreateService(treeId uint32, fileId, contextHandle []byte, servicename, uploadPathFile string, callId uint32) (handler []byte, err error)
smb->创建服务,返回创建服务后的实例句柄
func (*SMBClient) DeleteService ¶
func (c *SMBClient) DeleteService(treeId uint32, fileId, serviceHandle []byte, callId uint32) (err error)
smb->删除服务
func (*SMBClient) FileUpload ¶
smb->上传文件,返回文件名
func (*SMBClient) MSRPCBind ¶
func (c *SMBClient) MSRPCBind(treeId uint32, fileId []byte, uuid string, version uint32) (err error)
smb->函数绑定
func (*SMBClient) OpenService ¶
func (c *SMBClient) OpenService(treeId uint32, fileId, contextHandle []byte, servicename string, callId uint32) (err error)
smb->打开服务
func (*SMBClient) OpenSvcManager ¶
smb->打开scm,返回scm服务句柄
func (*SMBClient) ServiceDelete ¶
服务删除
type ServerAlive2RequestStruct ¶
type ServerAlive2RequestStruct struct {
MSRPCHeaderStruct
AllocHint uint32
ContextId uint16
Opnum uint16
}
ServerAlive2请求结构
func NewServerAlive2Request ¶
func NewServerAlive2Request() ServerAlive2RequestStruct
type ServerAlive2ResponseStruct ¶
type ServerAlive2ResponseStruct struct {
MSRPCHeaderStruct
AllocHint uint32
ContextId uint16
CancelCount uint8
Reserved uint8
VersionMajor uint16
VersionMinor uint16
Unknown uint64
PpdsaOrBindings AddressStruct
Reserved2 uint64
}
func NewServerAlive2Response ¶
func NewServerAlive2Response() ServerAlive2ResponseStruct
type SyntaxIDStruct ¶
type TCPClient ¶
func NewTCPSession ¶
func NewTCPSession(opt common.ClientOptions, debug bool) (client *TCPClient, err error)
tcp连接封装