pwn 0.4.669 → 0.4.671

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
  SHA256:
3
- metadata.gz: e96159a287c2265adb91e39a706e3c0a9548ddd2ba8d074578f2934e2775fe10
4
- data.tar.gz: 2b4974403902f379fa8f2784c77092133f78efd2cba81ab5ca484f1312e4a6e3
3
+ metadata.gz: 7da5c11247c09b3a6355dd825d5b200c7b54845d2b02b4a91a2b651ac6e0f693
4
+ data.tar.gz: 8ae730c8dcc7af833543ac7b999fb075dd53e64cfb8a348791caadc03bf16c4a
5
5
  SHA512:
6
- metadata.gz: a430615e3224be664dfe9a5a0c0f0c9bd5c91187bad66f512cddcd2d49eae7774f434d5df04f1460a2643812a93fc6e14ff6920daaeda644d825c7f5309b071e
7
- data.tar.gz: 220f9d349bba6b0ccff98969372369faf2d562ae6de83811accdc8d0c604f86ff0e22fc513564ef487041eaa88e957eed1d29ad986df60ccf83a9e235d7821e3
6
+ metadata.gz: 7480b0859bedc2c26bc36fef113eeb0981169f500edfe0d3ece6a69b36a5c5e10bffc052c0640d705620e456233254224df1d5a8bb904b3301189572d8d0a2d9
7
+ data.tar.gz: 6486d7ffa7d468d772639c8666594e21b326de1a5acbafad7fdc966746237df97ed43e7883016d98df3692ad2c0b0a7b623a73162885da0f196f0b1260050375
data/README.md CHANGED
@@ -37,7 +37,7 @@ $ rvm use ruby-3.2.2@pwn
37
37
  $ rvm list gemsets
38
38
  $ gem install --verbose pwn
39
39
  $ pwn
40
- pwn[v0.4.669]:001 >>> PWN.help
40
+ pwn[v0.4.671]:001 >>> PWN.help
41
41
  ```
42
42
 
43
43
  [![Installing the pwn Security Automation Framework](https://raw.githubusercontent.com/0dayInc/pwn/master/documentation/pwn_install.png)](https://youtu.be/G7iLUY4FzsI)
@@ -52,7 +52,7 @@ $ rvm use ruby-3.2.2@pwn
52
52
  $ gem uninstall --all --executables pwn
53
53
  $ gem install --verbose pwn
54
54
  $ pwn
55
- pwn[v0.4.669]:001 >>> PWN.help
55
+ pwn[v0.4.671]:001 >>> PWN.help
56
56
  ```
57
57
 
58
58
 
