ronin-scanners 0.1.4 → 1.0.0.pre1

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.
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