nexpose-security-console 0.0.4 → 0.0.6
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 +4 -4
- data/exe/nsc +1 -166
- data/lib/nexpose-security-console.rb +0 -1
- data/lib/nexpose-security-console/version.rb +1 -1
- data/nexpose-security-console.gemspec +0 -3
- metadata +2 -44
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 30e3ae63139fa29d3781c0db24f4e314ec2b8a0c
|
4
|
+
data.tar.gz: d4198d10804c9727956551f93f7f2db3cde16f94
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5cd9f16707c5c7796c75c7a219b9e6819568a34b0c546ec28ec4472cb48aa7132acc725b2834f962b57e63d8895074e92ece846de4ce31dc3d6f2516275380a9
|
7
|
+
data.tar.gz: 4bcd4b8137dac18b2b5ca9575bef734c971f7f366d7d201398b0d40fd713bf486befbbe163435a397404b0a17e31b69c3741687eb0ed191a30dc7135fbd4b968
|
data/exe/nsc
CHANGED
@@ -4,10 +4,6 @@ require "nexpose-security-console"
|
|
4
4
|
require 'progress_bar'
|
5
5
|
require 'csv'
|
6
6
|
|
7
|
-
require 'capybara/poltergeist'
|
8
|
-
require 'capybara/dsl'
|
9
|
-
include Capybara::DSL
|
10
|
-
Capybara.default_driver = :poltergeist
|
11
7
|
|
12
8
|
include GLI::App
|
13
9
|
include NexposeSecurityConsole
|
@@ -18,76 +14,16 @@ version NexposeSecurityConsole::VERSION
|
|
18
14
|
subcommand_option_handling :normal
|
19
15
|
arguments :strict
|
20
16
|
|
21
|
-
# desc 'Manage sites'
|
22
|
-
# arg_name 'Describe arguments to sites here'
|
23
|
-
# command :sites do |c|
|
24
|
-
# c.action do |global_options,options,args|
|
25
|
-
#
|
26
|
-
# # Your command logic here
|
27
|
-
# # If you have any errors, just raise them
|
28
|
-
# # raise "that command made no sense"
|
29
|
-
#
|
30
|
-
# puts "sites command ran"
|
31
|
-
# end
|
32
|
-
# end
|
33
|
-
#
|
34
|
-
|
35
|
-
desc 'Verify connection to the server'
|
36
|
-
command [:connect, :login] do |c|
|
37
|
-
c.flag [:u, :username], arg_name: 'USERNAME', default_value: ENV['NEXPOSE_USER']
|
38
|
-
c.flag [:p, :password], arg_name: 'PASSWORD', default_value: ENV['NEXPOSE_PASSWORD']
|
39
|
-
c.flag [:s, :server], arg_name: 'SERVER', default_value: ENV['NEXPOSE_HOST']
|
40
|
-
c.flag [:port], arg_name: 'PORT', default_value: 3780, type: Integer
|
41
|
-
|
42
|
-
c.action do |global_options,options,args|
|
43
|
-
username = options[:username]
|
44
|
-
password = options[:password]
|
45
|
-
server = options[:server]
|
46
|
-
port = options[:port]
|
47
|
-
|
48
|
-
nsc = NexposeSecurityConsole.connection()
|
49
|
-
puts "Success" if nsc.login
|
50
|
-
nsc.logout
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
# desc 'Manage asset groups'
|
55
|
-
# command :groups do |c|
|
56
|
-
# c.desc 'List asset groups'
|
57
|
-
# c.command :list do |list|
|
58
|
-
# list.action do |global_options,options,args|
|
59
|
-
# puts "list asset groups"
|
60
|
-
# end
|
61
|
-
# end
|
62
|
-
# c.default_command :list
|
63
|
-
# end
|
64
|
-
#
|
65
|
-
#
|
66
|
-
|
67
|
-
|
68
|
-
# TODO
|
69
|
-
# IDEA
|
70
|
-
# It will be nice
|
71
|
-
# Nexpose can lazy load the filtered assets
|
72
|
-
|
73
17
|
desc 'Bulk delete assets with unknown OS'
|
74
18
|
command :bulk_delete do |c|
|
75
19
|
c.action do |global_options, options, args|
|
76
20
|
puts 'Logging in ...'
|
77
21
|
nsc = NexposeSecurityConsole.login
|
78
22
|
nsc.login
|
79
|
-
puts 'I am in'
|
23
|
+
puts 'I am in.'
|
80
24
|
puts 'Retrieving all assets with unknown OS'
|
81
25
|
puts 'This may take a while. Get some coffee. Be patient ...'
|
82
26
|
|
83
|
-
# dag = nsc.asset_groups.find {|group| group.name == 'Unknown OS' }
|
84
|
-
# group = Nexpose::AssetGroup.load(nsc, dag.id)
|
85
|
-
# total = group.assets.count
|
86
|
-
# bar = ProgressBar.new(total, :counter, :percentage, :eta)
|
87
|
-
# group.assets.each_with_index do |a,i|
|
88
|
-
# nsc.delete_asset(a.id)
|
89
|
-
# bar.increment!
|
90
|
-
# end
|
91
27
|
assets = nsc.filter( Nexpose::Search::Field::OS, Nexpose::Search::Operator::IS_EMPTY )
|
92
28
|
total = assets.count
|
93
29
|
bar = ProgressBar.new(total, :counter, :percentage, :eta)
|
@@ -100,107 +36,6 @@ command :bulk_delete do |c|
|
|
100
36
|
end
|
101
37
|
end
|
102
38
|
|
103
|
-
desc 'Delete assets via web'
|
104
|
-
long_desc <<-DESC
|
105
|
-
Use this command when you have more than 10_000 assets to be deleted.
|
106
|
-
I used it to delete 100_000 assets in less than 30 minutes
|
107
|
-
compared to the days required when using the normal Nexpose API.
|
108
|
-
|
109
|
-
NOTE: This command is very dependent on the web interface .
|
110
|
-
It may break after Nexpose GUI changes.
|
111
|
-
|
112
|
-
DESC
|
113
|
-
arg_name 'ASSET_GROUP_NAME', default_value: 'Unknown OS'
|
114
|
-
command :web_delete do |c|
|
115
|
-
c.flag [:d, :delay], arg_name: 'SECONDS', default_value: 25, type: :integer
|
116
|
-
c.action do |global_options, options, args|
|
117
|
-
host = ENV['NEXPOSE_HOST']
|
118
|
-
port = ENV['NEXPOSE_PORT']
|
119
|
-
username = ENV['NEXPOSE_USER']
|
120
|
-
password = ENV['NEXPOSE_PASSWORD']
|
121
|
-
delay = options['delay']
|
122
|
-
uri = "https://#{host}:#{port}/login.jsp"
|
123
|
-
asset_group_name = args.first
|
124
|
-
|
125
|
-
Capybara.default_max_wait_time = delay
|
126
|
-
loop do
|
127
|
-
begin
|
128
|
-
visit uri
|
129
|
-
rescue
|
130
|
-
next
|
131
|
-
end
|
132
|
-
puts page.title
|
133
|
-
if page.has_title?( "Log on to Nexpose" )
|
134
|
-
fill_in 'Username', with: username
|
135
|
-
fill_in 'Password', with: password
|
136
|
-
click_button 'Log on'
|
137
|
-
if page.has_title?('Dashboard')
|
138
|
-
puts 'Success!'
|
139
|
-
else
|
140
|
-
puts 'Invalid Login!'
|
141
|
-
exit(-1)
|
142
|
-
end
|
143
|
-
end
|
144
|
-
puts page.title
|
145
|
-
within "#groupSynopsisTable" do
|
146
|
-
click_link( asset_group_name)
|
147
|
-
puts page.title
|
148
|
-
end
|
149
|
-
|
150
|
-
# raise "Sorry, I cannot found an asset group named '#{asset_group_name}'"
|
151
|
-
txt = find(".showingPage > .yui-pg-current").text
|
152
|
-
if txt =~ /\d+ to \d+ of (\d+)/
|
153
|
-
total ||= $1
|
154
|
-
end
|
155
|
-
|
156
|
-
previous = total.to_i
|
157
|
-
bar ||= ProgressBar.new(total.to_i, :counter, :percentage, :eta)
|
158
|
-
|
159
|
-
loop do
|
160
|
-
puts 'step 1: Check the group asset '
|
161
|
-
find("#selectImage-group-assets").trigger(:click)
|
162
|
-
puts 'step 2: Select all visible assets'
|
163
|
-
find("#selectVisible-group-assets").trigger(:click)
|
164
|
-
puts 'step 3: click the DELETE ASSETS button '
|
165
|
-
find("#tableButtons-group-assets > #deleteAssetsBtn-group-assets").trigger(:click)
|
166
|
-
puts 'step 4: Click the YES button'
|
167
|
-
click_button 'Yes'
|
168
|
-
sleep 10
|
169
|
-
|
170
|
-
txt = find(".showingPage > .yui-pg-current").text
|
171
|
-
if txt =~ /\d+ to \d+ of (\d+)/
|
172
|
-
records = $1.to_i
|
173
|
-
end
|
174
|
-
current = records
|
175
|
-
exit if current == 0
|
176
|
-
bar.increment!(previous - current)
|
177
|
-
puts "Number of Assets: #{records}"
|
178
|
-
if current == previous
|
179
|
-
sleep 25
|
180
|
-
break
|
181
|
-
end
|
182
|
-
previous = current
|
183
|
-
end
|
184
|
-
|
185
|
-
end
|
186
|
-
end
|
187
|
-
end
|
188
|
-
|
189
|
-
desc 'Manage assets'
|
190
|
-
arg_name 'Describe arguments to assets here'
|
191
|
-
command :assets do |c|
|
192
|
-
c.action do |global_options,options,args|
|
193
|
-
puts "assets command ran"
|
194
|
-
end
|
195
|
-
end
|
196
|
-
|
197
|
-
desc 'Manage reports'
|
198
|
-
arg_name 'Describe arguments to reports here'
|
199
|
-
command :reports do |c|
|
200
|
-
c.action do |global_options,options,args|
|
201
|
-
puts "reports command ran"
|
202
|
-
end
|
203
|
-
end
|
204
39
|
|
205
40
|
pre do |global,command,options,args|
|
206
41
|
# Pre logic here
|
@@ -54,7 +54,6 @@ Gem::Specification.new do |spec|
|
|
54
54
|
spec.add_development_dependency 'guard'
|
55
55
|
spec.add_development_dependency 'guard-minitest'
|
56
56
|
spec.add_development_dependency 'guard-bundler'
|
57
|
-
spec.add_development_dependency 'guard-cucumber'
|
58
57
|
spec.add_development_dependency 'byebug', '~> 9.0'
|
59
58
|
spec.add_development_dependency 'simplecov', '~> 0.12'
|
60
59
|
spec.add_development_dependency 'rubocop', '~> 0'
|
@@ -64,7 +63,5 @@ Gem::Specification.new do |spec|
|
|
64
63
|
spec.add_dependency 'nexpose'
|
65
64
|
spec.add_dependency 'dotenv'
|
66
65
|
spec.add_dependency 'progress_bar'
|
67
|
-
spec.add_dependency 'capybara'
|
68
|
-
spec.add_dependency 'poltergeist'
|
69
66
|
|
70
67
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nexpose-security-console
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Christian Kyony
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-07-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -136,20 +136,6 @@ dependencies:
|
|
136
136
|
- - ">="
|
137
137
|
- !ruby/object:Gem::Version
|
138
138
|
version: '0'
|
139
|
-
- !ruby/object:Gem::Dependency
|
140
|
-
name: guard-cucumber
|
141
|
-
requirement: !ruby/object:Gem::Requirement
|
142
|
-
requirements:
|
143
|
-
- - ">="
|
144
|
-
- !ruby/object:Gem::Version
|
145
|
-
version: '0'
|
146
|
-
type: :development
|
147
|
-
prerelease: false
|
148
|
-
version_requirements: !ruby/object:Gem::Requirement
|
149
|
-
requirements:
|
150
|
-
- - ">="
|
151
|
-
- !ruby/object:Gem::Version
|
152
|
-
version: '0'
|
153
139
|
- !ruby/object:Gem::Dependency
|
154
140
|
name: byebug
|
155
141
|
requirement: !ruby/object:Gem::Requirement
|
@@ -262,34 +248,6 @@ dependencies:
|
|
262
248
|
- - ">="
|
263
249
|
- !ruby/object:Gem::Version
|
264
250
|
version: '0'
|
265
|
-
- !ruby/object:Gem::Dependency
|
266
|
-
name: capybara
|
267
|
-
requirement: !ruby/object:Gem::Requirement
|
268
|
-
requirements:
|
269
|
-
- - ">="
|
270
|
-
- !ruby/object:Gem::Version
|
271
|
-
version: '0'
|
272
|
-
type: :runtime
|
273
|
-
prerelease: false
|
274
|
-
version_requirements: !ruby/object:Gem::Requirement
|
275
|
-
requirements:
|
276
|
-
- - ">="
|
277
|
-
- !ruby/object:Gem::Version
|
278
|
-
version: '0'
|
279
|
-
- !ruby/object:Gem::Dependency
|
280
|
-
name: poltergeist
|
281
|
-
requirement: !ruby/object:Gem::Requirement
|
282
|
-
requirements:
|
283
|
-
- - ">="
|
284
|
-
- !ruby/object:Gem::Version
|
285
|
-
version: '0'
|
286
|
-
type: :runtime
|
287
|
-
prerelease: false
|
288
|
-
version_requirements: !ruby/object:Gem::Requirement
|
289
|
-
requirements:
|
290
|
-
- - ">="
|
291
|
-
- !ruby/object:Gem::Version
|
292
|
-
version: '0'
|
293
251
|
description: |2+
|
294
252
|
For security engineers
|
295
253
|
Who need to interact with a Rapid7 Nexpose Security console
|