Nessus6 0.1.8 → 0.2.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c3aba5750c8d57f4ebc153f048b939b66c133a79
4
- data.tar.gz: 6d3eedfd62b45e77531f081c56da11990a13d01f
3
+ metadata.gz: f946afee24ef43e6b6628db34f17781d12d4ee9c
4
+ data.tar.gz: d143fca91c08c8cf0180f51410dc6e7fce95ffcf
5
5
  SHA512:
6
- metadata.gz: 928cc8afbaa5b4d6600980101c9cf376160b025891df37dca292a1222cb84738243b86d03633e5ea6ee5d64960d8fd208ca5fe120120aa59f9b619b97b3c2ddf
7
- data.tar.gz: c7eb4bfad5059da1892f34076cb8cc1c1f40bb62c7f7e6a0a5bacc4e179b3028bfe81b9b049983e23d765209f7ab9fab37fc2da53fc8573aac8056855ec52036
6
+ metadata.gz: f79d967ef973421555e7bb5b6a0ca06bf342480f44de6a3c5b8c8943076f90f96aeacc143ba59599d094cf1387455b6b60cf7bc3b6f9ce0161e0b4ce12b90630
7
+ data.tar.gz: 517c90f4d10b8b2fabc6050143b36c8a9acb974e58ccca8c604c79a25da353599758eda73355a6df880544da35350ba28e5064ddcbd065278ee16e7e05d647a6
@@ -14,6 +14,7 @@ rvm:
14
14
  - jruby-head
15
15
 
16
16
  before_install:
17
+ - gem install bundler -v 1.10.6
17
18
  - gem update --system
18
19
  - gem --version
19
20
 
