class Rex::Post::Meterpreter::Extensions::Extapi::Adsi::Adsi

This meterpreter extension contains extended API functions for querying and managing desktop windows.

Attributes

client[RW]

Public Class Methods

new(client) click to toggle source
# File lib/rex/post/meterpreter/extensions/extapi/adsi/adsi.rb, line 17
def initialize(client)
  @client = client
end

Public Instance Methods

domain_query(domain_name, filter, max_results, page_size, fields) click to toggle source

Perform a generic domain query against ADSI.

@param domain_name [String] The FQDN of the target domain. @param filter [String] The filter to apply to the query in

LDAP format.

@param max_results [Integer] The maximum number of results

to return.

@param page_size [Integer] The size of the page of results

to return.

@param fields [Array] Array of string fields to return for

each result found

@return [Hash] Array of field names with associated results.

# File lib/rex/post/meterpreter/extensions/extapi/adsi/adsi.rb, line 36
def domain_query(domain_name, filter, max_results, page_size, fields)
  request = Packet.create_request('extapi_adsi_domain_query')

  request.add_tlv(TLV_TYPE_EXT_ADSI_DOMAIN, domain_name)
  request.add_tlv(TLV_TYPE_EXT_ADSI_FILTER, filter)
  request.add_tlv(TLV_TYPE_EXT_ADSI_MAXRESULTS, max_results)
  request.add_tlv(TLV_TYPE_EXT_ADSI_PAGESIZE, page_size)

  fields.each do |f|
    request.add_tlv(TLV_TYPE_EXT_ADSI_FIELD, f)
  end

  response = client.send_request(request)

  results = []
  response.each(TLV_TYPE_EXT_ADSI_RESULT) { |r|
    result = []
    r.each(TLV_TYPE_EXT_ADSI_VALUE) { |v|
      result << v.value
    }
    results << result
  }

  return {
    :fields  => fields,
    :results => results
  }
end