From 007f6302df0e58f1db047f32be51d677e8f7078c Mon Sep 17 00:00:00 2001 From: soh_cah_toa Date: Wed, 23 Apr 2014 11:41:11 -0400 Subject: [PATCH] Re-implemented #generate_id in Core::Main::Crypto. This is a better home for it since that is where other OpenSSL crypto/token generator methods reside. --- core/main/crypto.rb | 17 +++++++++++++++++ extensions/dns/model.rb | 9 +-------- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/core/main/crypto.rb b/core/main/crypto.rb index eda268f48..3700fe84e 100644 --- a/core/main/crypto.rb +++ b/core/main/crypto.rb @@ -39,6 +39,23 @@ module Core config.set('beef.api_token', token) token end + + # Generates a unique identifier for DNS rules. + # + # @return [String] 8-character hex identifier + def self.dns_rule_id + id = nil + length = 4 + + begin + id = OpenSSL::Random.random_bytes(length).unpack('H*')[0] + BeEF::Core::Models::Dns::Rule.each { |rule| throw StandardError if id == rule.id } + rescue StandardError + retry + end + + id.to_s + end end end diff --git a/extensions/dns/model.rb b/extensions/dns/model.rb index 062699bdf..f4b9aef98 100644 --- a/extensions/dns/model.rb +++ b/extensions/dns/model.rb @@ -23,7 +23,7 @@ module BeEF # Hooks the model's "save" event. Generates a rule identifier and callback. before :save do |rule| rule.callback = validate_response(rule.resource, rule.response) - rule.id = generate_id + rule.id = BeEF::Core::Crypto.dns_rule_id end private @@ -37,13 +37,6 @@ module BeEF "t.respond!('1.1.1.1')" end - # Generates a unique identifier for use as a primary key. - # - # @return [String] 8-character hex identifier - def generate_id - '42' - end - end end