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
- none
-
None
FUNCTIONS
No functions are exported, they may be called as SMB::DCERPC::FUNC_NAME.
- none
-
None
SEE ALSO
SMB, SMB::Server, SMB::Client.
AUTHOR
Mikhael Goikhman <migo@cpan.org>