@@ -0,0 +1,54 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'Nessus6'
4
+ require 'fileutils'
5
+ require 'logger'
6
+
7
+ # Global variables for the script / binary
8
+ @base_directory = '/opt/scanner'
9
+ @temp_directory = "#{@base_directory}/temp#{Process.pid}"
10
+ @incoming_directory = "#{@base_directory}/targets/incoming"
11
+ @results_directory = "#{@base_directory}/results"
12
+ @send_mail = '/usr/lib/sendmail -t'
13
+
14
+ credentials = {
15
+ access_key: 'eeb88394142b4b328332c2448e0f04846161493a50feaa454cbb2fa5083919f9',
16
+ secret_key: 'b0d69c23612754367a84d168f2e7d6769aff1342cb25aa345481cb537164e092'
17
+ }
18
+
19
+ nessus_location = {
20
+ ip: 'localhost',
21
+ port: '8834'
22
+ }
23
+
24
+ @append_results = "x-scanner|#{nessus_location[:ip]}"
25
+
26
+ # Prep work
27
+ FileUtils.mkdir_p @temp_directory
28
+ @logger = Logger.new(STDOUT)
29
+ @logger.level = Logger::INFO
30
+
31
+ # Begin the main portion of the app
32
+ @logger.debug 'Creating Nessus API Client'
33
+ @client = Nessus6::Client.new credentials, nessus_location
34
+
35
+ Dir.foreach(@incoming_directory) do |file|
36
+ @logger.debug "Processing #{@incoming_directory}/#{file}"
37
+ next if file == '.' || file == '..' # skip current / parent directory opts
38
+
39
+ @logger.info "Archiving #{@incoming_directory}/#{file} to " \
40
+ "#{@base_directory}/targets/archive/#{file}."
41
+ # FileUtils.copy "#{@incoming_directory}/#{file}",
42
+ # "#{@base_directory}/targets/archive/#{file}"
43
+
44
+ @logger.info "Moving #{@incoming_directory}/#{file} to " \
45
+ "#{@temp_directory}/#{file}"
46
+ # FileUtils.move "#{@incoming_directory}/#{file}",
47
+ # "#{@temp_directory}/#{file}"
48
+
49
+ @logger.info 'Finding the request ID in the file.'
50
+ request_id = File.readlines("#{@incoming_directory}/#{file}").select do |line|
51
+ line =~ /^requestid.*$/
52
+ end
53
+ puts request_id
54
+ end
@@ -0,0 +1,90 @@
1
+ #!/bin/sh
2
+
3
+ #
4
+ # Script looks for target files in incoming directory, and launches Nessus
5
+ #
6
+
7
+ BASEDIR=/opt/scanner
8
+ TEMPDIR=${BASEDIR}/temp$$
9
+ INCOMINGDIR=${BASEDIR}/targets/incoming
10
+ RESULTSDIR=${BASEDIR}/results
11
+ SENDMAIL="/usr/lib/sendmail -t"
12
+
13
+ NESSUSBIN=/opt/nessus/bin/nessus
14
+ NESSUSUSER=scripts
15
+ NESSUSPASSWORD=XXXXXXXXXXXXXXX
16
+
17
+ IPADDR="153.39.86.90"
18
+ APPENDRESULTS="x-scanner|${IPADDR}"
19
+
20
+ mkdir -p ${TEMPDIR}
21
+
22
+ #
23
+ # Grab one file in incoming directory
24
+ #
25
+ FILES=`cd ${INCOMINGDIR}; ls -r -1 *.txt | tail -n 1`
26
+ for file in $FILES
27
+ do
28
+ echo "Moving ${INCOMINGDIR}/${file} to ${TEMPDIR}/${file}..."
29
+ cp ${INCOMINGDIR}/${file} ${BASEDIR}/targets/archive/${file}
30
+ mv ${INCOMINGDIR}/${file} ${TEMPDIR}/${file}
31
+ if [ $? -eq 0 ]
32
+ then
33
+ #
34
+ # Find request id
35
+ #
36
+ REQUESTID=`cat ${TEMPDIR}/${file} | grep "requestid" | awk '{ print $2 }'`
37
+ if [ -z ${REQUESTID} ]
38
+ then
39
+ REQUESTID=`date -u +%s`
40
+ else
41
+ APPENDRESULTS="${APPENDRESULTS}
42
+ x-requestid|${REQUESTID}"
43
+ fi
44
+
45
+ #
46
+ # Find scanning method and nessusrc
47
+ #
48
+ METHOD=`cat ${TEMPDIR}/${file} | grep "method" | awk '{ print $2 }'`
49
+ if [ -z ${METHOD} ]
50
+ then
51
+ METHOD="default"
52
+ fi
53
+
54
+ # NESSUSRC="${NESSUSRC}.${METHOD}"
55
+ NESSUSRC="${BASEDIR}/${METHOD}.nessusrc"
56
+
57
+ #
58
+ # Create target file
59
+ #
60
+ TARGETFILE=${TEMPDIR}/tmp_target_${IPADDR}_${REQUESTID}.txt
61
+ RESULTSFILE=${TEMPDIR}/results_${IPADDR}_${REQUESTID}_$$.nbe
62
+ echo "Creating ${TARGETFILE}..."
63
+ cat ${TEMPDIR}/${file} | grep "\/" > ${TARGETFILE}
64
+
65
+ #
66
+ # Launch Nessus
67
+ #
68
+ echo "Launching Nessus..."
69
+ ${NESSUSBIN} -x -q -c ${NESSUSRC} 127.0.0.1 1241 ${NESSUSUSER} ${NESSUSPASSWORD} ${TARGETFILE} ${RESULTSFILE}
70
+ if [ $? -eq 0 ] && [ -s ${RESULTSFILE} ]
71
+ then
72
+ echo "${APPENDRESULTS}" >> ${RESULTSFILE}
73
+ else
74
+ # Nessus failed, move target file back to incoming dir
75
+ mv ${TEMPDIR}/${file} ${INCOMINGDIR}/${file}
76
+ rm -rf ${TEMPDIR}
77
+ exit 1
78
+ fi
79
+
80
+ echo "Moving ${RESULTSFILE} to ${RESULTSDIR}..."
81
+
82
+ # copy results to results dir
83
+ cp ${RESULTSFILE} ${BASEDIR}/archive
84
+ mv ${RESULTSFILE} ${RESULTSDIR}/
85
+ echo "Cleaning up ${TEMPDIR}..."
86
+ rm ${TARGETFILE} ${TEMPDIR}/${file}
87
+ fi
88
+ done
89
+
90
+ rmdir --ignore-fail-on-non-empty ${TEMPDIR}
@@ -11,6 +11,18 @@ module Nessus6
11
11
  @client = client
12
12
  end
13
13
 
