nexposecli 0.1.13 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 645cb21b939d844ed31021452105951e730eaad6
4
- data.tar.gz: 959c184c42fc6e6c5c3144fa990d29eedcafa4ee
3
+ metadata.gz: 55304881a72629484ab8661e51fa5f7add72f67a
4
+ data.tar.gz: c3b6bda8e98491d93e0e8f68fca7336ff999af7b
5
5
  SHA512:
6
- metadata.gz: 976d9fbcd330e701a208fc2f913db375aec73620d5c28be038b986340900ab0610772a76ed33a89c75e9332eba40e5939ad6db481708e19c7375bec28ca6b872
7
- data.tar.gz: b5baef62a245268cb480f8bf0fb105c47798a2117ba335059ea3084b4217894d20b0daa507d7e54aaeee00349af16b1b51ddffa9d613c08b8b49f53e69d61800
6
+ metadata.gz: 7ed6b2f14f1aa74ee8d49a5c1424b5a88d680c4145200ee590ca26e1e31c9c905d8b10268076f73a4b4759c25db43543d136e9214591b9b6ac694c319c40c0de
7
+ data.tar.gz: 9dfecc38b96235615560ae57897ba19495910481a6db43c2aed4ed7453f1d5610b9fbcb825cea0a8e13e959014a2643f313cab65cf3913794daf476de908d803
data/bin/nexposecli CHANGED
@@ -1,20 +1,18 @@
1
1
  #!/usr/bin/env ruby
2
2
  ##############################################################################
3
3
  #
4
- # File: evm.rb
4
+ # File: nexposecli
5
5
  #
6
6
  # Author: Erik Gomez <gomeze@pobox.com>
7
7
  # Erik Gomez <erik_gomez@rapid7.com>
8
8
  #
9
- # Purpose: UF ISC EVM Administrative tasks via cli
9
+ # Purpose: A command-line utility for the Rapid7 Nexpose Console
10
10
  #
11
- # Base Revision: $Id:$ (20141030@1227.01)
12
- # Revision: $Id:$ (20160426@1315.01)
13
- #
14
- # Usage: ./evm.rb <action> <target> [<args>]
11
+ # Usage: nexposecli <action> <target> [<args>]
15
12
  #
16
13
  # -v verbose
17
14
  # --help help
15
+ #
18
16
  # ***NOTE*** This script is being refactored!!!
19
17
  # It is currently a shameless copy of my UF code and
20
18
  # argparse.rb class code from Jim Hranicky (jfh@ufl.edu)
@@ -30,29 +28,18 @@ require 'netaddr'
30
28
  require 'logger'
31
29
  require 'yaml'
32
30
  require 'csv'
33
- require 'set'
34
31
  # for debug, this dumps the ruby objects to STDOUT
35
32
  require 'pp'
36
33
 
37
34
  ##############################################################################
38
- # Set Const
39
-
40
- # Allowed Ops by field, in Set form
41
- CVSS_SCORE_OPS = Set["IS", "IS_NOT", "IN_RANGE", "GREATER_THAN", "LESS_THAN"]
42
- IP_RANGE_OPS = Set["IN", "NOT_IN"]
43
- OS_OPS = Set["CONTAINS", "NOT_CONTAINS", "IS_EMPTY", "IS_NOT_EMPTY"]
44
- RISK_SCORE_OPS = Set["IS", "IS_NOT", "IN_RANGE", "GREATER_THAN", "LESS_THAN"]
45
- SITE_ID_OPS = Set["IN", "NOT_IN"]
46
- SCAN_DATE_OPS = Set["ON_OR_BEFORE", "ON_OR_AFTER", "BETWEEN", "EARLIER_THAN", "WITHIN_THE_LAST"]
47
-
48
35
  # Set default var values
49
36
  $debug = false
50
37
  uf_scanners = ''
51
38
 
52
- @logpath = "./logs/"
39
+ @logpath = "./"
53
40
  @scanpath = "./"
54
41
  # Attempting to use logfile per month: @logfile = "evm" + Time.now.strftime("%Y%m%d_%H%M%S") + ".log"
