ronin-scanners 0.1.4 → 1.0.0.pre1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (63) hide show
  1. data/.document +4 -0
  2. data/.gemtest +0 -0
  3. data/.gitignore +11 -0
  4. data/.rspec +1 -0
  5. data/.yardopts +2 -0
  6. data/COPYING.txt +339 -0
  7. data/{History.txt → ChangeLog.md} +7 -7
  8. data/Gemfile +45 -0
  9. data/README.md +125 -0
  10. data/Rakefile +39 -14
  11. data/bin/ronin-scan-dork +20 -0
  12. data/bin/ronin-scan-nmap +20 -0
  13. data/bin/ronin-scan-proxies +20 -0
  14. data/bin/ronin-scan-spider +20 -0
  15. data/bin/ronin-scanner +20 -0
  16. data/bin/ronin-scanners +13 -5
  17. data/gemspec.yml +31 -0
  18. data/lib/ronin/database/migrations/scanners.rb +25 -0
  19. data/lib/ronin/database/migrations/scanners/1.0.0.rb +51 -0
  20. data/lib/ronin/scanners.rb +7 -5
  21. data/lib/ronin/scanners/dork.rb +173 -0
  22. data/lib/ronin/scanners/host_name_scanner.rb +67 -0
  23. data/lib/ronin/scanners/http_scanner.rb +195 -0
  24. data/lib/ronin/scanners/ip_scanner.rb +75 -0
  25. data/lib/ronin/scanners/nmap.rb +303 -5
  26. data/lib/ronin/scanners/{nikto/nikto.rb → proxies.rb} +11 -26
  27. data/lib/ronin/scanners/resolv_scanner.rb +73 -0
  28. data/lib/ronin/scanners/reverse_lookup_scanner.rb +76 -0
  29. data/lib/ronin/scanners/scanner.rb +371 -0
  30. data/lib/ronin/scanners/{nikto.rb → scanners.rb} +8 -5
  31. data/lib/ronin/scanners/site_map.rb +62 -0
  32. data/lib/ronin/scanners/spider.rb +117 -0
  33. data/lib/ronin/scanners/tcp_port_scanner.rb +72 -0
  34. data/lib/ronin/scanners/udp_port_scanner.rb +72 -0
  35. data/lib/ronin/scanners/url_scanner.rb +79 -0
  36. data/lib/ronin/scanners/version.rb +3 -4
  37. data/lib/ronin/ui/cli/commands/scan/dork.rb +39 -0
  38. data/lib/ronin/ui/cli/commands/scan/nmap.rb +105 -0
  39. data/lib/ronin/ui/cli/commands/scan/proxies.rb +82 -0
  40. data/lib/ronin/ui/cli/commands/scan/spider.rb +71 -0
  41. data/lib/ronin/ui/cli/commands/scanner.rb +43 -0
  42. data/lib/ronin/ui/cli/scanner_command.rb +118 -0
  43. data/ronin-scanners.gemspec +60 -0
  44. data/spec/scanners/host_name_scanner_spec.rb +24 -0
  45. data/spec/scanners/ip_scanner_spec.rb +24 -0
  46. data/spec/scanners/resolv_scanner_spec.rb +26 -0
  47. data/spec/scanners/reverse_lookup_scanner_spec.rb +26 -0
  48. data/spec/scanners/scanner_spec.rb +89 -0
  49. data/spec/scanners/scanners_spec.rb +9 -0
  50. data/spec/scanners/tcp_port_scanner_spec.rb +27 -0
  51. data/spec/scanners/udp_port_scanner_spec.rb +27 -0
  52. data/spec/scanners/url_scanner_spec.rb +37 -0
  53. data/spec/spec_helper.rb +4 -3
  54. metadata +261 -116
  55. data.tar.gz.sig +0 -1
  56. data/Manifest.txt +0 -16
  57. data/README.txt +0 -106
  58. data/lib/ronin/scanners/nikto/nikto_task.rb +0 -183
  59. data/lib/ronin/scanners/nmap/nmap.rb +0 -74
  60. data/lib/ronin/scanners/nmap/nmap_task.rb +0 -290
  61. data/spec/scanners_spec.rb +0 -11
  62. data/tasks/spec.rb +0 -9
  63. metadata.gz.sig +0 -0
data/Rakefile CHANGED
@@ -1,19 +1,44 @@
1
- # -*- ruby -*-
2
-
3
1
  require 'rubygems'