14
+ # Changes the schedule or policy parameters of a scan
15
+ #
16
+ # @param scan_id [String, Fixnum] The id of the scan to change.
17
+ # @param opts [Hash]
18
+ # @return [Hash] Returns information about the scan in question.
19
+ def configure(scan_id, opts)
20
+ response = client.put "scans/#{scan_id}", opts
21
+ verify response,
22
+ not_found: 'Scan does not exist.',
23
+ internal_server_error: 'Error occurred while saving the configuration'
24
+ end
25
+
14
26
  # Copies the given scan. Requires can configure scan permissions
15
27
  #
16
28
  # @param scan_id [String, Fixnum] The id of the scan to export.
@@ -28,10 +40,21 @@ module Nessus6
28
40
  end
29
41
 
30
42
  verify response,
31
- not_found: 'Scan does not exist.',
43
+ not_found: "Scan with Scan ID of #{scan_id} does not exist.",
32
44
  internal_server_error: 'An error occurred while copying.'
33
45
  end
34
46
 
47
+ # Creates a scan.
48
+ # This request requires standard user permissions.
49
+ #
50
+ # @param opts [Hash] The parameters hash required for creating a scan.
51
+ # @return [Hash]
52
+ def create(opts)
53
+ response = @client.post 'scans', opts
54
+ verify response,
55
+ internal_server_error: 'An error occurred while saving the scan.'
56
+ end
57
+
35
58
  # Deletes a scan. NOTE: Scans in running, paused or stopping states can not
36
59
  # be deleted. This request requires can configure scan permissions
37
60
  #
@@ -54,7 +77,7 @@ module Nessus6
54
77
  def delete_history(scan_id, query_params = nil)
55
78
  response = @client.delete "scans/#{scan_id}"
56
79
  verify response,
57
- not_found: 'Results were not found.',
80
+ not_found: "Results were not found for scan #{scan_id}.",
58
81
  internal_server_error: 'Failed to delete the results.'
59
82
  end
60
83
 
@@ -74,6 +97,33 @@ module Nessus6
74
97
  JSON.parse response.body
75
98
  end
76
99
 
100
+ # Downloads an exported scan
101
+ # This request requires can view scan permissions
102
+ #
103
+ # @param scan_id [String, Fixnum] The id of the scan to export
104
+ # @param file_id [String, Fixnum] The id of the file to download (included in response from /scans/{scan_id}/export)
105
+ def download(scan_id, file_id, write_path = nil)
106
+ response = @client.get "scans/#{scan_id}/export/#{file_id}/download"
107
+ hash_response = verify response,
108
+ not_found: 'The scan or file does not exist.'
109
+
110
+ File.open(write_path, 'w+') { |file| file.write response } unless write_path.nil?
111
+ hash_response
112
+ end
113
+
114
+ # Export the given scan
115
+ # This request requires can view scan permissions
116
+ #
117
+ # @param scan_id [String, Fixnum] The id of the scan to export
118
+ # @param opts [Hash] The hash of query parameters
119
+ def export(scan_id, params)
120
+ response = @client.post "scans/#{scan_id}/export", params
121
+ verify response,
122
+ bad_request: 'Missing required parameters: Scan ID or File Format'\
123
+ ' (:format) are required.',
124
+ not_found: "Scan ID #{scan_id} could not be found. Please try again"
125
+ end
126
+
77
127
  # Launches a scan.
78
128
  #
79
129
  # @param scan_id [String, Fixnum] The id of the scan to launch.
@@ -94,7 +94,7 @@ module Nessus6
94
94
  # @return [Hash] The user list
95
95
  def list
96
96
  response = @client.get('users')
97
- verif response,
97
+ verify response,
98
98
  forbidden: 'You do not have permission to view the list'
99
99
  end
100
100
 
@@ -1,5 +1,5 @@
1
1
  # The Nessus6 module is used to interact with Nessus version 6 servers.
2
2
  module Nessus6
3
3
  # VERSION is the current version of the Nessus6 gem
4
- VERSION = '0.1.8'
4
+ VERSION = '0.2.0'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: Nessus6
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.8
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kevin Kirsche
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-09-30 00:00:00.000000000 Z
11
+ date: 2015-10-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -110,6 +110,8 @@ files:
110
110
  - README.md
111
111
  - Rakefile
112
112
  - bin/console
113
+ - bin/launch_incoming_scans
114
+ - bin/launch_incoming_scans.sh
113
115
  - bin/setup
114
116
  - lib/Nessus6.rb
115
117
  - lib/Nessus6/editor.rb