class Rex::Post::Meterpreter::Extensions::Extapi::Service::Service
This meterpreter extension contains extended API functions for querying and managing Windows services.
Constants
- SERVICE_OP_PAUSE
- SERVICE_OP_RESTART
- SERVICE_OP_RESUME
- SERVICE_OP_START
- SERVICE_OP_STOP
Attributes
client[RW]
Public Class Methods
new(client)
click to toggle source
# File lib/rex/post/meterpreter/extensions/extapi/service/service.rb, line 23 def initialize(client) @client = client end
Public Instance Methods
control(service_name, op)
click to toggle source
Control a single service
# File lib/rex/post/meterpreter/extensions/extapi/service/service.rb, line 73 def control(service_name, op) if op.is_a? String case op.strip.downcase when "start" op = SERVICE_OP_START when "pause" op = SERVICE_OP_PAUSE when "resume" op = SERVICE_OP_RESUME when "stop" op = SERVICE_OP_STOP when "restart" op = SERVICE_OP_RESTART end end unless (op.is_a? Integer) && op >= SERVICE_OP_START && op <= SERVICE_OP_RESTART raise ArgumentError, "Invalid operation: #{op}" end request = Packet.create_request('extapi_service_control') request.add_tlv(TLV_TYPE_EXT_SERVICE_CTRL_NAME, service_name) request.add_tlv(TLV_TYPE_EXT_SERVICE_CTRL_OP, op) client.send_request(request) end
enumerate()
click to toggle source
Enumerate all the services on the target.
# File lib/rex/post/meterpreter/extensions/extapi/service/service.rb, line 30 def enumerate request = Packet.create_request('extapi_service_enum') response = client.send_request(request) services = [] response.each(TLV_TYPE_EXT_SERVICE_ENUM_GROUP) do |s| services << { :name => s.get_tlv_value(TLV_TYPE_EXT_SERVICE_ENUM_NAME), :display => s.get_tlv_value(TLV_TYPE_EXT_SERVICE_ENUM_DISPLAYNAME), :pid => s.get_tlv_value(TLV_TYPE_EXT_SERVICE_ENUM_PID), :status => s.get_tlv_value(TLV_TYPE_EXT_SERVICE_ENUM_STATUS), :interactive => s.get_tlv_value(TLV_TYPE_EXT_SERVICE_ENUM_INTERACTIVE) } end services.sort_by { |s| s[:name].upcase } end
query(service_name)
click to toggle source
Query some detailed parameters about a particular service.
# File lib/rex/post/meterpreter/extensions/extapi/service/service.rb, line 52 def query(service_name) request = Packet.create_request('extapi_service_query') request.add_tlv(TLV_TYPE_EXT_SERVICE_ENUM_NAME, service_name) response = client.send_request(request) { :starttype => response.get_tlv_value(TLV_TYPE_EXT_SERVICE_QUERY_STARTTYPE), :display => response.get_tlv_value(TLV_TYPE_EXT_SERVICE_QUERY_DISPLAYNAME), :startname => response.get_tlv_value(TLV_TYPE_EXT_SERVICE_QUERY_STARTNAME), :path => response.get_tlv_value(TLV_TYPE_EXT_SERVICE_QUERY_PATH), :logroup => response.get_tlv_value(TLV_TYPE_EXT_SERVICE_QUERY_LOADORDERGROUP), :interactive => response.get_tlv_value(TLV_TYPE_EXT_SERVICE_QUERY_INTERACTIVE), :dacl => response.get_tlv_value(TLV_TYPE_EXT_SERVICE_QUERY_DACL), :status => response.get_tlv_value(TLV_TYPE_EXT_SERVICE_QUERY_STATUS) } end