4
- require 'hoe'
5
- require 'hoe/signing'
6
- require './tasks/spec.rb'
7
2
 
8
- Hoe.spec('ronin-scanners') do
9
- self.rubyforge_name = 'ronin'
10
- self.developer('Postmodern', 'postmodern.mod3@gmail.com')
11
- self.remote_rdoc_dir = 'docs/ronin-scanners'
12
- self.extra_deps = [
13
- ['scandb', '>=0.1.3'],
14
- ['rprogram', '>=0.1.6'],
15
- ['ronin', '>=0.2.4']
3
+ begin
4
+ require 'bundler'
5
+ rescue LoadError => e
6
+ warn e.message
7
+ warn "Run `gem install bundler` to install Bundler."
8
+ exit -1
9
+ end
10
+
11
+ begin
12
+ Bundler.setup(:development)
13
+ rescue Bundler::BundlerError => e
14
+ warn e.message
15
+ warn "Run `bundle install` to install missing gems"
16
+ exit e.status_code
17
+ end
18
+
19
+ require 'rake'
20
+
21
+ require 'rubygems/tasks'
22
+ Gem::Tasks.new(:sign => {:checksum => true, :pgp => true}) do |tasks|
23
+ tasks.console.command = 'ripl'
24
+ tasks.console.options = %w[
25
+ -rripl/multi_line
26
+ -rripl/auto_indent
27
+ -rripl/color_result
16
28
  ]
17
29
  end
18
30
 
19
- # vim: syntax=Ruby
31
+ require 'rspec/core/rake_task'
32
+ RSpec::Core::RakeTask.new
33
+ task :test => :spec
34
+ task :default => :spec
35
+
36
+ require 'dm-visualizer/rake/graphviz_task'
37
+ DataMapper::Visualizer::Rake::GraphVizTask.new(
38
+ :bundle => [:runtime],
39
+ :include => ['lib'],
40
+ :require => ['ronin/scanners']
41
+ )
42
+
43
+ require 'yard'
44
+ YARD::Rake::YardocTask.new
@@ -0,0 +1,20 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rubygems'
4
+
5
+ root = File.expand_path(File.join(File.dirname(__FILE__),'..'))
6
+ if File.directory?(File.join(root,'.git'))
7
+ Dir.chdir(root) do
8
+ begin
9
+ require 'bundler/setup'
10
+ rescue LoadError => e
11
+ warn e.message
12
+ warn "Run `gem install bundler` to install Bundler"
13
+ exit -1
14
+ end
15
+ end
16
+ end
17
+
18
+ require 'ronin/ui/cli/commands/scan/dork'
19
+
20
+ Ronin::UI::CLI::Commands::Scan::Dork.start
@@ -0,0 +1,20 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rubygems'
4
+
5
+ root = File.expand_path(File.join(File.dirname(__FILE__),'..'))
6
+ if File.directory?(File.join(root,'.git'))
7
+ Dir.chdir(root) do
8
+ begin
9
+ require 'bundler/setup'
10
+ rescue LoadError => e
11
+ warn e.message
12
+ warn "Run `gem install bundler` to install Bundler"
13
+ exit -1
14
+ end
15
+ end
16
+ end
17
+
18
+ require 'ronin/ui/cli/commands/scan/nmap'
19
+
20
+ Ronin::UI::CLI::Commands::Scan::Nmap.start
@@ -0,0 +1,20 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rubygems'
4
+
5
+ root = File.expand_path(File.join(File.dirname(__FILE__),'..'))
6
+ if File.directory?(File.join(root,'.git'))
7
+ Dir.chdir(root) do
8
+ begin
9
+ require 'bundler/setup'
10
+ rescue LoadError => e
11
+ warn e.message
12
+ warn "Run `gem install bundler` to install Bundler"
13
+ exit -1
14
+ end
15
+ end
16
+ end
17
+
18
+ require 'ronin/ui/cli/commands/scan/proxies'
19
+
20
+ Ronin::UI::CLI::Commands::Scan::Proxies.start
@@ -0,0 +1,20 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rubygems'
4
+
5
+ root = File.expand_path(File.join(File.dirname(__FILE__),'..'))
6
+ if File.directory?(File.join(root,'.git'))
7
+ Dir.chdir(root) do
8
+ begin
9
+ require 'bundler/setup'
10
+ rescue LoadError => e
11
+ warn e.message
12
+ warn "Run `gem install bundler` to install Bundler"
13
+ exit -1
14
+ end
15
+ end
16
+ end
17
+
18
+ require 'ronin/ui/cli/commands/scan/spider'
19
+
20
+ Ronin::UI::CLI::Commands::Scan::Spider.start
@@ -0,0 +1,20 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rubygems'
4
+
5
+ root = File.expand_path(File.join(File.dirname(__FILE__),'..'))
6
+ if File.directory?(File.join(root,'.git'))
7
+ Dir.chdir(root) do
8
+ begin
9
+ require 'bundler/setup'
10
+ rescue LoadError => e
11
+ warn e.message
12
+ warn "Run `gem install bundler` to install Bundler"
13
+ exit -1
14
+ end
15
+ end
16
+ end
17
+
18
+ require 'ronin/ui/cli/commands/scanner'
19
+
20
+ Ronin::UI::CLI::Commands::Scanner.start
@@ -2,13 +2,21 @@
2
2
 
3
3
  require 'rubygems'
4
4
 
5
- lib_dir = File.expand_path(File.join(File.dirname(__FILE__),'..','lib'))
6
- unless $LOAD_PATH.include?(lib_dir)
7
- $LOAD_PATH << lib_dir
5
+ root = File.expand_path(File.join(File.dirname(__FILE__),'..'))
6
+ if File.directory?(File.join(root,'.git'))
7
+ Dir.chdir(root) do
8
+ begin
9
+ require 'bundler/setup'
10
+ rescue LoadError => e
11
+ warn e.message
12
+ warn "Run `gem install bundler` to install Bundler"
13
+ exit -1
14
+ end
15
+ end
8
16
  end
9
17
 
10
- require 'ronin/ui/command_line/commands/console'
11
18
  require 'ronin/ui/console'
19
+ require 'ronin/ui/cli/commands/console'
12
20
 
13
21
  Ronin::UI::Console.auto_load << 'ronin/scanners'
14
- Ronin::UI::CommandLine::Commands::Console.run(*ARGV)
22
+ Ronin::UI::CLI::Commands::Console.start
@@ -0,0 +1,31 @@
1
+ name: ronin-scanners
2
+ summary:
3
+ A Ruby library for Ronin that provides Ruby interfaces to various
4
+ third-party security scanners.
5
+
6
+ description:
7
+ Ronin Scanners is a Ruby library for Ronin that provides Ruby interfaces
8
+ to various third-party security scanners.
9
+
10
+ license: GPL-2
11
+ authors: Postmodern
12
+ email: postmodern.mod3@gmail.com
13
+ homepage: http://ronin-ruby.github.com/scanners/
14
+ has_yard: true
15
+
16
+ dependencies:
17
+ open_namespace: ~> 0.3
18
+ # Ronin Scanners dependencies:
19
+ ruby-nmap: ~> 0.5
20
+ net-http-persistent: ~> 2.0
21
+ nokogiri: ~> 1.4
22
+ spidr: ~> 0.3
23
+ gscraper: ~> 0.4
24
+ # Ronin dependencies:
25
+ ronin-support: ~> 0.5
26
+ ronin: ~> 1.5
27
+
28
+ development_dependencies:
29
+ bundler: ~> 1.0
30
+ yard: ~> 0.7
31
+ yard-parameters: ~> 0.1
@@ -0,0 +1,25 @@
1
+ #
2
+ # Ronin Scanners - A Ruby library for Ronin that provides Ruby interfaces to
3
+ # various third-party security scanners.
4
+ #
5
+ # Copyright (c) 2008-2012 Hal Brodigan (postmodern.mod3 at gmail.com)
6
+ #
7
+ # This program is free software; you can redistribute it and/or modify
8
+ # it under the terms of the GNU General Public License as published by
9
+ # the Free Software Foundation; either version 2 of the License, or
10
+ # (at your option) any later version.
11
+ #
12
+ # This program is distributed in the hope that it will be useful,
13
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ # GNU General Public License for more details.
16
+ #
17
+ # You should have received a copy of the GNU General Public License
18
+ # along with this program; if not, write to the Free Software
19
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
20
+ #
21
+
22
+ require 'ronin/database/migrations/scanners/1.0.0'
23
+ require 'ronin/database/database'
24
+
25
+ Ronin::Database.upgrade!
@@ -0,0 +1,51 @@
1
+ #
2
+ # Ronin Scanners - A Ruby library for Ronin that provides Ruby interfaces to
3
+ # various third-party security scanners.
4
+ #
5
+ # Copyright (c) 2008-2012 Hal Brodigan (postmodern.mod3 at gmail.com)
6
+ #
7
+ # This program is free software; you can redistribute it and/or modify
8
+ # it under the terms of the GNU General Public License as published by
9
+ # the Free Software Foundation; either version 2 of the License, or
10
+ # (at your option) any later version.
11
+ #
12
+ # This program is distributed in the hope that it will be useful,
13
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ # GNU General Public License for more details.
16
+ #
17
+ # You should have received a copy of the GNU General Public License
18
+ # along with this program; if not, write to the Free Software
19
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
20
+ #
21
+
22
+ require 'ronin/database/migrations'
23
+
24
+ module Ronin
25
+ module Database
26
+ module Migrations
27
+ migration(
28
+ :create_scanners_table,
29
+ :needs => [:create_licenses_table, :create_script_paths_table]
30
+ ) do
31
+ up do
32
+ create_table :ronin_scanners_scanners do
33
+ column :id, Integer, :serial => true
34
+ column :type, String, :not_null => true
35
+ column :name, String, :not_null => true
36
+ column :version, String, :default => '0.1'
37
+ column :description, Text
38
+ column :license_id, Integer
39
+ column :script_path_id, Integer
40
+ end
41
+
42
+ create_index :ronin_scanners_scanners, :name
43
+ end
44
+
45
+ down do
46
+ drop_table :ronin_scanners_scanners
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -1,9 +1,8 @@
1
1
  #
2
- #--
3
2
  # Ronin Scanners - A Ruby library for Ronin that provides Ruby interfaces to
4
3
  # various third-party security scanners.
5
4
  #
6
- # Copyright (c) 2008-2009 Hal Brodigan (postmodern.mod3 at gmail.com)
5
+ # Copyright (c) 2008-2012 Hal Brodigan (postmodern.mod3 at gmail.com)
7
6
  #
8
7
  # This program is free software; you can redistribute it and/or modify
9
8
  # it under the terms of the GNU General Public License as published by
@@ -18,9 +17,12 @@
18
17
  # You should have received a copy of the GNU General Public License
19
18
  # along with this program; if not, write to the Free Software
20
19
  # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
21
- #++
22
20
  #
23
21
 
24
- require 'ronin/scanners/nmap'
25
- require 'ronin/scanners/nikto'
22
+ require 'ronin/database/migrations/scanners'
23
+
24
+ require 'ronin/scanners/scanners'
26
25
  require 'ronin/scanners/version'
26
+ require 'ronin/config'
27
+
28
+ Ronin::Config.load :scanners
@@ -0,0 +1,173 @@
1
+ #
2
+ # Ronin Scanners - A Ruby library for Ronin that provides Ruby interfaces to
3
+ # various third-party security scanners.
4
+ #
5
+ # Copyright (c) 2008-2012 Hal Brodigan (postmodern.mod3 at gmail.com)
6
+ #
7
+ # This program is free software; you can redistribute it and/or modify
8
+ # it under the terms of the GNU General Public License as published by
9
+ # the Free Software Foundation; either version 2 of the License, or
10
+ # (at your option) any later version.
11
+ #
12
+ # This program is distributed in the hope that it will be useful,
13
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ # GNU General Public License for more details.
16
+ #
17
+ # You should have received a copy of the GNU General Public License
18
+ # along with this program; if not, write to the Free Software
19
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
20
+ #
21
+
22
+ require 'ronin/scanners/url_scanner'
23
+
24
+ require 'gscraper/search'
25
+
26
+ module Ronin
27
+ module Scanners
28
+ class Dork < URLScanner
29
+
30
+ # The query types and their `GScraper::Search::Query` classes
31
+ QUERY_TYPES = {
32
+ :web => GScraper::Search::WebQuery,
33
+ :ajax => GScraper::Search::AJAXQuery
34
+ }
35
+
36
+ # The host to submit queries to
37
+ parameter :search_host, :type => String,
38
+ :default => GScraper::Search::Query::DEFAULT_HOST,
39
+ :description => 'The host to submit queries to'
40
+
41
+ # The type of query to perform (`:web` or `:ajax`)
42
+ parameter :query_type, :type => Symbol,
43
+ :default => :web,
44
+ :description => "The type of query to perform ('web' or 'ajax')"
45
+
46
+ # Number of seconds to pause between queries
47
+ parameter :query_pause, :type => Integer,
48
+ :default => 2,
49
+ :description => 'Number of seconds to pause between queries'
50
+
51
+ # The raw query
52
+ parameter :raw_query, :type => String,
53
+ :description => 'The raw query'
54
+
55
+ # The search language
56
+ parameter :language, :type => String,
57
+ :description => 'The search language'
58
+
59
+ # Search 'link' modifier
60
+ parameter :link, :type => String,
61
+ :description => "Search 'link' modifier"
62
+
63
+ # Search 'related' modifier
64
+ parameter :related, :type => String,
65
+ :description => "Search 'related' modifier"
66
+
67
+ # Search 'info' modifier
68
+ parameter :info, :type => String,
69
+ :description => "Search 'info' modifier"
70
+
71
+ # Search 'site' modifier
72
+ parameter :site, :type => String,
73
+ :description => "Search 'site' modifier"
74
+
75
+ # Search 'filetype' modifier
76
+ parameter :filetype, :type => String,
77
+ :description => "Search 'filetype' modifier"
78
+
79
+ # Search 'allintitle' modifier
80
+ parameter :allintitle, :type => Array[String],
81
+ :description => "Search 'allintitle' modifier"
82
+
83
+ # Search 'intitle' modifier
84
+ parameter :intitle, :type => String,
85
+ :description => "Search 'intitle' modifier"
86
+
87
+ # Search 'allinurl' modifier
88
+ parameter :allinurl, :type => Array[String],
89
+ :description => "Search 'allinurl' modifier"
90
+
91
+ # Search 'inurl' modifier
92
+ parameter :inurl, :type => String,
93
+ :description => "Search 'inurl' modifier"
94
+
95
+ # Search 'allintext' modifier
96
+ parameter :allintext, :type => Array[String],
97
+ :description => "Search 'allintext' modifier"
98
+
99
+ # Search 'intext' modifier
100
+ parameter :intext, :type => String,
101
+ :description => "Search 'intext' modifier"
102
+
103
+ # Search for results containing the exact phrase
104
+ parameter :exact_phrase, :type => String,
105
+ :description => 'Search for results containing the exact phrase'
106
+
107
+ # Search for results with the words
108
+ parameter :with_words, :type => Array[String],
109
+ :description => 'Search for results with the words'
110
+
111
+ # Search for results with-out the words
112
+ parameter :without_words, :type => Array[String],
113
+ :description => 'Search for results with-out the words'
114
+
115
+ # Search for results containing the definitions of the keywords
116
+ parameter :define, :type => String,
117
+ :description => 'Search for results containing the definitions of the keywords'
118
+
119
+ # Search for results containing numbers between the range
120
+ parameter :numeric_range, :type => String,
121
+ :description => 'Search for results containing numbers between the range'
122
+
123
+ protected
124
+
125
+ def search_options
126
+ {
127
+ :search_host => self.search_host,
128
+ :query => self.raw_query,
129
+ :language => self.language,
130
+ :link => self.link,
131
+ :related => self.related,
132
+ :info => self.info,
133
+ :site => self.site,
134
+ :filetype => self.filetype,
135
+ :allintitle => self.allintitle,
136
+ :intitle => self.intitle,
137
+ :allinurl => self.allinurl,
138
+ :inurl => self.inurl,
139
+ :allintext => self.allintext,
140
+ :intext => self.intext,
141
+ :exact_phrase => self.exact_phrase,
142
+ :with_words => self.with_words,
143
+ :without_words => self.without_words,
144
+ :define => self.without_words,
145
+ :numeric_range => self.numeric_range
146
+ }
147
+ end
148
+
149
+ #
150
+ # Performs the Google Dork and passes back every URL from the search
151
+ # results.
152
+ #
153
+ # @yield [url]
154
+ # Every URL from every Page.
155
+ #
156
+ # @yieldparam [URI::HTTP] url
157
+ # A URL from the search results.
158
+ #
159
+ # @see http://rubydoc.info/gems/gscraper
160
+ #
161
+ def scan(&block)
162
+ QUERY_TYPES.fetch(self.query_type).new(search_options) do |search|
163
+ search.each do |page|
164
+ page.each_url(&block)
165
+
166
+ sleep(self.query_pause)
167
+ end
168
+ end
169
+ end
170
+
171
+ end
172
+ end
173
+ end