@@ -0,0 +1,195 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: false
3
+
4
+ require 'optparse'
5
+ require 'nokogiri'
6
+ require 'pwn'
7
+
8
+ opts = {}
9
+ OptionParser.new do |options|
10
+ options.banner = "USAGE:
11
+ #{$PROGRAM_NAME} [opts]
12
+ "
13
+
14
+ options.on('-IRANGE', '--ip-range=RANGE', '<Required - nmap supported ip range e.g. 192.168.1.1-20, 192.168.1.0/24, etc>') do |i|
15
+ opts[:ip_range] = i
16
+ end
17
+
18
+ options.on('-eFILE', '--target-exclude-file=FILE', '<Optional - nmap excludes file>') do |e|
19
+ opts[:exclude_file] = e
20
+ end
21
+
22
+ options.on('-iINTERFACE', '--interface=INTERFACE', '<Optional - use specified network interface (Default: eth0)') do |i|
23
+ opts[:interface] = i
24
+ end
25
+
26
+ options.on('-T', '--tor', '<Optional - Source Scans from Tor Nodes>') do |t|
27
+ opts[:with_tor] = t
28
+ end
29
+ end.parse!
30
+
31
+ if opts.empty?
32
+ puts `#{$PROGRAM_NAME} --help`
33
+ exit 1
34
+ end
35
+
36
+ ip_range = opts[:ip_range]
37
+ exclude_file = opts[:exclude_file]
38
+ exclude_file ||= '/tmp/nmap_targets_exclude.txt'
39
+ interface = opts[:interface]
40
+ interface ||= 'eth0'
41
+ with_tor = true if opts[:with_tor]
42
+ with_tor ||= false
43
+ if with_tor
44
+ tor_obj = PWN::Plugins::Tor.start
45
+ proxy = "socks4://#{tor_obj[:ip]}:#{tor_obj[:port]}"
46
+ end
47
+
48
+ File.new(exclude_file, 'w') unless File.exist?(exclude_file)
49
+ nmap_results_root = File.dirname(exclude_file)
50
+ FileUtils.mkdir_p nmap_results_root
51
+ puts "nmap Results Saved in: #{nmap_results_root}"
52
+
53
+ discovery_ports = {
54
+ ftp: 21,
55
+ ssh: 22,
56
+ telnet: 23,
57
+ smtp: 25,
58
+ dns: 53,
59
+ http: 80,
60
+ pop3: 110,
61
+ rpc: 111,
62
+ ident: 113,
63
+ ntp: 123,
64
+ netbios_name_service: 137,
65
+ netbios_session_service: 139,
66
+ imap: 143,
67
+ snmp: 161,
68
+ ldap: 389,
69
+ https: 443,
70
+ smb: 445,
71
+ smtps: 465,
72
+ remote_process: 512,
73
+ login: 513,
74
+ rsh: 514,
75
+ ldaps: 636,
76
+ rsync: 873,
77
+ imaps: 993,
78
+ openvpn: 1194,
79
+ mssql: 1433,
80
+ oracle: 1521,
81
+ pptp: 1723,
82
+ radius: 1812,
83
+ nfs: 2049,
84
+ mysql: 3306,
85
+ rdp: 3389,
86
+ meterpreter: 4444,
87
+ upnp: 5000,
88
+ sip: 5060,
89
+ postgres: 5432,
90
+ postgres_alt: 5433,
91
+ amqp: 5672,
92
+ vnc: 5900,
93
+ vncs: 5901,
94
+ xfree86: 6000,
95
+ irc: 6667,
96
+ http_alt: 8080,
97
+ https_alt: 8443,
98
+ http_alt2: 8888,
99
+ http_alt3: 9090,
100
+ http_alt4: 9999
101
+ }
102
+
103
+ target_file = "#{nmap_results_root}/nmap_targets.txt"
104
+ latest_discovery_results = "#{nmap_results_root}/nmap_latest_discovery_results"
105
+ latest_tcp_results = "#{nmap_results_root}/nmap_latest_tcp_results"
106
+ latest_udp_results = "#{nmap_results_root}/nmap_latest_udp_results"
107
+
108
+ begin
109
+ # Target Discovery Scan
110
+ PWN::Plugins::NmapIt.port_scan do |nmap|
111
+ nmap.exclude_file = exclude_file
112
+ nmap.interface = interface
113
+ nmap.aggressive_timing = true
114
+ nmap.ping = true
115
+ nmap.arp_ping = true
116
+ nmap.icmp_echo_discovery = true
117
+ nmap.icmp_timestamp_discovery = true
118
+ nmap.syn_discovery = discovery_ports.values
119
+ nmap.ack_discovery = discovery_ports.values
120
+ nmap.udp_discovery = discovery_ports.values
121
+ nmap.sctp_init_ping = discovery_ports.values
122
+ nmap.output_all = latest_discovery_results
123
+ nmap.targets = ip_range
124
+ nmap.proxies = proxy if with_tor
125
+ end
126
+
127
+ # Generate targets.txt from discovery above
128
+ # taking into consideration IPs to skip scans
129
+ File.open(target_file, 'w') do |f|
130
+ PWN::Plugins::NmapIt.parse_xml_results(
131
+ xml_file: "#{latest_discovery_results}.xml"
132
+ ) do |xml|
133
+ xml.each_host do |host|
134
+ f.puts host.ip unless File.read(exclude_file).include?(host.ip)
135
+ end
136
+ end
137
+ end
138
+
139
+ # Switch Tor Exit Node if with_tor
140
+ PWN::Plugins::Tor.switch_exit_node(tor_obj: tor_obj) if with_tor
141
+
142
+ # TCP Scan
143
+ PWN::Plugins::NmapIt.port_scan do |nmap|
144
+ nmap.target_file = target_file
145
+ nmap.show_reason = true
146
+ nmap.exclude_file = exclude_file
147
+ nmap.interface = interface
148
+ nmap.min_host_group = 3
149
+ nmap.host_timeout = '999m'
150
+ nmap.aggressive_timing = true
151
+ nmap.skip_discovery = true
152
+ nmap.syn_scan = true
153
+ nmap.default_script = true
154
+ nmap.update_scriptdb = true
155
+ nmap.service_scan = true
156
+ nmap.os_fingerprint = true
157
+ nmap.verbose = true
158
+ nmap.all = true
159
+ nmap.ports = [1..65_535]
160
+ nmap.output_all = latest_tcp_results
161
+ nmap.proxies = proxy if with_tor
162
+ end
163
+ FileUtils.cp("#{latest_tcp_results}.nmap", "#{latest_tcp_results}.txt")
164
+
165
+ # Switch Tor Exit Node if with_tor
166
+ PWN::Plugins::Tor.switch_exit_node(tor_obj: tor_obj) if with_tor
167
+
168
+ # UDP Scan
169
+ PWN::Plugins::NmapIt.port_scan do |nmap|
170
+ nmap.target_file = target_file
171
+ nmap.show_reason = true
172
+ nmap.exclude_file = exclude_file
173
+ nmap.interface = interface
174
+ nmap.min_host_group = 3
175
+ nmap.host_timeout = '999m'
176
+ nmap.aggressive_timing = true
177
+ nmap.skip_discovery = true
178
+ nmap.udp_scan = true
179
+ nmap.default_script = true
180
+ nmap.update_scriptdb = true
181
+ nmap.service_scan = true
182
+ nmap.os_fingerprint = true
183
+ nmap.verbose = true
184
+ nmap.all = true
185
+ nmap.output_all = latest_udp_results
186
+ nmap.proxies = proxy if with_tor
187
+ end
188
+ FileUtils.cp("#{latest_udp_results}.nmap", "#{latest_udp_results}.txt")
189
+ rescue SystemExit, Interrupt
190
+ puts "\nGoodbye."
191
+ rescue StandardError => e
192
+ raise e
193
+ ensure
194
+ tor_obj = PWN::Plugins::Tor.stop(tor_obj: tor_obj) if with_tor
195
+ end
@@ -25,6 +25,10 @@ OptionParser.new do |options|
25
25
  options.on('-pPASSWORD', '--password=PASSWORD', '<Optional - Password to AuthN (Will Prompt if nil)>') do |p|
