pwn 0.5.159 → 0.5.161

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
  SHA256:
3
- metadata.gz: 7f15b5602a73c8726bfd66d6ed8ec663f5b0d4f9fb6d1b13a5a5ce02563b6e5a
4
- data.tar.gz: 19614b0dce31aa5eb46bc81c35ec76940a992f8664510aca1fb2b25788090b79
3
+ metadata.gz: 0db3c5760e312a8641c11a69259e8c6209ee153135192bd189ae825be98c9eb3
4
+ data.tar.gz: 890d0193a300e145505db09b43b84946636b7c3f24cccd039f6b259d174ebcd7
5
5
  SHA512:
6
- metadata.gz: 43a7da7a7938a383d7b9af1f00ebc2e796aed590bf21e5771e1a8b7bb504168a0b62ba50926f0e33f52fd012f34b2e61e959a1b30d0e243cd0c1057099bffcbe
7
- data.tar.gz: 272d5f97b39eeee26ac2fe05d58c0dcaa8455eb80c12b457775a727fc5e536995831f23a127289c04afeef250f880ff2b2c4ae281ba76e38ae180c5649b17724
6
+ metadata.gz: e623634c9531d84a51a0024c742d0e983ffd6da3acd28732455d6c4560ff49f9e7e2b8f7253d6e7165e59fbd161f7950d8777ea672a555e4c1df5b5378c2fdf3
7
+ data.tar.gz: 3b73a023378f7e1ec769a9cf2244a3af7bee4f4f653152f204242487d853232825597bb2d243b8108911486bc1f6a0a9bfc78785133d68c2b65877e3e79cff19
data/README.md CHANGED
@@ -37,7 +37,7 @@ $ cd /opt/pwn
37
37
  $ ./install.sh
38
38
  $ ./install.sh ruby-gem
39
39
  $ pwn
40
- pwn[v0.5.159]:001 >>> PWN.help
40
+ pwn[v0.5.161]: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.3.1@pwn
52
52
  $ gem uninstall --all --executables pwn
53
53
  $ gem install --verbose pwn
54
54
  $ pwn
55
- pwn[v0.5.159]:001 >>> PWN.help
55
+ pwn[v0.5.161]:001 >>> PWN.help
56
56
  ```
57
57
 
58
58
  If you're using a multi-user install of RVM do:
@@ -62,7 +62,7 @@ $ rvm use ruby-3.3.1@pwn
62
62
  $ rvmsudo gem uninstall --all --executables pwn
63
63
  $ rvmsudo gem install --verbose pwn
64
64
  $ pwn
65
- pwn[v0.5.159]:001 >>> PWN.help
65
+ pwn[v0.5.161]:001 >>> PWN.help
66
66
  ```
67
67
 
68
68
  PWN periodically upgrades to the latest version of Ruby which is reflected in `/opt/pwn/.ruby-version`. The easiest way to upgrade to the latest version of Ruby from a previous PWN installation is to run the following script:
@@ -39,8 +39,12 @@ OptionParser.new do |options|
39
39
  opts[:http_request_headers] = h
40
40
  end
41
41
 
42
- options.on('-cCODES', '--only-report-response-codes=CODES', '<Optional - Comma-Delimited List of Response Codes to Only Include in Report)>') do |c|
43
- opts[:http_response_codes] = c
42
+ options.on('-ICODES', '--include-response-codes=CODES', '<Optional - Comma-Delimited List of Response Codes to Include in Report)>') do |i|
43
+ opts[:include_http_response_codes] = i
44
+ end
45
+
46
+ options.on('-ECODES', '--exclude-response-codes=CODES', '<Optional - Comma-Delimited List of Response Codes to Exclude in Report)>') do |e|
47
+ opts[:exclude_http_response_codes] = e
44
48
  end
45
49
 
46
50
  options.on('-dDIR', '--dir-path=DIR', '<Optional - Report Output Directory (Defaults to ".")>') do |w|
