pwn 0.4.855 → 0.4.856
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/.rubocop_todo.yml +15 -9
- data/Gemfile +1 -1
- data/README.md +2 -2
- data/lib/pwn/plugins/burp_suite.rb +4 -0
- data/lib/pwn/version.rb +1 -1
- data/lib/pwn/www/hacker_one.rb +84 -7
- metadata +3 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 4f3b58109cad13de02340f5a9c796b51a965f8b18d68e124a29107c3b1de0150
|
|
4
|
+
data.tar.gz: ef977ebb8a8041f55d27f74c679852bfc8df2f7ce05acdeaaec2ca74b5fcec55
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 54a6e87acf5e95e78bbfc4a9e59d49ae779ba6b0ac2d80175c841e23815da2eebbbc275143c1422b6f629d7d4211df12c1fa1078097684d7d57001e055a6f7ce
|
|
7
|
+
data.tar.gz: c89240de42a8023ded9133015c8f556d4af756e255deefa6453b2bf70eb70a9c7ceb0d098df1c6bfeb0fa0d35bdf17ae552efc29771bf96fec6a4dc580c84538
|
data/.rubocop_todo.yml
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# This configuration was generated by
|
|
2
2
|
# `rubocop --auto-gen-config`
|
|
3
|
-
# on 2023-
|
|
3
|
+
# on 2023-08-22 17:34:13 UTC using RuboCop version 1.56.1.
|
|
4
4
|
# The point is for the user to remove these configuration records
|
|
5
5
|
# one by one as the offenses are removed from the code base.
|
|
6
6
|
# Note that changes in the inspected code, or installation of new
|
|
@@ -17,16 +17,16 @@ Layout/LineContinuationSpacing:
|
|
|
17
17
|
- 'packer/provisioners/wpscan.rb'
|
|
18
18
|
- 'vagrant/provisioners/beef.rb'
|
|
19
19
|
|
|
20
|
-
# Offense count:
|
|
20
|
+
# Offense count: 284
|
|
21
21
|
# This cop supports unsafe autocorrection (--autocorrect-all).
|
|
22
22
|
Lint/UselessAssignment:
|
|
23
23
|
Enabled: false
|
|
24
24
|
|
|
25
|
-
# Offense count:
|
|
25
|
+
# Offense count: 676
|
|
26
26
|
Lint/UselessRescue:
|
|
27
27
|
Enabled: false
|
|
28
28
|
|
|
29
|
-
# Offense count:
|
|
29
|
+
# Offense count: 286
|
|
30
30
|
# Configuration parameters: AllowedMethods, AllowedPatterns, CountRepeatedAttributes.
|
|
31
31
|
Metrics/AbcSize:
|
|
32
32
|
Max: 328
|
|
@@ -48,22 +48,22 @@ Metrics/CollectionLiteralLength:
|
|
|
48
48
|
Exclude:
|
|
49
49
|
- 'lib/pwn/plugins/uri_scheme.rb'
|
|
50
50
|
|
|
51
|
-
# Offense count:
|
|
51
|
+
# Offense count: 109
|
|
52
52
|
# Configuration parameters: AllowedMethods, AllowedPatterns.
|
|
53
53
|
Metrics/CyclomaticComplexity:
|
|
54
54
|
Max: 231
|
|
55
55
|
|
|
56
|
-
# Offense count:
|
|
56
|
+
# Offense count: 522
|
|
57
57
|
# Configuration parameters: CountComments, CountAsOne, AllowedMethods, AllowedPatterns.
|
|
58
58
|
Metrics/MethodLength:
|
|
59
59
|
Max: 466
|
|
60
60
|
|
|
61
|
-
# Offense count:
|
|
61
|
+
# Offense count: 53
|
|
62
62
|
# Configuration parameters: CountComments, CountAsOne.
|
|
63
63
|
Metrics/ModuleLength:
|
|
64
64
|
Max: 1187
|
|
65
65
|
|
|
66
|
-
# Offense count:
|
|
66
|
+
# Offense count: 102
|
|
67
67
|
# Configuration parameters: AllowedMethods, AllowedPatterns.
|
|
68
68
|
Metrics/PerceivedComplexity:
|
|
69
69
|
Max: 51
|
|
@@ -92,6 +92,12 @@ Style/IfUnlessModifier:
|
|
|
92
92
|
- 'bin/pwn'
|
|
93
93
|
- 'lib/pwn/plugins/baresip.rb'
|
|
94
94
|
|
|
95
|
+
# Offense count: 1
|
|
96
|
+
# This cop supports safe autocorrection (--autocorrect).
|
|
97
|
+
Style/RedundantBegin:
|
|
98
|
+
Exclude:
|
|
99
|
+
- 'lib/pwn/www/hacker_one.rb'
|
|
100
|
+
|
|
95
101
|
# Offense count: 95
|
|
96
102
|
# This cop supports safe autocorrection (--autocorrect).
|
|
97
103
|
Style/RedundantCondition:
|
|
@@ -130,7 +136,7 @@ Style/StringLiterals:
|
|
|
130
136
|
Exclude:
|
|
131
137
|
- 'bin/pwn'
|
|
132
138
|
|
|
133
|
-
# Offense count:
|
|
139
|
+
# Offense count: 610
|
|
134
140
|
# This cop supports safe autocorrection (--autocorrect).
|
|
135
141
|
# Configuration parameters: AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, AllowedPatterns.
|
|
136
142
|
# URISchemes: http, https
|
data/Gemfile
CHANGED
|
@@ -11,7 +11,7 @@ gemspec
|
|
|
11
11
|
# In some circumstances custom flags are passed to gems in order
|
|
12
12
|
# to build appropriately. Defer to ./reinstall_pwn_gemset.sh
|
|
13
13
|
# to review these custom flags (e.g. pg, serialport, etc).
|
|
14
|
-
gem 'activesupport', '7.0.7'
|
|
14
|
+
gem 'activesupport', '7.0.7.1'
|
|
15
15
|
gem 'anemone', '0.7.2'
|
|
16
16
|
gem 'authy', '3.0.1'
|
|
17
17
|
gem 'aws-sdk', '3.1.0'
|
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.
|
|
40
|
+
pwn[v0.4.856]:001 >>> PWN.help
|
|
41
41
|
```
|
|
42
42
|
|
|
43
43
|
[](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.
|
|
55
|
+
pwn[v0.4.856]:001 >>> PWN.help
|
|
56
56
|
```
|
|
57
57
|
|
|
58
58
|
|
|
@@ -12,6 +12,7 @@ module PWN
|
|
|
12
12
|
# burp_jar_path: 'required - path of burp suite pro jar file',
|
|
13
13
|
# headless: 'optional - run burp headless if set to true',
|
|
14
14
|
# browser_type: 'optional - defaults to :firefox. See PWN::Plugins::TransparentBrowser.help for a list of types',
|
|
15
|
+
# target_config: 'optional - path to burp suite pro target config JSON file'
|
|
15
16
|
# )
|
|
16
17
|
|
|
17
18
|
public_class_method def self.start(opts = {})
|
|
@@ -26,6 +27,8 @@ module PWN
|
|
|
26
27
|
opts[:browser_type]
|
|
27
28
|
end
|
|
28
29
|
|
|
30
|
+
target_config = opts[:target_config]
|
|
31
|
+
|
|
29
32
|
if opts[:headless]
|
|
30
33
|
# burp_cmd_string = "java -Xmx4G -Djava.awt.headless=true -classpath #{burp_root}/burpbuddy.jar:#{burp_jar_path} burp.StartBurp"
|
|
31
34
|
burp_cmd_string = "java -Xmx4G -Djava.awt.headless=true -classpath #{burp_root}/burpbuddy.jar -jar #{burp_jar_path}"
|
|
@@ -33,6 +36,7 @@ module PWN
|
|
|
33
36
|
# burp_cmd_string = "java -Xmx4G -classpath #{burp_root}/burpbuddy.jar:#{burp_jar_path} burp.StartBurp"
|
|
34
37
|
burp_cmd_string = "java -Xmx4G -classpath #{burp_root}/burpbuddy.jar -jar #{burp_jar_path}"
|
|
35
38
|
end
|
|
39
|
+
burp_cmd_string = "#{burp_cmd_string} --config-file #{target_config}" unless target_config.nil?
|
|
36
40
|
|
|
37
41
|
# Construct burp_obj
|
|
38
42
|
burp_obj = {}
|
data/lib/pwn/version.rb
CHANGED
data/lib/pwn/www/hacker_one.rb
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require 'faker'
|
|
4
|
+
require 'json'
|
|
3
5
|
require 'uri'
|
|
4
6
|
require 'yaml'
|
|
5
7
|
|
|
@@ -25,7 +27,7 @@ module PWN
|
|
|
25
27
|
end
|
|
26
28
|
|
|
27
29
|
# Supported Method Parameters::
|
|
28
|
-
#
|
|
30
|
+
# programs_arr = PWN::WWW::HackerOne.get_bounty_programs(
|
|
29
31
|
# browser_obj: 'required - browser_obj returned from #open method',
|
|
30
32
|
# proxy: 'optional - scheme://proxy_host:port || tor',
|
|
31
33
|
# min_payouts_enabled: 'optional - only display programs where payouts are > $0.00 (defaults to false)'
|
|
@@ -40,7 +42,7 @@ module PWN
|
|
|
40
42
|
browser.goto('https://hackerone.com/bug-bounty-programs')
|
|
41
43
|
# Wait for JavaScript to load the DOM
|
|
42
44
|
|
|
43
|
-
|
|
45
|
+
programs_arr = []
|
|
44
46
|
browser.ul(class: 'program__meta-data').wait_until(&:present?)
|
|
45
47
|
browser.uls(class: 'program__meta-data').each do |ul|
|
|
46
48
|
min_payout = ul.text.split('$').last.split.first.to_f
|
|
@@ -53,23 +55,91 @@ module PWN
|
|
|
53
55
|
scheme = URI.parse(link).scheme
|
|
54
56
|
host = URI.parse(link).host
|
|
55
57
|
path = URI.parse(link).path
|
|
56
|
-
|
|
58
|
+
burp_target_config = "#{scheme}://#{host}/teams#{path}/assets/download_burp_project_file.json"
|
|
57
59
|
|
|
58
60
|
bounty_program_hash = {
|
|
59
61
|
name: link.split('/').last,
|
|
60
62
|
min_payout: min_payout_fmt,
|
|
61
63
|
policy: "#{link}?view_policy=true",
|
|
62
|
-
|
|
64
|
+
burp_target_config: burp_target_config,
|
|
63
65
|
scope: "#{link}/policy_scopes",
|
|
64
66
|
hacktivity: "#{link}/hacktivity",
|
|
65
67
|
thanks: "#{link}/thanks",
|
|
66
68
|
updates: "#{link}/updates",
|
|
67
69
|
collaborators: "#{link}/collaborators"
|
|
68
70
|
}
|
|
69
|
-
|
|
71
|
+
programs_arr.push(bounty_program_hash)
|
|
70
72
|
end
|
|
71
73
|
|
|
72
|
-
|
|
74
|
+
programs_arr
|
|
75
|
+
rescue StandardError => e
|
|
76
|
+
raise e
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
# Supported Method Parameters::
|
|
80
|
+
# PWN::WWW::HackerOne.save_burp_target_config_file(
|
|
81
|
+
# programs_arr: 'required - array of hashes returned from #get_bounty_programs method',
|
|
82
|
+
# browser_opts: 'optional - opts supported by PWN::Plugins::TransparentBrowser.open method',
|
|
83
|
+
# name: 'optional - name of burp target config file (defaults to ALL)',
|
|
84
|
+
# path: 'optional - path to save burp target config files (defaults to "./burp_target_config_file-NAME.json"))'
|
|
85
|
+
# )
|
|
86
|
+
|
|
87
|
+
public_class_method def self.save_burp_target_config_file(opts = {})
|
|
88
|
+
programs_arr = opts[:programs_arr]
|
|
89
|
+
raise 'ERROR: programs_arr should be data returned from #get_bounty_programs' unless programs_arr.any?
|
|
90
|
+
|
|
91
|
+
browser_opts = opts[:browser_opts]
|
|
92
|
+
raise 'ERROR: browser_opts should be a hash' unless browser_opts.nil? ||
|
|
93
|
+
browser_opts.is_a?(Hash)
|
|
94
|
+
|
|
95
|
+
browser_opts ||= {}
|
|
96
|
+
browser_opts[:browser_type] = :rest
|
|
97
|
+
|
|
98
|
+
name = opts[:name]
|
|
99
|
+
path = opts[:path]
|
|
100
|
+
|
|
101
|
+
rest_obj = PWN::Plugins::TransparentBrowser.open(browser_opts)
|
|
102
|
+
rest_client = rest_obj[:browser]::Request
|
|
103
|
+
|
|
104
|
+
if name
|
|
105
|
+
path = "./burp_target_config_file-#{name}.json" if opts[:path].nil?
|
|
106
|
+
burp_download_link = programs_arr.select do |program|
|
|
107
|
+
program[:name] == name
|
|
108
|
+
end.first[:burp_target_config]
|
|
109
|
+
|
|
110
|
+
resp = rest_client.execute(
|
|
111
|
+
method: :get,
|
|
112
|
+
headers: { user_agent: Faker::Internet.user_agent },
|
|
113
|
+
url: burp_download_link
|
|
114
|
+
)
|
|
115
|
+
json_resp = JSON.parse(resp.body)
|
|
116
|
+
|
|
117
|
+
puts "Saving to: #{path}"
|
|
118
|
+
File.write(path, JSON.pretty_generate(json_resp))
|
|
119
|
+
else
|
|
120
|
+
programs_arr.each do |program|
|
|
121
|
+
begin
|
|
122
|
+
name = program[:name]
|
|
123
|
+
burp_download_link = program[:burp_target_config]
|
|
124
|
+
path = "./burp_target_config_file-#{name}.json" if opts[:path].nil?
|
|
125
|
+
|
|
126
|
+
resp = rest_client.execute(
|
|
127
|
+
method: :get,
|
|
128
|
+
headers: { user_agent: Faker::Internet.user_agent },
|
|
129
|
+
url: burp_download_link
|
|
130
|
+
)
|
|
131
|
+
json_resp = JSON.parse(resp.body)
|
|
132
|
+
|
|
133
|
+
puts "Saving to: #{path}"
|
|
134
|
+
File.write(path, JSON.pretty_generate(json_resp))
|
|
135
|
+
print '.'
|
|
136
|
+
rescue RestClient::NotFound
|
|
137
|
+
print '-'
|
|
138
|
+
next
|
|
139
|
+
end
|
|
140
|
+
end
|
|
141
|
+
end
|
|
142
|
+
puts 'complete.'
|
|
73
143
|
rescue StandardError => e
|
|
74
144
|
raise e
|
|
75
145
|
end
|
|
@@ -155,12 +225,19 @@ module PWN
|
|
|
155
225
|
browser = browser_obj[:browser]
|
|
156
226
|
puts browser.public_methods
|
|
157
227
|
|
|
158
|
-
|
|
228
|
+
programs_arr = #{self}.get_bounty_programs(
|
|
159
229
|
browser_obj: 'required - browser_obj returned from #open method',
|
|
160
230
|
proxy: 'optional - scheme://proxy_host:port || tor',
|
|
161
231
|
min_payouts_enabled: 'optional - only display programs where payouts are > $0.00 (defaults to false)'
|
|
162
232
|
)
|
|
163
233
|
|
|
234
|
+
#{self}.save_burp_target_config_file(
|
|
235
|
+
programs_arr: 'required - array of hashes returned from #get_bounty_programs method',
|
|
236
|
+
browser_opts: 'optional - opts supported by PWN::Plugins::TransparentBrowser.open method',
|
|
237
|
+
name: 'optional - name of burp target config file (defaults to ALL)',
|
|
238
|
+
path: 'optional - path to save burp target config files (defaults to \"./burp_target_config_file-NAME.json\"))'
|
|
239
|
+
)
|
|
240
|
+
|
|
164
241
|
browser_obj = #{self}.login(
|
|
165
242
|
browser_obj: 'required - browser_obj returned from #open method',
|
|
166
243
|
username: 'required - username',
|
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.
|
|
4
|
+
version: 0.4.856
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- 0day Inc.
|
|
@@ -16,14 +16,14 @@ dependencies:
|
|
|
16
16
|
requirements:
|
|
17
17
|
- - '='
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: 7.0.7
|
|
19
|
+
version: 7.0.7.1
|
|
20
20
|
type: :runtime
|
|
21
21
|
prerelease: false
|
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
23
|
requirements:
|
|
24
24
|
- - '='
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
|
-
version: 7.0.7
|
|
26
|
+
version: 7.0.7.1
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
28
|
name: anemone
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|