nifflsploit 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ MDc2NjIxNTNlOWVjNzRmMTlhYjNhZWQ4OTI5ZTJiOWE0MGVmMzNiYg==
5
+ data.tar.gz: !binary |-
6
+ MDM1OTY2MDliZTE2ZTVhYjE3YjI1ZjI2MWVkNmVmNmRlZTQ3MjRiMA==
7
+ !binary "U0hBNTEy":
8
+ metadata.gz: !binary |-
9
+ MjU0YzRkYmRjM2E5NDQ5MmNjZGQxMTI2YmY5ZGU5NGM2OGZkZTdhNTA1N2E4
10
+ N2YyYTBiOGNlMTNmMWUyZjlkZDRlMzhlZWJhNDYzY2UwNzlhZDczMDUyZmVm
11
+ YzI1NmQ2MDc1NDI3OTEzMGY3MWNhZWFlNmRiYzg1ODY0OWYyZTc=
12
+ data.tar.gz: !binary |-
13
+ NDY4YmM0OWJjYmJiZmRlYjc0MTBkNGJiM2JiOTc1YTY3MDdiNjgzZmRhYTA1
14
+ MzU1NWUwYjZlODRiNjk1N2Q1ZDcwNmUzNzIwZGY3ZjM1Y2QyNjc4NmU2NmYx
15
+ ZGI1NDM1MGZkYTkwNzdkYjkzMTJlNGUyY2Q1MTVkMzg0ZjlmYWI=
data/.document ADDED
@@ -0,0 +1,5 @@
1
+ lib/**/*.rb
2
+ bin/*
3
+ -
4
+ features/**/*.feature
5
+ LICENSE.txt
data/.gitignore ADDED
@@ -0,0 +1,49 @@
1
+ # rcov generated
2
+ coverage
3
+ coverage.data
4
+
5
+ # rdoc generated
6
+ rdoc
7
+
8
+ # yard generated
9
+ doc
10
+ .yardoc
11
+
12
+ # bundler
13
+ .bundle
14
+
15
+ # jeweler generated
16
+ pkg
17
+
18
+ # Have editor/IDE/OS specific files you need to ignore? Consider using a global gitignore:
19
+ #
20
+ # * Create a file at ~/.gitignore
21
+ # * Include files you want ignored
22
+ # * Run: git config --global core.excludesfile ~/.gitignore
23
+ #
24
+ # After doing this, these files will be ignored in all your git projects,
25
+ # saving you from having to 'pollute' every project you touch with them
26
+ #
27
+ # Not sure what to needs to be ignored for particular editors/OSes? Here's some ideas to get you started. (Remember, remove the leading # of the line)
28
+ #
29
+ # For MacOS:
30
+ #
31
+ #.DS_Store
32
+
33
+ # For TextMate
34
+ #*.tmproj
35
+ #tmtags
36
+
37
+ # For emacs:
38
+ #*~
39
+ #\#*
40
+ #.\#*
41
+
42
+ # For vim:
43
+ #*.swp
44
+
45
+ # For redcar:
46
+ #.redcar
47
+
48
+ # For rubinius:
49
+ #*.rbc
data/Gemfile ADDED
@@ -0,0 +1,16 @@
1
+ source "http://rubygems.org"
2
+ # Add dependencies required to use your gem here.
3
+ # Example:
4
+ # gem "activesupport", ">= 2.3.5"
5
+ gem "nokogiri"
6
+ gem "rspec"
7
+
8
+ # Add dependencies to develop your gem here.
9
+ # Include everything needed to run rake, tests, features, etc.
10
+ group :development do
11
+ gem "shoulda", ">= 0"
12
+ gem "rdoc", "~> 3.12"
13
+ gem "bundler", "~> 1.0.0"
14
+ gem "jeweler", "~> 1.8.4"
15
+ gem "rcov", ">= 0"
16
+ end
data/LICENSE.txt ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2013 Michael Carlson (MIT License)
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,24 @@
1
+ = Nifflsploit
2
+
3
+ Nifflsploit is a wrapper around the exploit search on metasploit.com. It should be used to search for metasploit modules relating to CVEs. The name is derived from a small mammal in a childrens' novel that hunts for shiny objects.
4
+
5
+ Usage:
6
+ require 'nifflsploit'
7
+ result = Nifflsploit.cve_search("CVE-2008-4250")
8
+ result.name => "Microsoft Server Service Relative Path Stack Corruption"
9
+
10
+ == Contributing to Nifflsploit
11
+
12
+ * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet.
13
+ * Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it.
14
+ * Fork the project.
15
+ * Start a feature/bugfix branch.
16
+ * Commit and push until you are happy with your contribution.
17
+ * Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.
18
+ * Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.
19
+
20
+ == Copyright
21
+
22
+ Copyright (c) 2013 Michael Carlson. See LICENSE.txt for
23
+ further details.
24
+
data/Rakefile ADDED
@@ -0,0 +1,53 @@
1
+ # encoding: utf-8
2
+
3
+ require 'rubygems'
4
+ require 'bundler'
5
+ begin
6
+ Bundler.setup(:default, :development)
7
+ rescue Bundler::BundlerError => e
8
+ $stderr.puts e.message
9
+ $stderr.puts "Run `bundle install` to install missing gems"
10
+ exit e.status_code
11
+ end
12
+ require 'rake'
13
+
14
+ require 'jeweler'
15
+ Jeweler::Tasks.new do |gem|
16
+ # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
17
+ gem.name = "nifflsploit"
18
+ gem.homepage = "http://github.com/Prandium/nifflsploit"
19
+ gem.license = "MIT"
20
+ gem.summary = %Q{TODO: one-line summary of your gem}
21
+ gem.description = %Q{TODO: longer description of your gem}
22
+ gem.email = "me@mbcarlson.org"
23
+ gem.authors = ["Michael Carlson"]
24
+ # dependencies defined in Gemfile
25
+ end
26
+ Jeweler::RubygemsDotOrgTasks.new
27
+
28
+ require 'rake/testtask'
29
+ Rake::TestTask.new(:test) do |test|
30
+ test.libs << 'lib' << 'test'
31
+ test.pattern = 'test/**/test_*.rb'
32
+ test.verbose = true
33
+ end
34
+
35
+ require 'rcov/rcovtask'
36
+ Rcov::RcovTask.new do |test|
37
+ test.libs << 'test'
38
+ test.pattern = 'test/**/test_*.rb'
39
+ test.verbose = true
40
+ test.rcov_opts << '--exclude "gems/*"'
41
+ end
42
+
43
+ task :default => :test
44
+
45
+ require 'rdoc/task'
46
+ Rake::RDocTask.new do |rdoc|
47
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
48
+
49
+ rdoc.rdoc_dir = 'rdoc'
50
+ rdoc.title = "nifflsploit #{version}"
51
+ rdoc.rdoc_files.include('README*')
52
+ rdoc.rdoc_files.include('lib/**/*.rb')
53
+ end
@@ -0,0 +1,30 @@
1
+ require 'open-uri'
2
+ require 'cgi'
3
+ require 'nokogiri'
4
+
5
+ class Nifflsploit
6
+ class Query
7
+ BASE_URL = "http://www.metasploit.com/modules/framework/search?cve="
8
+
9
+ def self.cve(cve)
10
+ url = BASE_URL+CGI::escape(cve)
11
+ response = fetch_html(url)
12
+ document = Nokogiri::HTML.parse(response)
13
+ return document
14
+ end # def self.cve
15
+
16
+ private
17
+ def self.fetch_html(url)
18
+ # open is the open-uri, which returns a io-string object, so we need to convert that to a encoded string
19
+ response = open(url)
20
+
21
+ # open-uri will save the response as a temp file if it's too large, so check what the class is before parsing
22
+ if response.kind_of?(StringIO)
23
+ resp_string = response.string
24
+ else
25
+ resp_string = response.read
26
+ end
27
+ return resp_string
28
+ end # def fetch
29
+ end # class Query
30
+ end # class Nifflsploit
@@ -0,0 +1,39 @@
1
+ require 'nokogiri'
2
+
3
+ class Nifflsploit
4
+ class Result
5
+ attr_accessor :name, :rank, :authors, :references, :development, :module_options
6
+
7
+ def self.parse(document)
8
+ result = Nifflsploit::Result.new
9
+ result.name = document.xpath("/html/body/div/div/section/h1").text
10
+ result.rank = document.xpath("/html/body/div/div/section/div/ul[1]/li").text
11
+
12
+ # this xpath resolves to multiple authors, looking like [Author, Author], so we need to get the text
13
+ # value for each author and return an array of authors
14
+ result.authors = document.xpath("/html/body/div/div/section/div/ul[2]/li").collect {|z| z.text}
15
+
16
+ # same as above, but we need the href attribute, not the text, so we need to navigate to the 'a' object
17
+ # and get the href link text
18
+ result.references = document.xpath("/html/body/div/div/section/div/ul[3]/li").collect {|z| z.xpath("a").attr('href').text}
19
+
20
+ # result.development will look like {:source_code => "http://blarg.com", :history => "http://blarg2.com"}
21
+ result.development = {}
22
+ for link in document.xpath("/html/body/div/div/section/div/ul[4]/li")
23
+ key = link.xpath("a").text.downcase.gsub(/\s/, "_")
24
+ value = link.xpath("a").attr('href').text
25
+ result.development[key.to_sym] = value
26
+ end # for link
27
+
28
+ # result.module_options will look like {:PASSWORD => "The password to reset to (default: admin)", :Proxies => "proxy"}
29
+ result.module_options = {}
30
+ for row in document.xpath("/html/body/div/div/section/div/div[2]/table/tr")
31
+ key = row.xpath('td[1]').text
32
+ value = row.xpath('td[2]').text
33
+ result.module_options[key.to_sym] = value
34
+ end # for row
35
+
36
+ return result
37
+ end # def parse
38
+ end # class Result
39
+ end # class Nifflsploit
@@ -0,0 +1,3 @@
1
+ class Nifflsploit
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,10 @@
1
+ require 'nifflsploit/query'
2
+ require 'nifflsploit/result'
3
+
4
+ class Nifflsploit
5
+ def self.cve_search(cve)
6
+ response = Nifflsploit::Query.cve(cve)
7
+ result = Nifflsploit::Result.parse(response)
8
+ return result
9
+ end # def cve_search
10
+ end # class Nifflsploit
@@ -0,0 +1,24 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'nifflsploit/version'
5
+
6
+ Gem::Specification.new do |gem|
7
+ gem.name = "nifflsploit"
8
+ gem.version = Nifflsploit::VERSION
9
+ gem.authors = ["Michael Carlson"]
10
+ gem.email = ["me@mbcarlson.org"]
11
+ gem.description = %q{ A tool for finding metasploit module information related to CVEs }
12
+ gem.summary = %q{ This gem allows searching for metasploit exploit modules for a given CVE. }
13
+ gem.homepage = "https://github.com/Prandium/nifflsploit"
14
+
15
+ gem.files = `git ls-files`.split($/)
16
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
17
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
+ gem.require_paths = ['lib']
19
+
20
+ gem.required_ruby_version = '>= 1.9.2'
21
+
22
+ gem.add_development_dependency('rspec')
23
+ gem.add_development_dependency('nokogiri')
24
+ end
@@ -0,0 +1,21 @@
1
+ require 'nokogiri'
2
+ require 'nifflsploit/query'
3
+
4
+ describe Nifflsploit::Query do
5
+ describe '#cve' do
6
+ context 'with a valid cve id' do
7
+ it 'returns an HTML Document object' do
8
+ result = Nifflsploit::Query.cve("CVE-2007-4387")
9
+ result.should be_kind_of(Nokogiri::HTML::Document)
10
+ end # it
11
+ end # context
12
+
13
+
14
+ context 'with an invalid cve id' do
15
+ it 'returns an HTML Document object' do
16
+ result = Nifflsploit::Query.cve("CVE-200-4387")
17
+ result.should be_kind_of(Nokogiri::HTML::Document)
18
+ end # it
19
+ end # context
20
+ end # describe cve
21
+ end # describe Nifflsploit
@@ -0,0 +1,61 @@
1
+ require 'nokogiri'
2
+ require 'open-uri'
3
+ require 'nifflsploit/Result'
4
+
5
+ describe Nifflsploit::Result do
6
+ context 'with a valid response' do
7
+ before do
8
+ file = open("spec/support/positive_response.html")
9
+ response = Tempfile.new("temp")
10
+ response.write(file.read)
11
+ response.rewind
12
+ result = Nokogiri::HTML.parse(response)
13
+ response.unlink
14
+ @result = Nifflsploit::Result.parse(result)
15
+ end # before
16
+
17
+ it 'returns the CVE name' do
18
+ @result.name.should eq("2Wire Cross-Site Request Forgery Password Reset Vulnerability")
19
+ end # it
20
+
21
+ it 'returns the exploit rank' do
22
+ @result.rank.should eq("Normal")
23
+ end # it
24
+
25
+ it 'returns the exploit authors' do
26
+ @result.authors.should be_kind_of(Array)
27
+ @result.authors.first.should eq("hkm < hkm [at] hakim.ws >")
28
+ end # it
29
+
30
+ it 'returns Vulnerability Reference links' do
31
+ @result.references.should be_kind_of(Array)
32
+ @result.references.first.should eq("http://cvedetails.com/cve/2007-4387/")
33
+ end # it
34
+
35
+ it 'returns Development links' do
36
+ @result.development.should be_kind_of(Hash)
37
+ @result.development[:source_code].should eq("http://dev.metasploit.com/redmine/projects/framework/repository/entry/modules/auxiliary/admin/2wire/xslt_password_reset.rb")
38
+ end # it
39
+
40
+ it 'returns Module Options hash' do
41
+ @result.module_options.should be_kind_of(Hash)
42
+ @result.module_options[:PASSWORD].should eq("The password to reset to (default: admin)")
43
+ end # it
44
+ end # context
45
+
46
+ context 'with an invalid response' do
47
+ before do
48
+ document = Nokogiri::HTML::Document.new
49
+ @result = Nifflsploit::Result.parse(document)
50
+ end # before
51
+
52
+ it 'returns an empty result object' do
53
+ @result.name.should be_empty
54
+ @result.rank.should be_empty
55
+ @result.authors.should be_empty
56
+ @result.references.should be_empty
57
+ @result.development.to_a.should be_empty
58
+ @result.module_options.to_a.should be_empty
59
+ end # it
60
+ end # context
61
+ end # describe
@@ -0,0 +1,13 @@
1
+ require 'nifflsploit'
2
+
3
+ describe Nifflsploit do
4
+ describe '#cve_search' do
5
+ before do
6
+ @result = Nifflsploit.cve_search("CVE-2007-4387")
7
+ end # before
8
+
9
+ it 'queries for a CVE and returns a result' do
10
+ @result.should be_kind_of(Nifflsploit::Result)
11
+ end # it
12
+ end # describe
13
+ end # describe Nifflsploit
@@ -0,0 +1 @@
1
+ <!doctype html> <html lang="en"> <head> <script src="//cdn.optimizely.com/js/13222550.js"></script> <meta charset="utf-8"> <section id="mainContent" class="twoCol clearfix"> <title>2Wire Cross-Site Request Forgery Password Reset Vulnerability | Metasploit Exploit Database (DB)</title> <META NAME="Description" CONTENT="This module will reset the admin password on a 2Wire wireless router. This is done by using the /xslt page where authentication is not required, thus allowing configuration changes (such as resetting the password) as administrators."> <link rel="shortcut icon" href="/images/global/favicon.ico" type="image/x-icon" /> <script type="text/javascript" src="/js/jquery-1.4.4.js"></script> <script type="text/javascript" src="/js/html5.js"></script> <script type="text/javascript" src="/js/jquery.joverlay.min.js"></script> <script type="text/javascript" src="/js/hoverIntent.js"></script> <!--[if (gte IE 6)&(lte IE 8)]> <script type="text/javascript" src="/js/selectivizr.js"></script> <![endif]--> <link rel="stylesheet" type="text/css" href="/css/style.css"/> <link rel="stylesheet" type="text/css" href="/modules/modules.css"/> <script type="text/javascript" src="/js/browser.js"></script> <script type="text/javascript"> $(function(){ $("#headNav ul.nav li.pri").hoverIntent( config ); function showSub() { if(($(this).find("ul.sec").length>0) && ($(this).hasClass("active")==false)) { $("#headNav ul.nav li.pri ul.sec").css("display", "none"); $(".secNav").css("display", "none"); $(".secNav").css("display", "block"); $(this).find("ul.sec").fadeIn("fast"); } else if($(this).find("ul.sec").length==0) { $(".secNav, ul.sec").css("display", "none"); } } function hideSub() { if($(this).hasClass("active")==false) { $(".secNav").css("display", "none"); $(this).find("ul.sec").fadeOut("fast"); } if($("#headNav ul.nav li.active").length>0) { $(".secNav").css("display", "none"); $(".secNav").css("display", "block"); $("#headNav ul.nav li.active").find("ul.sec").fadeIn("fast"); } } $("#q-search").bind("focus click", function(){ if($(this).val()=="search for keyword") { $(this).val(''); } }); $("#q-search").bind("blur", function(){ if(($(this).val()=="search for keyword") || ($(this).val()=='')) { $(this).val('search for keyword'); } }); }); </script> <STYLE type="text/css"> /* @group global reset */ html, body, h1, h2, h3, h4, h5, h6, ul, ul li, ol, ol li, dl, p, input, button, label, td, abbr, article, aside, audio, bb, canvas, datagrid, datalist, details, dialog, eventsource, figure, footer, header, hgroup, mark, menu, meter, nav, output, progress, section, time, video, blockquote { margin: 0; padding: 0; } sup { vertical-align:top; line-height:1; } fieldset, dd, button, form { margin:0; padding:0; border: none; } ul li, ol li, menu li { list-style-type: none;} img, a img { border: none; } table { border-spacing:0; *border-collapse:collapse; width:100%; } header, footer, nav, menu, section, article, aside, details, summary { display:block; } /* @end */ /* @group Default Element Styles */ body { font-size: 14px; line-height: 20px; font-family: Arial, Helvetica, sans-serif; color: #29383f; background: #5f5f5f url("../images/body-bg.jpg") repeat-x; } a { color: #0197B8; text-decoration:none; } a:hover { color:inherit; *color: #333; } nav a{ color: #333333; text-decoration:none; } nav a:hover{ color: #EA5709; text-decoration:none; } h1,h2,h3,h4,h5 { font-family: "Trebuchet MS", Arial, Helvetica, sans-serif; color: #29383f; font-weight: normal; } h1 { font-size:36px; margin: 0 0 .5em 0; font-weight: normal; } h2 { font-size:34px; margin: 0 0 .5em 0; font-weight: normal; } h3 { font-size:24px; margin: 0 0 20px 0; font-weight: normal; } h4 { font-size:20px; margin: 0 0 .4em 0; font-weight: normal; } h5 { font-size:18px; margin: 0 0 .4em 0; font-weight: normal; } p { font-size:14px; margin:0 0 1.5em 0; } hr { display: block; border: 0; margin: 60px 0; height: 1px; background-color:#eee; color: #eee; } input[type="text"]{ display: block; font:normal 15px/19px arial; color: #4b4b4b; border: 1px solid #d7d7d7; padding:6px 10px; width:250px; box-shadow: 1px 1px 5px #F1F1F1 inset; -moz-box-shadow: 1px 1px 5px #F1F1F1 inset; -webkit-box-shadow: 1px 1px 5px #F1F1F1 inset; -khtml-box-shadow: 1px 1px 5px #F1F1F1 inset; } input.smallInput { width:90px; } input.itl { color:#999; } /* @end */ /* @group clearfix */ .clearfix:after { content: ".";display: block;height: 0;visibility: hidden; clear: both; } .clearfix { zoom: 1; }/* Clearfix for IE 7 */ /* @end */ /* @group sprites */ .icon { background-image:url(../images/sprite/icons.png); background-repeat:no-repeat; } /* @end */ /* @group Patterns */ .fLt { float:left; } .fRt { float:right; } .block { display:block; } .displayHidden { display:none; } .displayInlineBlock { display:inline-block; } .alignCenter { text-align:center; } .alignLeft { text-align:left; } .alignRight { text-align:right; } .rPos { position: relative; } .aPos { position: absolute; } .marB0 { margin-bottom:0px; } .marB5 { margin-bottom:5px; } .marB10 { margin-bottom:10px; } .marB15 { margin-bottom:15px; } .marB20 { margin-bottom:20px; } .marB25 { margin-bottom:25px; } .marB30 { margin-bottom:30px; } .marB35 { margin-bottom:35px; } .marB40 { margin-bottom:40px; } .marB45 { margin-bottom:45px; } .marB47 { margin-bottom:47px; } .marB50 { margin-bottom:50px; } .marB60 { margin-bottom:60px; } .marB70 { margin-bottom:70px; } .marB80 { margin-bottom:80px; } .marR20 { margin-right:20px; } .marT0 { margin-top:0; } .marT10 { margin-top:10px; } .marT20 { margin-top:20px; } .marT30 { margin-top:30px; } .marL25 { margin-left:25px; } .pad0 { padding: 0; } .alignCenter{ text-align: center; } .button, .button:visited { display:inline-block; font-family: "Trebuchet MS", Arial, Helvetica, sans-serif; padding:4px 16px 3px 10px; padding:4px 16px 4px 10px\\9; text-transform: uppercase; font-size: 15px; color: #0197B8; border: 1px solid #f1f1f1; background: #fff url(../images/button_bg.gif) repeat-x bottom; -moz-border-radius: 0 14px 14px 0; -webkit-border-radius: 0 14px 14px 0; -khtml-border-radius: 0 14px 14px 0; border-radius: 0 14px 14px 0; } .button:hover { color: #000; } .mainBtn, a.mainBtn { font-family: "Trebuchet MS", Arial, Helvetica, sans-serif; padding: 7px 15px; font-size: 15px; color: #fff; text-transform: uppercase; position: relative; -moz-border-radius: 20px; -webkit-border-radius: 20px; -khtml-border-radius: 20px; border-radius: 20px; border:none; cursor:pointer; background: #0197b8 url(../images/blue_button_bg.gif) repeat-x top; } .greyBtn{ border-left: 2px solid #E0E0E0; border-right: 2px solid #E0E0E0; font-family: "Trebuchet MS", Arial, Helvetica, sans-serif; padding: 7px 25px; *padding: 6px 25px 6px 25px; font-size: 15px; color: #00a8c6; text-transform: uppercase; -moz-border-radius: 20px; -webkit-border-radius: 20px; -khtml-border-radius: 20px; border-radius: 20px; cursor:pointer; background: #fff url(../images/grey_btn_bg.jpg) repeat-x bottom; zoom:1; } .greyBtn:hover{ background: #fff url(../images/grey_btn_hover_bg.jpg) repeat-x top; } .mainBtn:hover { background: #0197b8 url(../images/blue_button_bg.gif) repeat-x bottom; } .mainBtnSmall, a.mainBtnSmall { padding: 6px 30px; } .downloadBtn, a.downloadBtn { padding-left: 40px; *padding-left:30px; display: inline-block; margin-right:12px; } .downloadBtn em { background: url(../images/download.png) no-repeat top left; display:block; *display:none; position: absolute; top: -6px; left: -15px; width: 61px; height: 49px; padding-left: 50px; } .headBulletList h4{ background: url("../images/icons/bullet7.png") no-repeat 0 5px; padding-left: 25px; } .mobilisafeOverview .headBulletList p{ padding-left: 25px; } .headBulletList ul{ padding-left:25px; } .content_list { list-style-type: none; padding-left: 3px; } .content_list li { background: url(../images/icons/bullet7.png) no-repeat 0 3px; padding-left: 22px; margin-bottom: 10px; } .bulletList li { background: url(../images/bullet.png) no-repeat left 7px; padding-left: 14px; margin: 0 0 10px 2px; color: #333; } .contributorsList .bulletList a{color: #333;} .contributorsList .bulletList a:hover{color: #EA5709;} .numBullet li{ margin-bottom:20px; } .numBullet li:last-child{ margin-bottom: 0; } .numBullet span{ padding-right: 10px; color: #666; font-size: 16px; display: block; float: left; } .numBullet strong{ font-weight: normal; display: block; padding-left: 23px; } .numBullet strong .note{ font-size: 11px; font-style: normal; line-height: 14px; display: block; margin-top: 3px; } .subBulletList li { background: url(../images/icons/bullet-sub.png) no-repeat left 8px; padding-left:15px; margin: 0 0 10px 2px; } .smallList li { font:normal 12px/16px arial; color:#666; margin-bottom:6px; background: url(../images/sprite/bullet-small.png) no-repeat left 7px; padding-left:12px; } sup{ font-size: 10px; vertical-align: top; _line-height: 1px; line-height: -1px; } sup.note{ font-size: 10px; vertical-align: top; _line-height: 1px; line-height: -1px; } /* @end */ /* @group Header */ .header{ border-top: 3px solid #EA5709; padding: 0 20px 0 30px; background-color: #fff; } .header .logo{ padding-top: 22px; display: block; width: 240px; float: left; } .logo img{ display: block; } .header .primeNav{ width: 400px; float: right; } .toplinks{ width: 200px; float: right; margin-top: 37px; } .toplinks li{ background: url("../images/toplinks-divider.gif") no-repeat scroll right center transparent; float: left; font-weight: bold; } .toplinks li:last-child{ background: none; } .toplinks a{ font-family: "Trebuchet MS",Arial,Helvetica,sans-serif; font-size: 15px; color: #333333; display: block; font-weight: normal; padding: 0 10px; } .primeLinks{ width: 100px; background: url("../images/prime-nav-bg.png") no-repeat left top; float: right; padding: 40px 25px 35px; position: relative; } .primeLinks > a{ background: url("../images/arrow.png") no-repeat right 5px; display: block; } .primeLinks:hover ul{ display: block; } .primeLinks ul{ position: absolute; padding: 0 15px; width: 98px; left: 9px; top: 90px; background-color: #fff; display: none; } .primeLinks li{ padding: 8px 0; border-bottom: 1px solid #ddd; } .primeLinks li:last-child{ border-bottom: none; } .primeLinks li a{ font-size: 13px; line-height: 13px; font-family: "Trebuchet MS",Arial,Helvetica,sans-serif; } .bannerWrap{ padding: 50px 30px; text-align: center; background-color: #202020; background-color: rgba(0,0,0,0.7); } .bannerWrap h1{ font-size: 36px; line-height: 36px; color: #e7e7e7; margin-bottom: 20px; } .bannerWrap strong{ font: normal 22px/22px "Trebuchet MS", Arial, Helvetica, sans-serif; display: block; color: #EA5709; margin-bottom: 25px; } .bannerWrap p{ font: normal 14px/20px "Trebuchet MS", Arial, Helvetica, sans-serif; color: #a5a5a5; margin-bottom: 25px; } /* @end */ /* @group Freamwok */ .wrap { width: 980px; margin: 0 auto; box-shadow:0 0 15px #000000; -moz-box-shadow:0 0 15px #000000; -webkit-box-shadow:0 0 15px #000000; } .container{ padding: 50px 30px 40px; background-color: #fff; } .metaInfoBlock{ margin-bottom: 40px; } .metaInfoBlock article{ width: 270px; float: left; margin-right: 55px; } .metaInfoBlock article:last-child{ margin-right: 0; } .bannerBlock{ padding-top: 40px; background: url("../images/shadow-top.png") center top no-repeat; text-align: center; margin-bottom: 60px; } .bannerBlock strong{ font-size: 18px; font-weight: normal; line-height: 18px; color: #666; display: block; margin-bottom: 25px; } .bannerPad{ padding-bottom: 40px; background: url("../images/shadow-bot.png") center bottom no-repeat; } .bannerBlock p{ padding-top: 15px; font-size: 13px; line-height: 13px; color: #666; } .contributorsList h3{ margin-bottom: 30px; } .contributorsList article{ width: 190px; float: left; margin-right: 50px; } .contributorsList article:last-child{ margin-right: 0; } /* @end */ /* @group footer */ .footer{ border-top: 1px solid #ebebeb; } .footerPad{ border-top: 1px solid #fff; padding: 20px 30px; background-color: #f7f7f7; } .copyright{ width: 230px; float: left; } .copyright a{ display: block; width: 110px; float: left; margin-right: 7px; } .copyright span{ float: left; color: #333; } .copyright img{ display: block; } .footerNav{ width: 640px; *width: 640px; -bracket-:hack(; width: 640px; ); width: 640px\\9; float: right; } @-moz-document url-prefix() { .footerNav { width: 640px; } } .footerNav li{ padding-right: 15px; padding: 2px 15px 2px 0; float: left; font-weight: bold; } .footerNav li:last-child{ padding-right: 0; } .footerNav li.twitIcon{ background: url(../images/twitIcon.png) no-repeat left 2px; padding-left: 35px; } .footerNav a{ color: #29383F; } .footerNav a:hover{ color: ##EA5709; } .footerNav .blue{ color: #EA5709; } .footerNav .blue:hover{ color: #333; } .freeTools:hover {*color: #666} /* @end */</STYLE> </head> <body> <div class="wrap"> <header class="header"> <div class="clearfix"> <span class="logo"><a href="http://www.metasploit.com"><img src="/revamp/images/metasploit-logo.png" title="Metasploit" alt="Metasploit" border=0 /></a></span> <nav class="primeNav"> <div class="primeLinks"> <a href="http://www.rapid7.com/" target="_blank"><img src="/revamp/images/rapid7-logo.png" title="Rapid7" alt="Rapid7" /></a> <ul> <li><a href="http://www.rapid7.com/resources/free-tools.jsp" target="_blank">Free Tools</a></li> <li><a href="https://community.rapid7.com/" target="_blank">Community</a></li> <li><a href="http://www.rapid7.com/contact/" target="_blank">Contact</a></li> <li><a href="http://www.rapid7.com/company/" target="_blank">About</a></li> </ul> </div> <ul class="toplinks clearfix"> <li><a href="/modules/" title="Exploits database">Exploits</a></li> <li><a href="https://community.rapid7.com/community/metasploit/blog" target="_blank" title="Metasploit blog">Blog</a></li> <li><a href="http://www.rapid7.com/support/" target="_blank" title="Rapid7 support">Support</a></li> </ul> </nav><!--primeNav--> </div><!--clearfix--> </header><!--header--> <div id="bodyContent"> <div id="breadcrumbs"> <a href="/" title="Home">Home</a> &gt; <span>Exploit DB</span> </div><!-- breadcrumbs --> <section id="mainContent" class="twoCol clearfix"> <h1>2Wire Cross-Site Request Forgery Password Reset Vulnerability</h1> <div class="lCol"> <p>This module will reset the admin password on a 2Wire wireless router. This is done by using the /xslt page where authentication is not required, thus allowing configuration changes (such as resetting the password) as administrators.</p> <p> <a href="/modules/" class="fLt blueBtn"><span>Search Other Modules</span></a><br> </p> <br/><h2>Rank</h2> <ul> <li class='module_info'>Normal</li> </ul> <br/><h2>Authors</h2> <ul> <li>hkm &lt; hkm [at] hakim.ws &gt;</li> <li>Travis Phillips &lt; &gt;</li> </ul> <br/><h2>Vulnerability References</h2> <ul> <li><a href="http://cvedetails.com/cve/2007-4387/" rel="nofollow">CVE-2007-4387</a></li> <li><a href="http://www.osvdb.org/37667" rel="nofollow">OSVDB-37667</a></li> <li><a href="http://www.securityfocus.com/bid/36075" rel="nofollow">BID-36075</a></li> <li><a href="http://seclists.org/bugtraq/2007/Aug/225" rel="nofollow">http://seclists.org/bugtraq/2007/Aug/225</a></li> </ul> <br/><h2>Development</h2> <ul> <li class="modrefs"><a href="http://dev.metasploit.com/redmine/projects/framework/repository/entry/modules/auxiliary/admin/2wire/xslt_password_reset.rb">Source Code</a></li> <li class="modrefs"><a href="http://dev.metasploit.com/redmine/projects/framework/repository/changes/modules/auxiliary/admin/2wire/xslt_password_reset.rb">History</a></li> </ul> <!--[if ie 9]> <style type="text/css" media="screen"> .mBannerInfo { filter: none; } </style> <![endif]--> <br/><h2>Usage Information</h2> <div class="msfconsole"> $ <b>msfconsole</b><br/> <br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;##&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;###&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;##&nbsp;&nbsp;&nbsp;&nbsp;##<br/> &nbsp;##&nbsp;&nbsp;##&nbsp;&nbsp;####&nbsp;######&nbsp;####&nbsp;&nbsp;#####&nbsp;&nbsp;&nbsp;#####&nbsp;&nbsp;&nbsp;&nbsp;##&nbsp;&nbsp;&nbsp;&nbsp;####&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;######<br/> #######&nbsp;##&nbsp;&nbsp;##&nbsp;&nbsp;##&nbsp;&nbsp;##&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;##&nbsp;##&nbsp;&nbsp;##&nbsp;&nbsp;&nbsp;&nbsp;##&nbsp;&nbsp;&nbsp;##&nbsp;&nbsp;##&nbsp;&nbsp;&nbsp;###&nbsp;&nbsp;&nbsp;##<br/> #######&nbsp;######&nbsp;&nbsp;##&nbsp;&nbsp;#####&nbsp;&nbsp;&nbsp;####&nbsp;&nbsp;##&nbsp;&nbsp;##&nbsp;&nbsp;&nbsp;&nbsp;##&nbsp;&nbsp;&nbsp;##&nbsp;&nbsp;##&nbsp;&nbsp;&nbsp;##&nbsp;&nbsp;&nbsp;&nbsp;##<br/> ##&nbsp;#&nbsp;##&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;##&nbsp;&nbsp;##&nbsp;&nbsp;##&nbsp;&nbsp;##&nbsp;##&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#####&nbsp;&nbsp;&nbsp;&nbsp;##&nbsp;&nbsp;&nbsp;##&nbsp;&nbsp;##&nbsp;&nbsp;&nbsp;##&nbsp;&nbsp;&nbsp;&nbsp;##<br/> ##&nbsp;&nbsp;&nbsp;##&nbsp;&nbsp;####&nbsp;###&nbsp;&nbsp;&nbsp;#####&nbsp;&nbsp;&nbsp;#####&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;##&nbsp;&nbsp;&nbsp;####&nbsp;&nbsp;&nbsp;####&nbsp;&nbsp;&nbsp;####&nbsp;###<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;##<br/> <br/> msf &gt; <b>use auxiliary/admin/2wire/xslt_password_reset</b><br/> msf auxiliary(xslt_password_reset) &gt; <b>set RHOST [TARGET IP]</b><br/> msf auxiliary(xslt_password_reset) &gt; <b>run</b><br/> <br/> </div> <br/><h2>Module Options</h2> <div class="marB20"> <table cellpadding="6" cellspacing="0" width="100%" border="1"> <tr class='rowcola'> <td class='optreq'>PASSWORD</td> <td>The password to reset to (default: admin)</td> </tr> <tr class='rowcola'> <td class='optopt'>Proxies</td> <td>Use a proxy chain</td> </tr> <tr class='rowcola'> <td class='optreq'>RHOST</td> <td>The target address</td> </tr> <tr class='rowcola'> <td class='optreq'>RPORT</td> <td>The target port (default: 80)</td> </tr> <tr class='rowcola'> <td class='optopt'>VHOST</td> <td>HTTP server virtual host</td> </tr> <tr class='rowcola'> <td class='optopt'>DOMAIN</td> <td>The domain to use for windows authentification</td> </tr> <tr class='rowcola'> <td class='optopt'>DigestAuthIIS</td> <td>Conform to IIS, should work for most servers. Only set to false for non-IIS servers</td> </tr> <tr class='rowcola'> <td class='optopt'>FingerprintCheck</td> <td>Conduct a pre-exploit fingerprint verification</td> </tr> <tr class='rowcola'> <td class='optopt'>NTLM::SendLM</td> <td>Always send the LANMAN response (except when NTLMv2_session is specified)</td> </tr> <tr class='rowcola'> <td class='optopt'>NTLM::SendNTLM</td> <td>Activate the &#x27;Negotiate NTLM key&#x27; flag, indicating the use of NTLM responses</td> </tr> <tr class='rowcola'> <td class='optopt'>NTLM::SendSPN</td> <td>Send an avp of type SPN in the ntlmv2 client Blob, this allow authentification on windows Seven/2008r2 when SPN is required</td> </tr> <tr class='rowcola'> <td class='optopt'>NTLM::UseLMKey</td> <td>Activate the &#x27;Negotiate Lan Manager Key&#x27; flag, using the LM key when the LM response is sent</td> </tr> <tr class='rowcola'> <td class='optopt'>NTLM::UseNTLM2_session</td> <td>Activate the &#x27;Negotiate NTLM2 key&#x27; flag, forcing the use of a NTLMv2_session</td> </tr> <tr class='rowcola'> <td class='optopt'>NTLM::UseNTLMv2</td> <td>Use NTLMv2 instead of NTLM2_session when &#x27;Negotiate NTLM2&#x27; key is true</td> </tr> <tr class='rowcola'> <td class='optopt'>SSL</td> <td>Negotiate SSL for outgoing connections</td> </tr> <tr class='rowcola'> <td class='optopt'>SSLVersion</td> <td>Specify the version of SSL that should be used (accepted: SSL2, SSL3, TLS1)</td> </tr> <tr class='rowcola'> <td class='optopt'>USERNAME</td> <td>The HTTP username to specify for authentication</td> </tr> <tr class='rowcola'> <td class='optopt'>UserAgent</td> <td>The User-Agent header to use for all requests</td> </tr> <tr class='rowcola'> <td class='optopt'>VERBOSE</td> <td>Enable detailed status messages</td> </tr> <tr class='rowcola'> <td class='optopt'>WORKSPACE</td> <td>Specify the workspace for this module</td> </tr> <tr class='rowcola'> <td class='optopt'>HTTP::header_folding</td> <td>Enable folding of HTTP headers</td> </tr> <tr class='rowcola'> <td class='optopt'>HTTP::method_random_case</td> <td>Use random casing for the HTTP method</td> </tr> <tr class='rowcola'> <td class='optopt'>HTTP::method_random_invalid</td> <td>Use a random invalid, HTTP method for request</td> </tr> <tr class='rowcola'> <td class='optopt'>HTTP::method_random_valid</td> <td>Use a random, but valid, HTTP method for request</td> </tr> <tr class='rowcola'> <td class='optopt'>HTTP::pad_fake_headers</td> <td>Insert random, fake headers into the HTTP request</td> </tr> <tr class='rowcola'> <td class='optopt'>HTTP::pad_fake_headers_count</td> <td>How many fake headers to insert into the HTTP request</td> </tr> <tr class='rowcola'> <td class='optopt'>HTTP::pad_get_params</td> <td>Insert random, fake query string variables into the request</td> </tr> <tr class='rowcola'> <td class='optopt'>HTTP::pad_get_params_count</td> <td>How many fake query string variables to insert into the request</td> </tr> <tr class='rowcola'> <td class='optopt'>HTTP::pad_method_uri_count</td> <td>How many whitespace characters to use between the method and uri</td> </tr> <tr class='rowcola'> <td class='optopt'>HTTP::pad_method_uri_type</td> <td>What type of whitespace to use between the method and uri (accepted: space, tab, apache)</td> </tr> <tr class='rowcola'> <td class='optopt'>HTTP::pad_post_params</td> <td>Insert random, fake post variables into the request</td> </tr> <tr class='rowcola'> <td class='optopt'>HTTP::pad_post_params_count</td> <td>How many fake post variables to insert into the request</td> </tr> <tr class='rowcola'> <td class='optopt'>HTTP::pad_uri_version_count</td> <td>How many whitespace characters to use between the uri and version</td> </tr> <tr class='rowcola'> <td class='optopt'>HTTP::pad_uri_version_type</td> <td>What type of whitespace to use between the uri and version (accepted: space, tab, apache)</td> </tr> <tr class='rowcola'> <td class='optopt'>HTTP::uri_dir_fake_relative</td> <td>Insert fake relative directories into the uri</td> </tr> <tr class='rowcola'> <td class='optopt'>HTTP::uri_dir_self_reference</td> <td>Insert self-referential directories into the uri</td> </tr> <tr class='rowcola'> <td class='optopt'>HTTP::uri_encode_mode</td> <td>Enable URI encoding (accepted: none, hex-normal, hex-all, hex-random, u-normal, u-all, u-random)</td> </tr> <tr class='rowcola'> <td class='optopt'>HTTP::uri_fake_end</td> <td>Add a fake end of URI (eg: /%20HTTP/1.0/../../)</td> </tr> <tr class='rowcola'> <td class='optopt'>HTTP::uri_fake_params_start</td> <td>Add a fake start of params to the URI (eg: /%3fa=b/../)</td> </tr> <tr class='rowcola'> <td class='optopt'>HTTP::uri_full_url</td> <td>Use the full URL for all HTTP requests</td> </tr> <tr class='rowcola'> <td class='optopt'>HTTP::uri_use_backslashes</td> <td>Use back slashes instead of forward slashes in the uri </td> </tr> </table> </div> <!--[if ie 9]> <style type="text/css" media="screen"> .mBannerInfo { filter: none; } </style> <![endif]--> </div><!-- lCol --> </section><!-- mainContent --> </div> <footer class="footer"> <div class="footerPad clearfix"> <div class="clearfix copyright"> <a href="http://www.rapid7.com" target="_blank"><img src="/revamp/images/r7-footer-logo.png" title="Rapid7" alt="Rapid7" width="110" height="18" /></a> <span>&copy; 2013 Rapid7</span> </div><!--copyright--> <nav class="footerNav"> <ul class="clearfix"> <li><a href="https://community.rapid7.com/docs/DOC-2223" target="_blank">Legal</a></li> <li><a href="https://community.rapid7.com/login.jspa" target="_blank">Licence</a></li> <li><a href="http://www.rapid7.com/privacy.jsp" target="_blank">Privacy Policy</a></li> <li><a href="http://www.rapid7.com/disclosure.jsp" target="_blank">Disclosure Policy</a></li> <li><a href="http://www.rapid7.com/contact/" target="_blank">Contact</a></li> <li class="twitIcon"><a class="blue" href="http://twitter.com/Rapid7" target="_blank">@Rapid7</a></li> <li><a class="blue" href="http://twitter.com/metasploit" target="_blank">@Metasploit</a></li> </ul> </nav> </div> </footer><!--footer--> </div> </div> <script type="text/javascript"> var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-4622520-2']); _gaq.push(['_trackPageview']); (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })(); </script> </body> </html>
metadata ADDED
@@ -0,0 +1,90 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: nifflsploit
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Michael Carlson
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-04-30 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rspec
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ! '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ! '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: nokogiri
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ! '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ description: ! ' A tool for finding metasploit module information related to CVEs '
42
+ email:
43
+ - me@mbcarlson.org
44
+ executables: []
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - .document
49
+ - .gitignore
50
+ - Gemfile
51
+ - LICENSE.txt
52
+ - README.rdoc
53
+ - Rakefile
54
+ - lib/nifflsploit.rb
55
+ - lib/nifflsploit/query.rb
56
+ - lib/nifflsploit/result.rb
57
+ - lib/nifflsploit/version.rb
58
+ - nifflsploit.gemspec
59
+ - spec/lib/nifflsploit/query_spec.rb
60
+ - spec/lib/nifflsploit/result_spec.rb
61
+ - spec/lib/nifflsploit_spec.rb
62
+ - spec/support/positive_response.html
63
+ homepage: https://github.com/Prandium/nifflsploit
64
+ licenses: []
65
+ metadata: {}
66
+ post_install_message:
67
+ rdoc_options: []
68
+ require_paths:
69
+ - lib
70
+ required_ruby_version: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ! '>='
73
+ - !ruby/object:Gem::Version
74
+ version: 1.9.2
75
+ required_rubygems_version: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - ! '>='
78
+ - !ruby/object:Gem::Version
79
+ version: '0'
80
+ requirements: []
81
+ rubyforge_project:
82
+ rubygems_version: 2.0.3
83
+ signing_key:
84
+ specification_version: 4
85
+ summary: This gem allows searching for metasploit exploit modules for a given CVE.
86
+ test_files:
87
+ - spec/lib/nifflsploit/query_spec.rb
88
+ - spec/lib/nifflsploit/result_spec.rb
89
+ - spec/lib/nifflsploit_spec.rb
90
+ - spec/support/positive_response.html