@@ -114,6 +118,7 @@ def request_path(opts = {})
114
118
  rescue Errno::ECONNREFUSED
115
119
  raise 'ERROR: Connection(s) Refused. Try lowering the --max-threads value.'
116
120
  rescue Errno::ECONNRESET,
121
+ NoMethodError,
117
122
  OpenSSL::SSL::SSLError,
118
123
  RestClient::Exceptions::ReadTimeout,
119
124
  RestClient::Exceptions::OpenTimeout,
@@ -128,7 +133,7 @@ def request_path(opts = {})
128
133
  http_resp_code: e.class,
129
134
  http_resp_length: 'N/A',
130
135
  http_resp_headers: 'N/A',
131
- http_resp: e.class
136
+ http_resp: "ERROR: #{e.message}"
132
137
  }
133
138
  rescue RestClient::ExceptionWithResponse => e
134
139
  if e.respond_to?(:response)
@@ -190,8 +195,14 @@ begin
190
195
  max_threads ||= 25
191
196
 
192
197
  http_request_headers = opts[:http_request_headers]
193
- http_response_codes = opts[:http_response_codes]
194
- http_response_codes = http_response_codes.delete("\s").split(',') if http_response_codes
198
+
199
+ include_http_response_codes = opts[:include_http_response_codes]
200
+ include_http_response_codes = include_http_response_codes.delete("\s").split(',') if include_http_response_codes
201
+
202
+ exclude_http_response_codes = opts[:exclude_http_response_codes]
203
+ exclude_http_response_codes = exclude_http_response_codes.delete("\s").split(',') if exclude_http_response_codes
204
+
205
+ raise 'ERROR: Flags --include-response-codes and --exclude-response-codes cannot be used together.' if include_http_response_codes && exclude_http_response_codes
195
206
 
196
207
  dir_path = opts[:dir_path]
197
208
  dir_path ||= '.'
@@ -219,7 +230,7 @@ begin
219
230
 