26
26
  opts[:password] = p
27
27
  end
28
+
29
+ options.on('-fFILTER', '--report-filter=FILTER', '<Optional - GVM Results Filter (Default: "apply_overrides=0 levels=hml rows=1000 min_qod=70 first=1 sort-reverse=severity")>') do |p|
30
+ opts[:password] = p
31
+ end
28
32
  end.parse!
29
33
 
30
34
  if opts.empty?
@@ -46,6 +50,8 @@ password = if opts[:password].nil?
46
50
  opts[:password].to_s.scrub
47
51
  end
48
52
 
53
+ report_filter = opts[:report_filter]
54
+
49
55
  begin
50
56
  start_time = Time.now
51
57
  puts "Started: #{start_time}"
@@ -89,6 +95,7 @@ begin
89
95
  report_type: :csv,
90
96
  report_id: last_report_id,
91
97
  report_dir: report_dir,
98
+ report_filter: report_filter,
92
99
  username: username,
93
100
  password: password
94
101
  )
@@ -5,11 +5,17 @@ require 'nmap/xml'
5
5
 
6
6
  module PWN
7
7
  module Plugins
8
- # This plugin is used as an interface to nmap, the exploration tool and security / port scanner.
8
+ # This plugin is used as an interface to nmap, the exploration tool and security / port scanner. More info on available options can be found at: https://github.com/postmodern/ruby-nmap/blob/main/lib/nmap/command.rb
9
9
  module NmapIt