55
- @logfile = "evm" + Time.now.strftime("%Y%m") + ".log"
42
+ @logfile = "nexposecli" + Time.now.strftime("%Y%m") + ".log"
56
43
  @evm_reqid = SecureRandom.hex
57
44
  @nsc_server = "<server>"
58
45
  @nsc_user = "<user>"
@@ -80,7 +67,7 @@ def upp( uobj )
80
67
  end
81
68
  end
82
69
 
83
- # UF bail vs exit
70
+ # bail vs exit
84
71
  def ubail(retval, msg)
85
72
  uputs("BAIL", msg.to_s)
86
73
  exit(retval)
@@ -225,14 +212,7 @@ def validate_searchstring(sfstr)
225
212
  valid_search_field = nil
226
213
  valid_search_op = nil
227
214
 
228
- # Valid search fields and operators:
229
- # CVSS_SCORE = IS, IS_NOT, IN_RANGE, GREATER_THAN, LESS_THAN (Float 0.0-10.0)
230
- # IP_RANGE = IN, NOT_IN (IPv4 dotted notation)
231
- # OS = CONTAINS, NOT_CONTAINS, IS_EMPTY, IS_NOT_EMPTY
232
- # RISK_SCORE = IS, IS_NOT, IN_RANGE, GREATER_THAN, LESS_THAN (Fixnum)
233
- # SITE_ID = IN, NOT_IN (Fixnum)
234
- # SCAN_DATE = ON_OR_BEFORE, ON_OR_AFTER, BETWEEN (Value::ScanDate::FORMAT dates)
235
- # SCAN_DATE = EARLIER_THAN, WITHIN_THE_LAST (Fixnum days)
215
+ # Valid search fields and operators can be found in lib/nexposecli/ops.rb
236
216
 
237
217
  # Grab search field and op
238
218
  search_field = sfstr.split(':').first.to_s
@@ -242,17 +222,17 @@ def validate_searchstring(sfstr)
242
222
  isValid = false
243
223
  case search_field
244
224
  when "CVSS_SCORE"
245
- isValid = true if CVSS_SCORE_OPS.include?(search_op)
225
+ isValid = true if Nexposecli::CVSS_SCORE_OPS.include?(search_op)
246
226
  when "IP_RANGE"
247
- isValid = true if IP_RANGE_OPS.include?(search_op)
227
+ isValid = true if Nexposecli::IP_RANGE_OPS.include?(search_op)
248
228
  when "OS"
249
- isValid = true if OS_OPS.include?(search_op)
229
+ isValid = true if Nexposecli::OS_OPS.include?(search_op)
250
230
  when "RISK_SCORE"
251
- isValid = true if RISK_SCORE_OPS.include?(search_op)
231
+ isValid = true if Nexposecli::RISK_SCORE_OPS.include?(search_op)
252
232
  when "SITE_ID"
253
- isValid = true if SITE_ID_OPS.include?(search_op)
233
+ isValid = true if Nexposecli::SITE_ID_OPS.include?(search_op)
254
234
  when "SCAN_DATE"
255
- isValid = true if SCAN_DATE_OPS.include?(search_op)
235
+ isValid = true if Nexposecli::SCAN_DATE_OPS.include?(search_op)
256
236
  else
257
237
  # Unsupported search field
258
238
  end
@@ -265,230 +245,13 @@ def validate_searchstring(sfstr)
265
245
  end
266
246
  end
267
247
 
