NAME
SMB::DCERPC - Minimal support for DCE/RPC protocol (over SMB)
SYNOPSIS
use
SMB::DCERPC;
# in server
# on Create request (file srvsvc)
$openfile
->{dcerpc} = SMB::DCERPC->new(
name
=>
'srvsvc'
);
# on Write request (when $openfile->{dcerpc} set)
$status
=
$openfile
->dcerpc->process_bind_request(
$request
->buffer);
# on Read request (when $openfile->{dcerpc} set)
(
$payload
,
$status
) =
$openfile
->dcerpc->generate_bind_ack_response;
# on Ioctl request (when $openfile->{dcerpc} set)
$openfile
->dcerpc->process_rpc_request(
$request
->buffer);
(
$payload
,
$status
) =
$openfile
->dcerpc->generate_rpc_response;
# in client
# when sending Create request (file srvsvc)
$dcerpc
= SMB::DCERPC->new(
name
=>
'srvsvc'
);
# before sending Write request
(
$payload
,
$status
) =
$dcerpc
->generate_bind_request;
# after sending Read request
$dcerpc
->process_bind_ack_response(
$response
->buffer)
if
$response
->status == SMB::STATUS_SUCCESS;
# when sending Ioctl request
(
$payload
,
$status
) =
$dcerpc
->generate_rpc_request(
'NetShareGetInfo'
,
share_name
=>
'users'
);
$dcerpc
->process_rpc_response(
$response
->buffer,
$rethash
);
ABSTRACT
DCE/RPC is Distributed Computing Environment / Remote Procedure Call. Used in particular in Windows environment to obtain server or workstation service information.
SMB may be used as transport for DCE/RPC.
In SMB2, special files srvsvc (for server service) and wkssvc (for workstation service) are used in special IPC trees to make the calls. The flow is usually like this:
Create request (srvsvc)
Create response
Write request
Bind
Write response
Read request
Read response
Bind_ack
Ioctl request
Operation NetShareGetInfo: input
Ioctl response
Operation NetShareGetInfo: output
Close request
Close response
DESCRIPTION
This class implement basic DCE/RPC protocol for SMB client and server.
This is implemented as a state machine. A client must call:
generate_bind_request
process_bind_ack_response
generate_rpc_request
process_rpc_response
...
or just:
generate_packet
process_packet
...
A server must call:
process_bind_request
generate_bind_ack_response
process_rpc_request
generate_rpc_response
...
or just:
process_packet
generate_packet
...
The state is at any moment one of:
INITIAL
BIND
BIND_ACK
REQUEST
RESPONSE
This class inherits from SMB, so msg, err, mem, dump, auto-created field accessor and other methods are available as well.
METHODS
- new
-
Class constructor. Creates an instance of SMB::DCERPC.
- generate_bind_request
-
For client side. Returns DCERPC buffer for payload.
- process_bind_request dcerpc_buffer
-
For server side.
- generate_bind_ack_response
-
For server side. Returns DCERPC buffer for payload.
- process_bind_ack_response dcerpc_buffer
-
For client side.
- generate_rpc_request opnum params
-
For client side. Returns DCERPC buffer for payload.
- process_rpc_request dcerpc_buffer
-
For server side.
- generate_rpc_response [opnum params]
-
For server side. Returns DCERPC buffer for payload.
- process_rpc_response dcerpc_buffer rethash
-
For client side.
- generate_packet dcerpc_buffer [params]
-
This is a dispatcher (depending on the current state) to one of:
generate_bind_request
generate_bind_ack_response
generate_rpc_request
generate_rpc_response
- process_packet [params]
-
This is a dispatcher (depending on the current state) to one of:
process_bind_request
process_bind_ack_request
process_rpc_request
process_rpc_response
INTERNAL METHODS
FUNCTIONS
No functions are exported, they may be called as SMB::DCERPC::FUNC_NAME.
SEE ALSO
SMB, SMB::Server, SMB::Client.
AUTHOR
Mikhael Goikhman <migo@cpan.org>