Class: Mdm::Workspace

Inherits:
ActiveRecord::Base
  • Object
show all
Defined in:
app/models/mdm/workspace.rb

Overview

Workspace to separate different collections of #hosts. Can be used to separate pentests against different networks or different clients as reports are normally generated against all records in a workspace.

Constant Summary collapse

DEFAULT =

CONSTANTS

'default'

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#boundaryString

Comma separated list of IP ranges (in various formats) and IP addresses that users of this workspace are allowed to interact with if #limit_to_network is true.



# File 'app/models/mdm/workspace.rb', line 91


#created_atDateTime

When this workspace was created.



# File 'app/models/mdm/workspace.rb', line 113


#descriptionString

Long description (beyond #name) that explains the purpose of this workspace.



# File 'app/models/mdm/workspace.rb', line 97


#limit_to_networkfalse, true

Whether #boundary is respected.



# File 'app/models/mdm/workspace.rb', line 102


#nameString

Name of this workspace.



# File 'app/models/mdm/workspace.rb', line 108


#updated_atDateTime

The last time this workspace was updated.



# File 'app/models/mdm/workspace.rb', line 118


Class Method Details

.defaultMdm::Workspace

Returns default Mdm::Workspace.



156
157
158
# File 'app/models/mdm/workspace.rb', line 156

def self.default
  where(name: DEFAULT).first_or_create
end

Instance Method Details

#credsActiveRecord::Relation<Mdm::Cred>

Deprecated.

Use Mdm::Workspace#credential_cores when Metasploit::Credential::Engine is installed to get Metasploit::Credential::Cores. Use Mdm::Service#logins when Metasploit::Credential::Engine is installed to get Metasploit::Credential::Logins.



145
146
147
148
149
150
151
# File 'app/models/mdm/workspace.rb', line 145

def creds
  Mdm::Cred
      .joins(service: :host)
      .where(hosts: {
          workspace_id: self.id
      })
end

#default?true, false

Whether this is the default workspace.



164
165
166
# File 'app/models/mdm/workspace.rb', line 164

def default?
  name == DEFAULT
end

#each_cred {|cred| ... } ⇒ void

Deprecated.

Use workspace.credential_cores.each when Metasploit::Credential::Engine is installed to enumerate Metasploit::Credential::Cores. Use service.logins.each when Metasploit::Credential::Engine is installed to enumerate Metasploit::Credential::Logins.

This method returns an undefined value.

Enumerates each element of #creds.

Yields:

  • (cred)

Yield Parameters:

  • cred (Mdm::Cred)

    Cred associated with a host or a service in this workspace.

Yield Returns:

  • (void)


178
179
180
181
182
# File 'app/models/mdm/workspace.rb', line 178

def each_cred(&block)
  creds.each do |cred|
    block.call(cred)
  end
end

#each_host_tag {|tag| ... } ⇒ void

This method returns an undefined value.

Enumerates each element of #host_tags.

Yields:

  • (tag)

Yield Parameters:

Yield Returns:

  • (void)


190
191
192
193
194
# File 'app/models/mdm/workspace.rb', line 190

def each_host_tag(&block)
  host_tags.each do |host_tag|
    block.call(host_tag)
  end
end

#host_tagsActiveRecord::Relation<Mdm::Tag>

Tags on #hosts.



199
200
201
202
203
204
205
# File 'app/models/mdm/workspace.rb', line 199

def host_tags
  Mdm::Tag
      .joins(:hosts)
      .where(hosts: {
        workspace_id: self.id
      })
end

#unique_web_formsActiveRecord::Relation<Mdm::WebForm>

Web forms on #web_sites.



258
259
260
# File 'app/models/mdm/workspace.rb', line 258

def unique_web_forms
  web_forms.select('web_forms.id, web_forms.web_site_id, web_forms.path, web_forms.method, web_forms.query')
end

#web_formsActiveRecord::Relation<Mdm::WebForm>

Web forms found on #web_sites.



210
211
212
213
214
215
216
217
# File 'app/models/mdm/workspace.rb', line 210

def web_forms
  Mdm::WebForm.joins(
    Mdm::WebForm.join_association(:web_site),
    Mdm::WebSite.join_association(:service),
    Mdm::Service.join_association(:host),
    Mdm::Host.join_association(:workspace)
  ).where(Mdm::Workspace[:id].eq(id)).uniq
end

#web_pagesActiveRecord::Relation<Mdm::WebPage>

Web pages found on #web_sites.



223
224
225
226
227
228
229
230
# File 'app/models/mdm/workspace.rb', line 223

def web_pages
  Mdm::WebPage.joins(
    Mdm::WebPage.join_association(:web_site),
    Mdm::WebSite.join_association(:service),
    Mdm::Service.join_association(:host),
    Mdm::Host.join_association(:workspace)
  ).where(Mdm::Workspace[:id].eq(id)).uniq
end

#web_sitesActiveRecord::Relation<Mdm::WebSite>

Web sites running on #services.



235
236
237
238
239
240
241
# File 'app/models/mdm/workspace.rb', line 235

def web_sites
  Mdm::WebSite.joins(
    Mdm::WebSite.join_association(:service),
    Mdm::Service.join_association(:host),
    Mdm::Host.join_association(:workspace)
  ).where(Mdm::Workspace[:id].eq(id)).uniq
end

#web_unique_forms(addrs = nil) ⇒ Array<Mdm::WebForm>

#unique_web_forms hosted on addrs.



267
268
269
270
271
272
273
# File 'app/models/mdm/workspace.rb', line 267

def web_unique_forms(addrs=nil)
  forms = unique_web_forms
  if addrs
    forms.to_a.reject!{|f| not addrs.include?( f.web_site.service.host.address.to_s ) }
  end
  forms
end

#web_vulnsActiveRecord::Relation<Mdm::WebVuln>

Web vulnerability found on #web_sites.



246
247
248
249
250
251
252
253
# File 'app/models/mdm/workspace.rb', line 246

def web_vulns
  Mdm::WebVuln.joins(
    Mdm::WebVuln.join_association(:web_site),
    Mdm::WebSite.join_association(:service),
    Mdm::Service.join_association(:host),
    Mdm::Host.join_association(:workspace)
  ).where(Mdm::Workspace[:id].eq(id)).uniq
end