268
- ##############################################################################
269
- #
270
- # Conf
271
- #
272
- ##############################################################################
273
- # Parse cli and config options passed
274
- ARGS = %q{
275
- - comment : General Options
276
-
277
- - name : help
278
- desc : Print help
279
-
280
- - name : verbose
281
- short : v
282
- desc : Run verbosely
283
-
284
- - comment : EVM Administrative Actions
285
-
286
- - name : create
287
- short : c
288
- desc : The create action is used for new objects
289
-
290
- - name : list
291
- short : l
292
- desc : The list action is used to list of objects of the same type
293
-
294
- - name : show
295
- short : s
296
- desc : The show action is used to display details of a single object
297
-
298
- - name : update
299
- short : u
300
- desc : The update action is used to change properties of a single object
301
-
302
- - name : delete
303
- short : d
304
- desc : The delete action is used to delete a single object
305
-
306
- - name : run
307
- desc : The run action is only used to issue commands to the COMMAND object
308
-
309
- - comment : EVM Action Targets
310
-
311
- - name : USER
312
- short : U
313
- desc : The USER target is used to alter or create the USER object
314
-
315
- - name : ROLE
316
- short : L
317
- desc : The ROLE target is used to alter or create the ROLE object
318
-
319
- - name : ENGINE
320
- short : E
321
- desc : The ENGINE target is used to alter or create the SCAN ENGINE object
322
-
323
- - name : POOL
324
- short : P
325
- desc : The POOL target is used to alter or create the POOL object
326
-
327
- - name : SCAN
328
- short : S
329
- desc : The SCAN target is used to alter or create the SCAN object
330
-
331
- - name : SITE
332
- short : T
333
- desc : The SITE target is used to alter or create the SITE object
334
-
335
- - name : ASSET
336
- short : A
337
- desc : The ASSET target is used to alter or create the ASSET object
338
-
339
- - name : DASSET
340
- short : D
341
- desc : The DASSET target is used to alter or create the DASSET object
342
-
343
- - name : TAG
344
- short : G
345
- desc : The TAG target is used to alter or create the TAG object
346
-
347
- - name : REPORT
348
- short : R
349
- desc : The REPORT target is used to alter or create the REPORT object
350
-
351
- - name : VULN
352
- short : V
353
- desc : The VULN target is used to alter or create the VULN object
354
-
355
- - name : CONSOLE
356
- desc : The CONSOLE target is used to alter the CONSOLE nsc connection object
357
-
358
- - name : COMMAND
359
- short : C
360
- desc : The COMMAND target is only used in conjunction with the --run action
361
- required : true
362
-
363
- - name : QUERY
364
- desc : The QUERY target is only used in conjunction with the --run action
365
-
366
- - comment : EVM Action Argument Values
367
-
368
- - name : host
369
- short : h
370
- desc : The target ip or host to be acted upon by the action
371
- required : true
372
-
373
- - name : port
374
- short : p
375
- desc : The target port to be acted upon by the action
376
- required : true
377
-
378
- - name : name
379
- short : n
380
- desc : The target object name
381
- required : true
382
-
383
- - name : fullname
384
- desc : The target object full name
385
- required : true
386
-
387
- - name : newname
388
- desc : The target object new name
389
- required : true
390
-
391
- - name : description
392
- short : t
393
- desc : The text based description of the object being acted upon
394
- required : true
395
-
396
- - name : id
397
- short : i
398
- desc : The object id being acted upon
399
- required : true
400
-
401
- - name : site
402
- desc : The site id of the object being acted upon
403
- required : true
404
-
405
- - name : range
406
- short : r
407
- desc : The comma separated (begin,end) range of ip addresses to be acted upon
408
- required : true
409
-
410
- - name : targets
411
- desc : The network block or ip addresses to be acted upon, in CIDRv4, dotted dashed, or ip format
412
- required : true
413
-
414
- - name : argv
415
- short : g
416
- desc : Argument vector for the action, in the form key:value pairs
417
- required : true
418
-
419
- - name : filter
420
- short : f
421
- desc : Filters which are applied to the action, in the form key:value pairs
422
- required : true
423
-
424
- - name : filterv
425
- desc : Filter value which are applied to the action. Formate varies by filter type
426
- required : true
427
-
428
- - name : action
429
- short : a
430
- desc : The subaction to be performed within the target action
431
- required : true
432
-
433
- - name : sql
434
- desc : The sql query to be executed
435
- required : true
436
-
437
- - name : sqlvar
438
- desc : The sql query to be executed
439
- required : true
440
-
441
- - name : sqlfile
442
- desc : The file containing the sql query to be executed
443
- required : true
444
-
445
- - name : timeout
446
- desc : The timeout value in seconds for certain actions, such as reporting
447
- required : true
448
-
449
- - name : attempts
450
- desc : The max number of attempts for iterative actions
451
- required : true
452
-
453
- - name : loop_sleep
454
- desc : The sleep interval in seconds between action iterations
455
- required : true
456
-
457
- - comment : Nexpose Console credentials
458
-
459
- - name : config
460
- desc : The config yaml file containing the connection details of the Nexpose Console Server
461
- required : true
462
-
463
- - name : nsc_server
464
- desc : The ip or hostname of the Nexpose Console Server
465
- required : true
466
-
467
- - name : nsc_user
468
- desc : The username to login to the Nexpose Console Server
469
- required : true
470
-
471
- - name : nsc_pass
472
- desc : The password to login to the Nexpose Console Server
473
- required : true
474
-
475
- - name : logpath
476
- desc : The path for writing the logs
477
- required : true
478
-
479
- - name : scanpath
480
- desc : The path for exported/imported scans
481
- required : true
482
- }
483
-
484
-
485
248
  ##############################################################################