220
231
  next if wordlist_line.match?(/^#/)
221
232
 
222
- http_methods = %i[DELETE GET HEAD OPTIONS PATCH POST PUT TRACE]
233
+ http_methods = %i[DELETE GET HEAD OPTIONS PATCH POST PUT TRACE].shuffle
223
234
  http_methods.each do |http_method|
224
235
  rest_client_resp_hash = request_path(
225
236
  target_url: target_url,
@@ -230,9 +241,12 @@ begin
230
241
  )
231
242
 
232
243
  mutex.synchronize do
233
- if http_response_codes
244
+ if include_http_response_codes
245
+ ret_http_resp_code = rest_client_resp_hash[:http_resp_code].to_s
246
+ results_hash[:data].push(rest_client_resp_hash) if include_http_response_codes.include?(ret_http_resp_code)
247
+ elsif exclude_http_response_codes
234
248
  ret_http_resp_code = rest_client_resp_hash[:http_resp_code].to_s
235
- results_hash[:data].push(rest_client_resp_hash) if http_response_codes.include?(ret_http_resp_code)
249
+ results_hash[:data].push(rest_client_resp_hash) unless exclude_http_response_codes.include?(ret_http_resp_code)
236
250
  else
237
251
  results_hash[:data].push(rest_client_resp_hash)
238
252
  end
@@ -45,6 +45,15 @@ module PWN
45
45
  # Let's crank up the default timeout from 30 seconds to 15 min for slow sites
46
46
  Watir.default_timeout = 900
47
47
 
48
+ args = []
49
+ args.push('--start-maximized')
50
+ args.push('--disable-notifications')
51
+
52
+ unless browser_type == :rest
53
+ logger = Selenium::WebDriver.logger
54
+ logger.level = :error
55
+ end
56
+
48
57
  case browser_type
49
58
  when :firefox
50
59
  this_profile = Selenium::WebDriver::Firefox::Profile.new
@@ -98,10 +107,11 @@ module PWN
98
107
  end
99
108
  end
100
109
 
101
- args = []
102
-
103
110
  args.push('--devtools') if with_devtools
104
- options = Selenium::WebDriver::Firefox::Options.new(args: args, accept_insecure_certs: true)
111
+ options = Selenium::WebDriver::Firefox::Options.new(
112
+ args: args,
113
+ accept_insecure_certs: true
114
+ )
105
115
  options.profile = this_profile
106
116
  # driver = Selenium::WebDriver.for(:firefox, capabilities: options)
107
117
  driver = Selenium::WebDriver.for(:firefox, options: options)
@@ -112,22 +122,18 @@ module PWN
112
122
  this_profile['download.prompt_for_download'] = false
113
123
  this_profile['download.default_directory'] = '~/Downloads'
114
124
 
115
- switches = []
116
- switches.push('--start-maximized')
117
- switches.push('--disable-notifications')
118
-
119
125
  if proxy
120
- switches.push("--host-resolver-rules='MAP * 0.0.0.0 , EXCLUDE #{tor_obj[:ip]}'") if tor_obj
121
- switches.push("--proxy-server=#{proxy}")
126
+ args.push("--host-resolver-rules='MAP * 0.0.0.0 , EXCLUDE #{tor_obj[:ip]}'") if tor_obj
127
+ args.push("--proxy-server=#{proxy}")
122
128
  end
123
129
 
124
130
  if with_devtools
125
- switches.push('--auto-open-devtools-for-tabs')
126
- switches.push('--disable-hang-monitor')
131
+ args.push('--auto-open-devtools-for-tabs')
132
+ args.push('--disable-hang-monitor')
127
133
  end
128
134
 
129
135
  options = Selenium::WebDriver::Chrome::Options.new(
130
- args: switches,
136
+ args: args,
131
137
  accept_insecure_certs: true
132
138
  )
133
139
 
@@ -188,7 +194,12 @@ module PWN
188
194
  end
189
195
  end
190
196
 
191
- options = Selenium::WebDriver::Firefox::Options.new(args: ['-headless'], accept_insecure_certs: true)
197
+ args.push('--headless')
198
+ options = Selenium::WebDriver::Firefox::Options.new(
199
+ args: args,
200
+ accept_insecure_certs: true
201
+ )
202
+
192
203
  options.profile = this_profile
193
204
  driver = Selenium::WebDriver.for(:firefox, options: options)
194
205
  browser_obj[:browser] = Watir::Browser.new(driver)
@@ -198,18 +209,15 @@ module PWN
198
209
  this_profile['download.prompt_for_download'] = false
199
210
  this_profile['download.default_directory'] = '~/Downloads'
200
211
 
201
- switches = []
202
- switches.push('--headless')
203
- switches.push('--start-maximized')
204
- switches.push('--disable-notifications')
212
+ args.push('--headless')
205
213
 
206
214
  if proxy
207
- switches.push("--host-resolver-rules='MAP * 0.0.0.0 , EXCLUDE #{tor_obj[:ip]}'") if tor_obj
208
- switches.push("--proxy-server=#{proxy}")
215
+ args.push("--host-resolver-rules='MAP * 0.0.0.0 , EXCLUDE #{tor_obj[:ip]}'") if tor_obj
216
+ args.push("--proxy-server=#{proxy}")
209
217
  end
210
218
 
211
219
  options = Selenium::WebDriver::Chrome::Options.new(
212
- args: switches,
220
+ args: args,
213
221
  accept_insecure_certs: true
214
222
  )
215
223
 
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.5.159'
4
+ VERSION = '0.5.161'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pwn
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.159
4
+ version: 0.5.161
5
5
  platform: ruby
6
6
  authors:
7
7
  - 0day Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-06-05 00:00:00.000000000 Z
11
+ date: 2024-06-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport