Skip to content

Commit 4c164fa

Browse files
committed
WIP: proxy credentials
1 parent 0dbfc9d commit 4c164fa

File tree

7 files changed

+82
-2
lines changed

7 files changed

+82
-2
lines changed
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
module CredentialDataProxy
2+
3+
def create_credential(opts)
4+
begin
5+
data_service = self.get_data_service()
6+
if !data_service.is_a?(Msf::DBManager)
7+
opts[:data] = Base64.urlsafe_encode64(opts[:data]) if opts[:data]
8+
end
9+
data_service.create_credential(opts)
10+
rescue Exception => e
11+
puts "Call to #{data_service.class}#create_credential threw exception: #{e.message}"
12+
end
13+
end
14+
15+
def credentials(opts = {})
16+
begin
17+
data_service = self.get_data_service
18+
opts[:wspace] = wspace
19+
data_service.loot(opts)
20+
rescue Exception => e
21+
puts "Call to #{data_service.class}#credentials threw exception: #{e.message}"
22+
e.backtrace.each { |line| puts "#{line}\n" }
23+
end
24+
end
25+
end

lib/metasploit/framework/data_service/proxy/data_proxy_auto_loader.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ module DataProxyAutoLoader
1414
autoload :ExploitDataProxy, 'metasploit/framework/data_service/proxy/exploit_data_proxy'
1515
autoload :LootDataProxy, 'metasploit/framework/data_service/proxy/loot_data_proxy'
1616
autoload :SessionEventDataProxy, 'metasploit/framework/data_service/proxy/session_event_data_proxy'
17+
autoload :CredentialDataProxy, 'metasploit/framework/data_service/proxy/credential_data_proxy'
1718
include ServiceDataProxy
1819
include HostDataProxy
1920
include VulnDataProxy
@@ -25,4 +26,5 @@ module DataProxyAutoLoader
2526
include ExploitDataProxy
2627
include LootDataProxy
2728
include SessionEventDataProxy
29+
include CredentialDataProxy
2830
end

lib/metasploit/framework/data_service/remote/http/data_service_auto_loader.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ module DataServiceAutoLoader
1313
autoload :RemoteExploitDataService, 'metasploit/framework/data_service/remote/http/remote_exploit_data_service'
1414
autoload :RemoteLootDataService, 'metasploit/framework/data_service/remote/http/remote_loot_data_service'
1515
autoload :RemoteSessionEventDataService, 'metasploit/framework/data_service/remote/http/remote_session_event_data_service'
16+
autoload :RemoteCredentialDataService, 'metasploit/framework/data_service/remote/http/remote_credential_data_service'
1617
include RemoteHostDataService
1718
include RemoteEventDataService
1819
include RemoteNoteDataService
@@ -24,4 +25,5 @@ module DataServiceAutoLoader
2425
include RemoteExploitDataService
2526
include RemoteLootDataService
2627
include RemoteSessionEventDataService
28+
include RemoteCredentialDataService
2729
end
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
require 'metasploit/framework/data_service/remote/http/response_data_helper'
2+
3+
module RemoteCredentialDataService
4+
include ResponseDataHelper
5+
6+
CREDENTIAL_PATH = '/api/1/msf/credential'
7+
8+
def credential(opts = {})
9+
json_to_open_struct_object(self.get_data(CREDENTIAL_PATH, opts), [])
10+
end
11+
12+
def create_credential(opts)
13+
self.post_data_async(CREDENTIAL_PATH, opts)
14+
end
15+
end

lib/msf/core/auxiliary/report.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@ def create_cracked_credential(opts={})
3131

3232
def create_credential(opts={})
3333
if active_db?
34-
super(opts)
34+
framework.db.create_credential(opts)
35+
#super(opts)
3536
elsif !db_warning_given?
3637
vprint_warning('No active DB -- Credential data will not be saved!')
3738
end
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
module CredentialServlet
2+
3+
def self.api_path
4+
'/api/1/msf/credential'
5+
end
6+
7+
def self.registered(app)
8+
app.get LootServlet.api_path, &get_credentials
9+
app.post LootServlet.api_path, &create_credentail
10+
end
11+
12+
#######
13+
private
14+
#######
15+
16+
def self.get_loot
17+
lambda {
18+
begin
19+
opts = parse_json_request(request, false)
20+
data = get_db().credentials(opts)
21+
set_json_response(data)
22+
rescue Exception => e
23+
set_error_on_response(e)
24+
end
25+
}
26+
end
27+
28+
def self.create_credential
29+
lambda {
30+
job = lambda { |opts| get_db().report_host(opts) }
31+
exec_report_job(request, &job)
32+
}
33+
end
34+
end

lib/msf/core/db_manager/http/sinatra_app.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
require 'msf/core/db_manager/http/servlet/exploit_servlet'
1414
require 'msf/core/db_manager/http/servlet/loot_servlet'
1515
require 'msf/core/db_manager/http/servlet/session_event_servlet'
16+
require 'msf/core/db_manager/http/servlet/credential_servlet'
1617

1718
class SinatraApp < Sinatra::Base
1819

@@ -33,5 +34,5 @@ class SinatraApp < Sinatra::Base
3334
register ExploitServlet
3435
register LootServlet
3536
register SessionEventServlet
36-
37+
register CredentialServlet
3738
end

0 commit comments

Comments
 (0)