486
249
  #
487
250
  # Main
488
251
  #
489
252
  ##############################################################################
490
253
  # Args parsing
491
- ap = Nexposecli::ArgParse.new( ARGS )
254
+ ap = Nexposecli::ArgParse.new( Nexposecli::ARGS )
492
255
 
493
256
  begin
494
257
  args = ap.parse
@@ -508,6 +271,7 @@ end
508
271
  uputs("LOG", "Automation tasks being run from: " + Socket.gethostname.to_s)
509
272
  uputs("LOG", "Automation tasks being logged to: #{@logpath.to_s + @logfile.to_s}")
510
273
 
274
+ # Needs to move
511
275
  if args.scanpath
512
276
  # consider input validation, to avoid sec issues
513
277
  @scanpath = args.scanpath.to_s
@@ -517,6 +281,7 @@ $debug = TRUE if args.verbose
517
281
  uputs("CLI", "Command-line args parsed for #{$0}")
518
282
  uputs("CLI", "Args: #{args.inspect}")
519
283
 
284
+ # Needs to potentially move, based on TARGET help vs general usage
520
285
  if args.help
521
286
  uputs("CLI", "Help was requested, displaying usage and exiting")
522
287
  puts ap.usage("#{$0} [options] (v #{Nexposecli::VERSION})")
@@ -552,9 +317,12 @@ uputs("TARGET", "Checking for the requested target")
552
317
  @target |= 4096 if args.TEMPLATE
553
318
  @target |= 8192 if args.ROLE
554
319
  @target |= 16384 if args.QUERY
320
+ @target |= 32768 if args.AUTHSRC
555
321
  uputs("TARGET", "The requested target value is: #{@target.to_s}")
556
- raise "You can only submit one target per task, see --help (#{@target})" unless [1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384].include?(@target)
322
+ raise "You can only submit one target per task, see --help (#{@target})" unless [1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768].include?(@target)
557
323
 
324
+ # Needs to potentially move into TARGET object or module instance var
325
+ ## First NSC Connection and Session creation
558
326
  # nsc conn vars