10
10
  # Supported Method Parameters::
11
11
  # PWN::Plugins::NmapIt.port_scan do |nmap|
12
12
  # puts nmap.public_methods
13
+ # nmap.connect_scan = true
14
+ # nmap.service_scan = true
15
+ # nmap.verbose = true
16
+ # nmap.ports = [1..1024,1337]
17
+ # nmap.targets = '127.0.0.1'
18
+ # nmap.xml = '/tmp/nmap_port_scan_res.xml'
13
19
  # end
14
20
 
15
21
  public_class_method def self.port_scan
@@ -147,8 +147,10 @@ module PWN
147
147
  # PWN::Plugins::OpenVAS.save_report(
148
148
  # report_type: 'required report type (csv|itg|pdf|txt|xml)',
149
149
  # report_id: 'required report id to save',
150
+ # report_dir: 'required directory to save report',
150
151
  # username: 'required username',
151
- # password: 'optional password (will prompt if nil)'
152
+ # password: 'optional password (will prompt if nil)',
153
+ # report_filter: 'optional - results filter (Default: "apply_overrides=0 levels=hml rows=1000 min_qod=70 first=1 sort-reverse=severity")
152
154
  # )
153
155
 
154
156
  public_class_method def self.save_report(opts = {})
@@ -167,6 +169,9 @@ module PWN
167
169
  opts[:password].to_s.scrub
168
170
  end
169
171
 
172
+ report_filter = opts[:report_filter]
173
+ report_filter ||= 'apply_overrides=0 levels=hml rows=1000 min_qod=70 first=1 sort-reverse=severity'
174
+
170
175
  case report_type.to_sym
171
176
  when :csv
172
177
  report_type_name = 'CSV Results'
@@ -203,7 +208,7 @@ module PWN
203
208
  --gmp-username '#{username}' \
204
209
  --gmp-password '#{password}' \
205
210
  socket \
206
- --xml="<get_reports report_id='#{report_id}' format_id='#{format_id}' details='1' />"
211
+ --xml="<get_reports report_id='#{report_id}' format_id='#{format_id}' filter='#{report_filter}' details='1' />"
207
212
  `
208
213
  )
209
214
 
@@ -292,7 +297,8 @@ module PWN
292
297
  report_id: 'required report id to save',
293
298
  report_dir: 'required directory to save report',
294
299
  username: 'required username',
295
- password: 'optional password (will prompt if nil)'
300
+ password: 'optional password (will prompt if nil)',
301
+ report_filter: 'optional - results filter (Default: \"apply_overrides=0 levels=hml rows=1000 min_qod=70 first=1 sort-reverse=severity\")
296
302
  )
297
303
 
298
304
  report_types = #{self}.get_report_types(
data/lib/pwn/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module PWN
4
- VERSION = '0.4.669'
4
+ VERSION = '0.4.671'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pwn
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.669
4
+ version: 0.4.671
5
5
  platform: ruby
6
6
  authors:
7
7
  - 0day Inc.
@@ -1123,6 +1123,7 @@ executables:
1123
1123
  - pwn_nessus_cloud_scan_crud
1124
1124
  - pwn_nessus_cloud_vulnscan
1125
1125
  - pwn_nexpose
1126
+ - pwn_nmap_discover_tcp_udp
1126
1127
  - pwn_openvas_vulnscan
1127
1128
  - pwn_owasp_zap_active_scan
1128
1129
  - pwn_pastebin_sample_filter
@@ -1190,6 +1191,7 @@ files:
1190
1191
  - bin/pwn_nessus_cloud_scan_crud
1191
1192
  - bin/pwn_nessus_cloud_vulnscan
1192
1193
  - bin/pwn_nexpose
1194
+ - bin/pwn_nmap_discover_tcp_udp
1193
1195
  - bin/pwn_openvas_vulnscan
1194
1196
  - bin/pwn_owasp_zap_active_scan
1195
1197
  - bin/pwn_pastebin_sample_filter