559
327
  unless (
560
328
  (args.nsc_server && args.nsc_user && args.nsc_pass) || args.config
@@ -609,26 +377,38 @@ when 1 # TARGET USER
609
377
  uputs("ACTION", 'create USER action requested')
610
378
  name = args.name
611
379
  full_name = "#{args.fullname}"
612
- password = "nxpassword"
380
+ email = "#{args.email}"
381
+ role = "#{args.role}"
382
+ password = "#{args.password}"
613
383
 
614
384
  user = Nexpose::User.new(name,
615
385
  full_name,
616
386
  password,
617
- role_name = 'user',
387
+ role_name = role,
618
388
  id = -1,
619
389
  enabled = 1,
620
- email = nil,
390
+ email = email,
621
391
  all_sites = false,
622
392
  all_groups = false,
623
393
  token = nil)
624
- pp user
625
- puts 'Not yet saved'
394
+ if args.authsrc
395
+ user.authsrcid = args.authsrc
396
+ user.password = nil
397
+ end
626
398
  user.save(@nsc)
627
- pp user
399
+ puts "The user: #{user.name} was created with id: #{user.id}"
400
+ uputs("USER", "New user created: #{user.name} (id:#{user.id})")
401
+ upp user
628
402
  when 2 # list
629
403
  uputs("ACTION", 'list USER action requested')
630
404
  user_listing = @nsc.list_users
631
- pp user_listing
405
+ puts "Users:"
406
+ puts " - " + '%-6.6s' % 'Admin?' + " " + '%-15.15s' % 'Username' + " " + '%-25.25s' % 'Full Name' + " " + '%-30.30s' % 'Email' + " " + '%-25.25s' % "Role" + "\tAuth Module:Source"
407
+ user_listing.each do |user|
408
+ role = Nexpose::User.load(@nsc, user.id).role_name
409
+ puts " - " + '%-6.6s' % user.is_admin.to_s + " " + '%-15.15s' % user.name + " " + '%-25.25s' % user.full_name + " " + '%-30.30s' % user.email + " " + '%-25.25s' % role + "\t#{user.auth_module}:#{user.auth_source}"
410
+ end
411
+ upp user_listing
632
412
  when 4 # show
633
413
  uputs("ACTION", 'show USER action requested')
634
414
  userid = args.id.to_str
@@ -1705,6 +1485,11 @@ when 8192 # TARGET ROLE
1705
1485
  when 2 # list
1706
1486
  uputs("ACTION", 'list ROLE action requested')
1707
1487
  postd = @nsc.roles
1488
+ puts "Roles:"
1489
+ puts " - " + '%-6.6s' % 'Scope' + " " + '%-5.5s' % 'Id' + " " + '%-25.25s' % 'Username' + " " + '%-25.25s' % 'Full Name' + " " + '%-60.60s' % 'Description'
1490
+ postd.each do |role|
1491
+ puts " - " + '%-6.6s' % role.scope + " " + '%-5.5s' % role.id + " " + '%-25.25s' % role.name + " " + '%-25.25s' % role.full_name + " " + '%-60.60s' % role.description
1492
+ end
1708
1493
  upp postd
1709
1494
  puts "\n"
1710
1495
  when 4 # show
@@ -1762,8 +1547,24 @@ when 16384 # TARGET QUERY
1762
1547
 
1763
1548
  puts csv_output
1764
1549
  else
1765
- uputs("ACTION", 'The action requested is not implemented for target: COMMAND')
1766
- puts 'The action requested is not implemented for target: COMMAND'
1550
+ uputs("ACTION", 'The action requested is not implemented for target: QUERY')
1551
+ puts 'The action requested is not implemented for target: QUERY'
1552
+ end
1553
+ when 32768 # TARGET AUTHSRC
1554
+ case @action
1555
+ when 2 # list
1556
+ uputs("ACTION", 'list AUTHSRC action requested')
1557
+ authsrcs = Nexpose::UserAuthenticator.list(@nsc)
1558
+ puts "Authenticator Sources:"
1559
+ puts " - " + '%-10.10s' % 'Auth Module' + " " + '%-5.5s' % 'Id' + " " + '%-40.40s' % 'Auth Source' + " " + '%-10.10s' % 'External?'
1560
+ authsrcs.each do |src|
1561
+ puts " - " + '%-10.10s' % src.auth_module + " " + '%-5.5s' % src.id + " " + '%-40.40s' % src.auth_source + " " + '%-10.10s' % src.external.to_s
1562
+ end
1563
+ upp authsrcs
1564
+ puts "\n"
1565
+ else
1566
+ uputs("ACTION", 'The action requested is not implemented for target: AUTHSRC')
1567
+ puts 'The action requested is not implemented for target: AUTHSRC'
1767
1568
  end
1768
1569
  else
1769
1570
  # there is no default target
data/bin/nexposecli.test CHANGED
@@ -2,5 +2,14 @@
2
2
 
3
3
  require 'nexposecli'
4
4
 
5
- chatter = Nexposecli::Chatter.new
6
- chatter.say_hello
5
+ # chatter = Nexposecli::Chatter.new
6
+ # chatter.say_hello
7
+
8
+ # nxclass = Nexposecli::Target.const_get("Role")
9
+ nxclass = Nexposecli::Target.const_get("#{ARGV[0]}")
10
+
11
+ puts nxclass.new.list
12
+ puts "and again but via const_get for method"
13
+ puts nxclass.new.method("list").call("me")
14
+ puts nxclass.new.method("list").call
15
+ puts nxclass.new.method("list").call("Sarah")
@@ -0,0 +1,232 @@
1
+ module Nexposecli
2
+ ##############################################################################
3
+ #
4
+ # Conf
5
+ #
6
+ ##############################################################################
7
+ # Parse cli and config options passed
8
+ ARGS = %q{
9
+ - comment : General Options
10
+
11
+ - name : help
12
+ desc : Print help
13
+
14
+ - name : verbose
15
+ short : v
16
+ desc : Run verbosely
17
+
18
+ - comment : EVM Administrative Actions
19
+
20
+ - name : create
21
+ short : c
22
+ desc : The create action is used for new objects
23
+
24
+ - name : list
25
+ short : l
26
+ desc : The list action is used to list of objects of the same type
27
+
28
+ - name : show
29
+ short : s
30
+ desc : The show action is used to display details of a single object
31
+
32
+ - name : update
33
+ short : u
34
+ desc : The update action is used to change properties of a single object
35
+
36
+ - name : delete
37
+ short : d
38
+ desc : The delete action is used to delete a single object
39
+
40
+ - name : run
41
+ desc : The run action is only used to issue commands to the COMMAND object
42
+
43
+ - comment : EVM Action Targets
44
+
45
+ - name : USER
46
+ short : U
47
+ desc : The USER target is used to alter or create the USER object
48
+
49
+ - name : ROLE
50
+ short : L
51
+ desc : The ROLE target is used to alter or create the ROLE object
52
+
53
+ - name : ENGINE
54
+ short : E
55
+ desc : The ENGINE target is used to alter or create the SCAN ENGINE object
56
+
57
+ - name : POOL
58
+ short : P
59
+ desc : The POOL target is used to alter or create the POOL object
60
+
61
+ - name : SCAN
62
+ short : S
63
+ desc : The SCAN target is used to alter or create the SCAN object
64
+
65
+ - name : SITE
66
+ short : T
67
+ desc : The SITE target is used to alter or create the SITE object
68
+
69
+ - name : ASSET
70
+ short : A
71
+ desc : The ASSET target is used to alter or create the ASSET object
72
+
73
+ - name : DASSET
74
+ short : D
75
+ desc : The DASSET target is used to alter or create the DASSET object
76
+
77
+ - name : TAG
78
+ short : G
79
+ desc : The TAG target is used to alter or create the TAG object
80
+
81
+ - name : REPORT
82
+ short : R
83
+ desc : The REPORT target is used to alter or create the REPORT object
84
+
85
+ - name : VULN
86
+ short : V
87
+ desc : The VULN target is used to alter or create the VULN object
88
+
89
+ - name : AUTHSRC
90
+ desc : The AUTHSRC target is used to alter or list the AUTHSRC object
91
+
92
+ - name : CONSOLE
93
+ desc : The CONSOLE target is used to alter the CONSOLE nsc connection object
94
+
95
+ - name : COMMAND
96
+ short : C
97
+ desc : The COMMAND target is only used in conjunction with the --run action
98
+ required : true
99
+
100
+ - name : QUERY
101
+ desc : The QUERY target is only used in conjunction with the --run action
102
+
103
+ - comment : EVM Action Argument Values
104
+
105
+ - name : host
106
+ short : h
107
+ desc : The target ip or host to be acted upon by the action
108
+ required : true
109
+
110
+ - name : port
111
+ short : p
112
+ desc : The target port to be acted upon by the action
113
+ required : true
114
+
115
+ - name : authsrc
116
+ desc : The target authsrc id
117
+ required : true
118
+
119
+ - name : role
120
+ desc : The target role name
121
+ required : true
122
+
123
+ - name : email
124
+ desc : The target email address
125
+ required : true
126
+
127
+ - name : name
128
+ short : n
129
+ desc : The target object name
130
+ required : true
131
+
132
+ - name : fullname
133
+ desc : The target object full name
134
+ required : true
135
+
136
+ - name : newname
137
+ desc : The target object new name
138
+ required : true
139
+
140
+ - name : description
141
+ short : t
142
+ desc : The text based description of the object being acted upon
143
+ required : true
144
+
145
+ - name : id
146
+ short : i
147
+ desc : The object id being acted upon
148
+ required : true
149
+
150
+ - name : site
151
+ desc : The site id of the object being acted upon
152
+ required : true
153
+
154
+ - name : range
155
+ short : r
156
+ desc : The comma separated (begin,end) range of ip addresses to be acted upon
157
+ required : true
158
+
159
+ - name : targets
160
+ desc : The network block or ip addresses to be acted upon, in CIDRv4, dotted dashed, or ip format
161
+ required : true
162
+
163
+ - name : argv
164
+ short : g
165
+ desc : Argument vector for the action, in the form key:value pairs
166
+ required : true
167
+
168
+ - name : filter
169
+ short : f
170
+ desc : Filters which are applied to the action, in the form key:value pairs
171
+ required : true
172
+
173
+ - name : filterv
174
+ desc : Filter value which are applied to the action. Formate varies by filter type
175
+ required : true
176
+
177
+ - name : action
178
+ short : a
179
+ desc : The subaction to be performed within the target action
180
+ required : true
181
+
182
+ - name : sql
183
+ desc : The sql query to be executed
184
+ required : true
185
+
186
+ - name : sqlvar
187
+ desc : The sql query to be executed
188
+ required : true
189
+
190
+ - name : sqlfile
191
+ desc : The file containing the sql query to be executed
192
+ required : true
193
+
194
+ - name : timeout
195
+ desc : The timeout value in seconds for certain actions, such as reporting
196
+ required : true
197
+
198
+ - name : attempts
199
+ desc : The max number of attempts for iterative actions
200
+ required : true
201
+
202
+ - name : loop_sleep
203
+ desc : The sleep interval in seconds between action iterations
204
+ required : true
205
+
206
+ - comment : Nexpose Console credentials
207
+
208
+ - name : config
209
+ desc : The config yaml file containing the connection details of the Nexpose Console Server
210
+ required : true
211
+
212
+ - name : nsc_server
213
+ desc : The ip or hostname of the Nexpose Console Server
214
+ required : true
215
+
216
+ - name : nsc_user
217
+ desc : The username to login to the Nexpose Console Server
218
+ required : true
219
+
220
+ - name : nsc_pass
221
+ desc : The password to login to the Nexpose Console Server
222
+ required : true
223
+
224
+ - name : logpath
225
+ desc : The path for writing the logs
226
+ required : true
227
+
228
+ - name : scanpath
229
+ desc : The path for exported/imported scans
230
+ required : true
231
+ }
232
+ end
@@ -0,0 +1,11 @@
1
+ require 'set'
2
+
3
+ module Nexposecli
4
+ # Allowed Search and Filter Operators by field, in Set form
5
+ CVSS_SCORE_OPS = Set["IS", "IS_NOT", "IN_RANGE", "GREATER_THAN", "LESS_THAN"]
6
+ IP_RANGE_OPS = Set["IN", "NOT_IN"]
7
+ OS_OPS = Set["CONTAINS", "NOT_CONTAINS", "IS_EMPTY", "IS_NOT_EMPTY"]
8
+ RISK_SCORE_OPS = Set["IS", "IS_NOT", "IN_RANGE", "GREATER_THAN", "LESS_THAN"]
9
+ SITE_ID_OPS = Set["IN", "NOT_IN"]
10
+ SCAN_DATE_OPS = Set["ON_OR_BEFORE", "ON_OR_AFTER", "BETWEEN", "EARLIER_THAN", "WITHIN_THE_LAST"]
11
+ end
@@ -0,0 +1,10 @@
1
+ module Nexposecli
2
+ module Target
3
+ class Role
4
+ def list(me='you')
5
+ puts "This is a nexposecli role list. Coming Soon for #{me}."
6
+ end
7
+ end
8
+ end
9
+ end
10
+
@@ -0,0 +1,10 @@
1
+ module Nexposecli
2
+ module Target
3
+ class Scan
4
+ def list
5
+ puts 'This is a nexposecli scan list. Coming Soon.'
6
+ end
7
+ end
8
+ end
9
+ end
10
+
@@ -1,3 +1,3 @@
1
1
  module Nexposecli
2
- VERSION = "0.1.13"
2
+ VERSION = "0.2.1"
3
3
  end
data/lib/nexposecli.rb CHANGED
@@ -1,10 +1,9 @@
1
1
  require "nexposecli/version"
2
2
  require "nexposecli/argparse"
3
+ require "nexposecli/args"
4
+ require "nexposecli/ops"
5
+ require "nexposecli/role"
6
+ require "nexposecli/scan"
3
7
 
4
8
  module Nexposecli
5
- class Chatter
6
- def say_hello
7
- puts 'This is nexposecli. Coming Soon.'
8
- end
9
- end
10
9
  end
data/nexposecli.gemspec CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
10
10
  spec.summary = 'Ruby command-line utility for Rapid7 Nexpose'
11
11
  spec.description = 'This experimental gem provides a Ruby command-line utility to the Nexpose vulnerability management product by Rapid7.'
12
12
  spec.homepage = 'https://github.com/frozenr7/nexposecli'
13
- spec.license = 'BSD'
13
+ spec.license = 'BSD-3-Clause'
14
14
 
15
15
  spec.files = `git ls-files`.split($\)
16
16
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
@@ -18,8 +18,8 @@ Gem::Specification.new do |spec|
18
18
  spec.require_paths = ["lib"]
19
19
 
20
20
  spec.required_ruby_version = '>= 2.1'
21
- spec.add_runtime_dependency "nexpose", ">= 4.0.4"
22
- spec.add_runtime_dependency "netaddr", ">= 1.5.1"
21
+ spec.add_runtime_dependency "nexpose", '~> 4.0', '>= 4.0.4'
22
+ spec.add_runtime_dependency "netaddr", '~> 1.5', '>= 1.5.1'
23
23
 
24
24
  spec.add_development_dependency "bundler", "~> 1.12"
25
25
  spec.add_development_dependency "rake", "~> 10.0"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nexposecli
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.13
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Erik Gomez
@@ -9,12 +9,15 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2016-06-02 00:00:00.000000000 Z
12
+ date: 2016-06-16 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: nexpose
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
+ - - "~>"
19
+ - !ruby/object:Gem::Version
20
+ version: '4.0'
18
21
  - - ">="
19
22
  - !ruby/object:Gem::Version
20
23
  version: 4.0.4
@@ -22,6 +25,9 @@ dependencies:
22
25
  prerelease: false
23
26
  version_requirements: !ruby/object:Gem::Requirement
24
27
  requirements:
28
+ - - "~>"
29
+ - !ruby/object:Gem::Version
30
+ version: '4.0'
25
31
  - - ">="
26
32
  - !ruby/object:Gem::Version
27
33
  version: 4.0.4
@@ -29,6 +35,9 @@ dependencies:
29
35
  name: netaddr
30
36
  requirement: !ruby/object:Gem::Requirement
31
37
  requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.5'
32
41
  - - ">="
33
42
  - !ruby/object:Gem::Version
34
43
  version: 1.5.1
@@ -36,6 +45,9 @@ dependencies:
36
45
  prerelease: false
37
46
  version_requirements: !ruby/object:Gem::Requirement
38
47
  requirements:
48
+ - - "~>"
49
+ - !ruby/object:Gem::Version
50
+ version: '1.5'
39
51
  - - ">="
40
52
  - !ruby/object:Gem::Version
41
53
  version: 1.5.1
@@ -103,6 +115,10 @@ files:
103
115
  - bin/setup
104
116
  - lib/nexposecli.rb
105
117
  - lib/nexposecli/argparse.rb
118
+ - lib/nexposecli/args.rb
119
+ - lib/nexposecli/ops.rb
120
+ - lib/nexposecli/role.rb
121
+ - lib/nexposecli/scan.rb
106
122
  - lib/nexposecli/version.rb
107
123
  - nexposecli-0.1.11.gem
108
124
  - nexposecli.gemspec
@@ -110,7 +126,7 @@ files:
110
126
  - spec/spec_helper.rb
111
127
  homepage: https://github.com/frozenr7/nexposecli
112
128
  licenses:
113
- - BSD
129
+ - BSD-3-Clause
114
130
  metadata: {}
115
131
  post_install_message:
116
132
  rdoc_options: []