pwn 0.5.390 → 0.5.392
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/Gemfile +3 -3
- data/README.md +3 -3
- data/bin/pwn_burp_suite_pro_active_rest_api_scan +181 -0
- data/bin/pwn_burp_suite_pro_active_scan +5 -2
- data/lib/pwn/plugins/open_api.rb +1 -1
- data/lib/pwn/reports/html_footer.rb +164 -0
- data/lib/pwn/reports/html_header.rb +27 -9
- data/lib/pwn/reports/sast.rb +3 -162
- data/lib/pwn/reports.rb +1 -0
- data/lib/pwn/version.rb +1 -1
- data/spec/lib/pwn/reports/html_footer_spec.rb +15 -0
- data/third_party/pwn_rdoc.jsonl +5 -0
- metadata +11 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f5187c42fe3f9cc6cafcd3663179230111276cc2305f0c24ed1f7070be21c319
|
4
|
+
data.tar.gz: cf9d12113a23120d0e39ccc840cd23c77330829a7d51af3f2601504499b20468
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6605150902b9eb40072585b38674868a4ec507c1b938a4a9a8f63799e5bb4f959238dbeb66dbb4a1a1c2860e4a5ad1396edf59ac0ab130fb3d17eb11f0c115b3
|
7
|
+
data.tar.gz: 91e3fefae884f51df19571dac3f1bd0e3a767ecd6f335d39de9823554583f715bb2b05679e3fef45c70d62166c8aa56aab95cbe6a9f75d48b491f92f9b8e568b
|
data/Gemfile
CHANGED
@@ -69,7 +69,7 @@ gem 'ostruct', '0.6.3'
|
|
69
69
|
gem 'packetfu', '2.0.0'
|
70
70
|
gem 'packetgen', '4.1.1'
|
71
71
|
gem 'pdf-reader', '2.15.0'
|
72
|
-
gem 'pg', '1.6.
|
72
|
+
gem 'pg', '1.6.2'
|
73
73
|
gem 'pry', '0.15.2'
|
74
74
|
gem 'pry-doc', '1.6.0'
|
75
75
|
gem 'rake', '13.3.0'
|
@@ -82,9 +82,9 @@ gem 'rmagick', '6.1.4'
|
|
82
82
|
gem 'rqrcode', '3.1.0'
|
83
83
|
gem 'rspec', '3.13.1'
|
84
84
|
gem 'rtesseract', '3.1.4'
|
85
|
-
gem 'rubocop', '1.80.
|
85
|
+
gem 'rubocop', '1.80.2'
|
86
86
|
gem 'rubocop-rake', '0.7.1'
|
87
|
-
gem 'rubocop-rspec', '3.
|
87
|
+
gem 'rubocop-rspec', '3.7.0'
|
88
88
|
gem 'ruby-audio', '1.6.1'
|
89
89
|
gem 'ruby-nmap', '1.0.3'
|
90
90
|
gem 'ruby-saml', '1.18.1'
|
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.
|
40
|
+
pwn[v0.5.392]:001 >>> PWN.help
|
41
41
|
```
|
42
42
|
|
43
43
|
[](https://youtu.be/G7iLUY4FzsI)
|
@@ -52,7 +52,7 @@ $ rvm use ruby-3.4.4@pwn
|
|
52
52
|
$ gem uninstall --all --executables pwn
|
53
53
|
$ gem install --verbose pwn
|
54
54
|
$ pwn
|
55
|
-
pwn[v0.5.
|
55
|
+
pwn[v0.5.392]: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.4.4@pwn
|
|
62
62
|
$ rvmsudo gem uninstall --all --executables pwn
|
63
63
|
$ rvmsudo gem install --verbose pwn
|
64
64
|
$ pwn
|
65
|
-
pwn[v0.5.
|
65
|
+
pwn[v0.5.392]: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:
|
@@ -0,0 +1,181 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require 'fileutils'
|
5
|
+
require 'pwn'
|
6
|
+
require 'optparse'
|
7
|
+
require 'uri'
|
8
|
+
|
9
|
+
opts = {}
|
10
|
+
OptionParser.new do |options|
|
11
|
+
options.banner = "USAGE:
|
12
|
+
#{File.basename($PROGRAM_NAME)} [opts]
|
13
|
+
"
|
14
|
+
|
15
|
+
options.on('-tTARGET', '--target_url=TARGET', '<Required - Target URI to Scan>') do |t|
|
16
|
+
opts[:target_url] = t
|
17
|
+
end
|
18
|
+
|
19
|
+
options.on('-oPATH', '--report_output_path=PATH', '<Required - Output Path for Active Scan Issues>') do |o|
|
20
|
+
opts[:output_path] = o
|
21
|
+
end
|
22
|
+
|
23
|
+
options.on('-dSWAGGER', '--swagger_definitions=SWAGGER', '<Required - Comma-delimited list of Swagger JSON/YAML files to import>') do |s|
|
24
|
+
opts[:swagger_definitions] = s
|
25
|
+
end
|
26
|
+
|
27
|
+
options.on('-D', '--[no-]debug', '<Optional - Enable Debug Output and Do Not Delete Temporary OpenAPI Spec>') do |d|
|
28
|
+
opts[:debug] = d
|
29
|
+
end
|
30
|
+
|
31
|
+
options.on('-vVERSION', '--openapi_spec_version=VERSION', '<Optional - OpenAPI/Swagger Specification Version (Defaults to 3.0.3)>') do |o|
|
32
|
+
opts[:openapi_spec_version] = o
|
33
|
+
end
|
34
|
+
|
35
|
+
options.on('-HJSON', '--additional_http_headers=JSON', '<Optional - JSON string of additional HTTP headers to include in requests (e.g. \'{"Header1":"Value1","Header2":"Value2"}\')>') do |h|
|
36
|
+
opts[:additional_http_headers] = h
|
37
|
+
end
|
38
|
+
|
39
|
+
options.on('-cCOLOR', '--highlight-color=COLOR', '<Optional - Highlight Color to use when importing OpenAPI/Swagger definitions NONE||RED||ORANGE||YELLOW||GREEN||CYAN||BLUE||PINK||MAGENTA||GRAY (Defaults to GREEN)>') do |h|
|
40
|
+
opts[:highlight_color] = h
|
41
|
+
end
|
42
|
+
|
43
|
+
options.on('-nCOMMENTS', '--notes=COMMENTS', '<Optional - Comments to add when importing OpenAPI/Swagger definitions (Defaults to "Imported via <openapi_spec> on <timestamp>")>') do |n|
|
44
|
+
opts[:notes] = n
|
45
|
+
end
|
46
|
+
|
47
|
+
options.on('-eLIST', '--exclude_paths=LIST', '<Optional - Comma-delimited list of paths to exlude from scanning (e.g. "/api/login, /api/logout, /api/etc")>') do |e|
|
48
|
+
opts[:exclude_paths] = e
|
49
|
+
end
|
50
|
+
|
51
|
+
options.on('-bBPATH', '--burp_path=BPATH', '<Optional - Path to Burp Suite Pro Jar File (Defaults to /opt/burpsuite/burpsuite-pro.jar)>') do |b|
|
52
|
+
opts[:burp_jar_path] = b
|
53
|
+
end
|
54
|
+
|
55
|
+
options.on('-h', '--[no-]headless', '<Optional - Run Burp and Browser Headless>') do |h|
|
56
|
+
opts[:headless] = h
|
57
|
+
end
|
58
|
+
|
59
|
+
options.on('-iURL', '--in_scope=URL', '<Optional - URL to add include in scope (Defaults to value of --target_url)>') do |s|
|
60
|
+
opts[:in_scope] = s
|
61
|
+
end
|
62
|
+
end.parse!
|
63
|
+
|
64
|
+
if opts.empty?
|
65
|
+
puts `#{File.basename($PROGRAM_NAME)} --help`
|
66
|
+
exit 1
|
67
|
+
end
|
68
|
+
|
69
|
+
begin
|
70
|
+
timestamp = Time.now.strftime('%Y-%m-%d_%H-%M-%S%Z')
|
71
|
+
logger = PWN::Plugins::PWNLogger.create
|
72
|
+
|
73
|
+
burp_jar_path = opts[:burp_jar_path]
|
74
|
+
headless = opts[:headless] || false
|
75
|
+
target_url = opts[:target_url]
|
76
|
+
raise 'ERROR: --target_url is required.' if target_url.nil?
|
77
|
+
|
78
|
+
output_path = opts[:output_path]
|
79
|
+
raise 'ERROR: --report_output_path is required.' if output_path.nil?
|
80
|
+
|
81
|
+
swagger_definitions = opts[:swagger_definitions]
|
82
|
+
raise 'ERROR: --swagger_definitions is required.' if swagger_definitions.nil?
|
83
|
+
|
84
|
+
debug = opts[:debug] || false
|
85
|
+
|
86
|
+
swagger_defs_arr = swagger_definitions.split(',').map(&:strip)
|
87
|
+
scheme = URI.parse(target_url).scheme
|
88
|
+
target_host = URI.parse(target_url).host
|
89
|
+
base_url = "#{scheme}://#{target_host}"
|
90
|
+
|
91
|
+
openapi_spec_version = opts[:openapi_spec_version]
|
92
|
+
openapi_spec = "/tmp/openapi_spec-#{target_host}-#{timestamp}.json"
|
93
|
+
|
94
|
+
PWN::Plugins::OpenAPI.generate_spec(
|
95
|
+
spec_paths: swagger_defs_arr,
|
96
|
+
base_url: base_url,
|
97
|
+
output_json_path: openapi_spec,
|
98
|
+
target_version: openapi_spec_version,
|
99
|
+
debug: debug
|
100
|
+
)
|
101
|
+
|
102
|
+
additional_http_headers = opts[:additional_http_headers]
|
103
|
+
additional_http_headers = JSON.parse(additional_http_headers, symbolize_names: true) if additional_http_headers.is_a?(String)
|
104
|
+
|
105
|
+
highlight_color = opts[:highlight_color] ||= 'GREEN'
|
106
|
+
notes = opts[:notes] ||= "Imported via #{openapi_spec} on #{timestamp}"
|
107
|
+
|
108
|
+
exlude_paths = opts[:exclude_paths]
|
109
|
+
exlude_paths = exlude_paths.split(',').map(&:strip) if exlude_paths.is_a?(String)
|
110
|
+
|
111
|
+
in_scope = opts[:in_scope] ||= target_url
|
112
|
+
|
113
|
+
# ------
|
114
|
+
# Open Burp
|
115
|
+
if headless
|
116
|
+
burp_obj = PWN::Plugins::BurpSuite.start(
|
117
|
+
burp_jar_path: burp_jar_path,
|
118
|
+
browser_type: :headless
|
119
|
+
)
|
120
|
+
else
|
121
|
+
burp_obj = PWN::Plugins::BurpSuite.start(
|
122
|
+
burp_jar_path: burp_jar_path,
|
123
|
+
browser_type: :chrome
|
124
|
+
)
|
125
|
+
end
|
126
|
+
|
127
|
+
logger.info(burp_obj)
|
128
|
+
# Disable Proxy Intercepting Capabilities for this Driver
|
129
|
+
PWN::Plugins::BurpSuite.disable_proxy(burp_obj: burp_obj)
|
130
|
+
|
131
|
+
# Add URL to Target >> Scope >> Inclue in scope
|
132
|
+
PWN::Plugins::BurpSuite.add_to_scope(
|
133
|
+
burp_obj: burp_obj,
|
134
|
+
target_url: in_scope
|
135
|
+
)
|
136
|
+
|
137
|
+
json_sitemap = PWN::Plugins::BurpSuite.import_openapi_to_sitemap(
|
138
|
+
burp_obj: burp_obj,
|
139
|
+
openapi_spec: openapi_spec,
|
140
|
+
additional_http_headers: additional_http_headers,
|
141
|
+
highlight: highlight_color,
|
142
|
+
comment: notes,
|
143
|
+
debug: debug
|
144
|
+
)
|
145
|
+
|
146
|
+
raise "ERROR: Failed to import OpenAPI/Swagger spec #{openapi_spec} into Burp Suite Pro's Sitemap." if json_sitemap.nil? || json_sitemap.empty?
|
147
|
+
|
148
|
+
PWN::Plugins::BurpSuite.invoke_active_scan(
|
149
|
+
burp_obj: burp_obj,
|
150
|
+
target_url: in_scope,
|
151
|
+
exclude_paths: exlude_paths
|
152
|
+
)
|
153
|
+
|
154
|
+
# Dump a list of scan issues from Active Scan result
|
155
|
+
# scan_issues = PWN::Plugins::BurpSuite.get_scan_issues(burp_obj: burp_obj)
|
156
|
+
# puts scan_issues
|
157
|
+
|
158
|
+
# Once DefectDojo begins to support XML report results
|
159
|
+
report_types = %i[html xml]
|
160
|
+
report_types.each do |report_type|
|
161
|
+
this_output_path = "#{output_path}.html"
|
162
|
+
# this_output_path = "#{File.dirname(output_path)}/#{File.basename(output_path, File.extname(output_path))}.html"
|
163
|
+
|
164
|
+
this_output_path = "#{output_path}.xml" if report_type == :xml
|
165
|
+
# this_output_path = "#{File.dirname(output_path)}/#{File.basename(output_path, File.extname(output_path))}.xml" if report_type == :xml
|
166
|
+
|
167
|
+
PWN::Plugins::BurpSuite.generate_scan_report(
|
168
|
+
burp_obj: burp_obj,
|
169
|
+
target_url: in_scope,
|
170
|
+
report_type: report_type,
|
171
|
+
output_path: this_output_path
|
172
|
+
)
|
173
|
+
end
|
174
|
+
|
175
|
+
burp_obj = PWN::Plugins::BurpSuite.stop(burp_obj: burp_obj)
|
176
|
+
rescue StandardError => e
|
177
|
+
raise e
|
178
|
+
ensure
|
179
|
+
FileUtils.rm_f(openapi_spec) unless debug
|
180
|
+
burp_obj = PWN::Plugins::BurpSuite.stop(burp_obj: burp_obj) unless burp_obj.nil?
|
181
|
+
end
|
@@ -72,7 +72,6 @@ begin
|
|
72
72
|
if headless
|
73
73
|
burp_obj = PWN::Plugins::BurpSuite.start(
|
74
74
|
burp_jar_path: burp_jar_path,
|
75
|
-
headless: true,
|
76
75
|
browser_type: :headless
|
77
76
|
)
|
78
77
|
else
|
@@ -119,7 +118,11 @@ begin
|
|
119
118
|
sleep duration # Sleep for now so everything loads the way we expect - blech.
|
120
119
|
print "\n"
|
121
120
|
|
122
|
-
PWN::Plugins::BurpSuite.invoke_active_scan(
|
121
|
+
PWN::Plugins::BurpSuite.invoke_active_scan(
|
122
|
+
burp_obj: burp_obj,
|
123
|
+
target_url: in_scope,
|
124
|
+
exclude_paths: exlude_paths
|
125
|
+
)
|
123
126
|
|
124
127
|
# Dump a list of scan issues from Active Scan result
|
125
128
|
# scan_issues = PWN::Plugins::BurpSuite.get_scan_issues(burp_obj: burp_obj)
|
data/lib/pwn/plugins/open_api.rb
CHANGED
@@ -27,7 +27,7 @@ module PWN
|
|
27
27
|
base_url = opts[:base_url]
|
28
28
|
raise ArgumentError, 'base_url is required' if base_url.nil? || base_url.empty?
|
29
29
|
|
30
|
-
target_version = opts[:target_version]
|
30
|
+
target_version = opts[:target_version] ||= '3.0.3'
|
31
31
|
raise ArgumentError, "Unsupported OpenAPI version: #{target_version}" unless %w[3.0.0 3.0.1 3.0.2 3.0.3 3.1.0].include?(target_version)
|
32
32
|
|
33
33
|
output_json_path = opts[:output_json_path]
|
@@ -0,0 +1,164 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'cgi'
|
4
|
+
require 'json'
|
5
|
+
require 'tty-spinner'
|
6
|
+
|
7
|
+
module PWN
|
8
|
+
module Reports
|
9
|
+
# This plugin generates the HTML header and includes external JS/CSS libraries for PWN reports.
|
10
|
+
module HTMLFooter
|
11
|
+
# Supported Method Parameters::
|
12
|
+
# PWN::Reports::HTMLFooter.generate(
|
13
|
+
# column_names: 'required - array of column names to use in the report table',
|
14
|
+
# driver_src_uri: 'required - pwn driver source code uri',
|
15
|
+
# )
|
16
|
+
|
17
|
+
public_class_method def self.generate
|
18
|
+
%(
|
19
|
+
// Select All and Deselect All
|
20
|
+
function select_deselect_all() {
|
21
|
+
var visible_multi_line_trs = $('#pwn_results tbody tr:visible .multi_line_select tr');
|
22
|
+
var highlighted_in_visible = visible_multi_line_trs.filter('.highlighted');
|
23
|
+
if (highlighted_in_visible.length === visible_multi_line_trs.length) {
|
24
|
+
highlighted_in_visible.removeClass('highlighted');
|
25
|
+
} else {
|
26
|
+
visible_multi_line_trs.filter(':not(.highlighted)').addClass('highlighted');
|
27
|
+
}
|
28
|
+
}
|
29
|
+
|
30
|
+
function getExportData(table) {
|
31
|
+
return new Promise((resolve) => {
|
32
|
+
$.getJSON(table.ajax.url(), function(original_json) {
|
33
|
+
let new_data;
|
34
|
+
if ($('.multi_line_select tr.highlighted').length === 0) {
|
35
|
+
new_data = original_json.data;
|
36
|
+
} else {
|
37
|
+
var selected_results = {};
|
38
|
+
|
39
|
+
$('.multi_line_select tr.highlighted').each(function() {
|
40
|
+
var inner_tr = $(this);
|
41
|
+
var main_tr = inner_tr.closest('td').parent();
|
42
|
+
var row = table.row(main_tr);
|
43
|
+
var row_index = row.index();
|
44
|
+
var line_index = inner_tr.index();
|
45
|
+
|
46
|
+
if (selected_results[row_index] === undefined) {
|
47
|
+
selected_results[row_index] = {
|
48
|
+
row: row,
|
49
|
+
lines: []
|
50
|
+
};
|
51
|
+
}
|
52
|
+
|
53
|
+
selected_results[row_index].lines.push(line_index);
|
54
|
+
});
|
55
|
+
|
56
|
+
new_data = [];
|
57
|
+
|
58
|
+
Object.keys(selected_results).forEach(function(ri) {
|
59
|
+
var sel = selected_results[ri];
|
60
|
+
var orig_row_data = sel.row.data();
|
61
|
+
var new_row_data = JSON.parse(JSON.stringify(orig_row_data));
|
62
|
+
|
63
|
+
sel.lines.sort((a, b) => a - b);
|
64
|
+
new_row_data.line_no_and_contents = sel.lines.map(function(li) {
|
65
|
+
return orig_row_data.line_no_and_contents[li];
|
66
|
+
});
|
67
|
+
|
68
|
+
new_row_data.raw_content = new_row_data.line_no_and_contents.map(l => l.contents).join('\\n');
|
69
|
+
|
70
|
+
new_data.push(new_row_data);
|
71
|
+
});
|
72
|
+
}
|
73
|
+
resolve({data: new_data, report_name: original_json.report_name});
|
74
|
+
});
|
75
|
+
});
|
76
|
+
}
|
77
|
+
|
78
|
+
function export_json(table) {
|
79
|
+
if ($('.multi_line_select tr.highlighted').length === 0 && !confirm('No lines selected. Export all records?')) {
|
80
|
+
return;
|
81
|
+
}
|
82
|
+
|
83
|
+
getExportData(table).then(({data, report_name}) => {
|
84
|
+
var original_json = {report_name: report_name, data: data};
|
85
|
+
|
86
|
+
var json_str = JSON.stringify(original_json, null, 2);
|
87
|
+
var blob = new Blob([json_str], { type: 'application/json' });
|
88
|
+
var url = URL.createObjectURL(blob);
|
89
|
+
var a = document.createElement('a');
|
90
|
+
a.href = url;
|
91
|
+
a.download = report_name + '.json';
|
92
|
+
document.body.appendChild(a);
|
93
|
+
a.click();
|
94
|
+
document.body.removeChild(a);
|
95
|
+
URL.revokeObjectURL(url);
|
96
|
+
});
|
97
|
+
}
|
98
|
+
|
99
|
+
// Custom advanced search handling
|
100
|
+
$('#dt-search-0').unbind();
|
101
|
+
$('#dt-search-0').on('input', function() {
|
102
|
+
var table = $('#pwn_results').DataTable();
|
103
|
+
var searchTerm = this.value;
|
104
|
+
var isRegex = false;
|
105
|
+
var isSmart = true;
|
106
|
+
table.search(searchTerm, isRegex, isSmart).draw();
|
107
|
+
});
|
108
|
+
|
109
|
+
// Toggle Columns
|
110
|
+
$('a.toggle-vis').on('click', function (e) {
|
111
|
+
var table = $('#pwn_results').DataTable();
|
112
|
+
e.preventDefault();
|
113
|
+
|
114
|
+
// Get the column API object
|
115
|
+
var column = table.column( $(this).attr('data-column') );
|
116
|
+
|
117
|
+
// Toggle the visibility
|
118
|
+
column.visible( ! column.visible() );
|
119
|
+
});
|
120
|
+
|
121
|
+
// Row highlighting for multi-line selection
|
122
|
+
$('#pwn_results').on('click', '.multi_line_select tr', function () {
|
123
|
+
$(this).toggleClass('highlighted');
|
124
|
+
});
|
125
|
+
|
126
|
+
// Detect window size changes and recalculate/update scrollY
|
127
|
+
$(window).resize(function() {
|
128
|
+
var table = $('#pwn_results').DataTable();
|
129
|
+
var newWindowHeight = $(window).height();
|
130
|
+
var newScrollYHeight = Math.max(min_scroll_height, newWindowHeight - offset); // Your offset
|
131
|
+
$('.dt-scroll-body').css('max-height', newScrollYHeight + 'px')
|
132
|
+
table.columns.adjust().draw(false); // Adjust columns first, then redraw without data reload
|
133
|
+
console.log('Window resized. New scrollY height: ' + newScrollYHeight + 'px');
|
134
|
+
});
|
135
|
+
</script>
|
136
|
+
</body>
|
137
|
+
</html>
|
138
|
+
)
|
139
|
+
rescue StandardError => e
|
140
|
+
raise e
|
141
|
+
end
|
142
|
+
|
143
|
+
# Author(s):: 0day Inc. <support@0dayinc.com>
|
144
|
+
|
145
|
+
public_class_method def self.authors
|
146
|
+
"AUTHOR(S):
|
147
|
+
0day Inc. <support@0dayinc.com>
|
148
|
+
"
|
149
|
+
end
|
150
|
+
|
151
|
+
# Display Usage for this Module
|
152
|
+
|
153
|
+
public_class_method def self.help
|
154
|
+
puts "USAGE:
|
155
|
+
#{self}.generate(
|
156
|
+
column_names: 'Array of Column Names to use in the report table',
|
157
|
+
driver_src_uri: 're
|
158
|
+
|
159
|
+
#{self}.authors
|
160
|
+
"
|
161
|
+
end
|
162
|
+
end
|
163
|
+
end
|
164
|
+
end
|
@@ -73,13 +73,6 @@ module PWN
|
|
73
73
|
<!-- favicon.ico from https://0dayinc.com -->
|
74
74
|
<link rel="icon" href="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAQAABIXAAASFwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIkAAACJAgAAiSYAAIlbAACJcAAAiX0AAIlmAACJLQAAiQQAAIkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIkAAACJAAAAiS0AAIluAACJdwAAiXgAAIl+AACJeAAAiXQAAIk5AACJAQAAiQAAAAAAAAAAAAAAAAAAAAAAAACJAAAAiRgAAIlvAACJbQAAiXcAAIl7AACJcwAAiXEAAIl1AACJZwAAiR4AAIkAAACJAAAAAAAAAAAAAACJAAAAiQAAAIlEAACJfAAAiXIAAIlyAACJewAAiX4AAIl5AACJdQAAiXcAAIlIAACJAAAAiQAAAAAAAAAAAAAAiQAAAIkJAACJWQAAiXUAAIl9AACJdAAAiYYAAImLAACJdAAAiXkAAImNAACJfQAAiQwAAIkAAAAAAAAAAAAAAIkAAACJFQAAiWsAAIl2AACJfAAAiYIAAImCAACJfwAAiXYAAIl5AACJiQAAiYYAAIkWAACJAAAAAAAAAAAAAACJAAAAiSAAAIl2AACJeQAAiXkAAIl1AACJfwAAiYEAAIl8AACJbwAAiXoAAImBAACJFgAAiQAAAAAAAAAAAAAAiQAAAIkpAACJeAAAiXMAAIl3AACJeQAAiXUAAImAAACJfwAAiWYAAIl4AACJfwAAiR4AAIkAAAAAAAAAAAAAAIkAAACJKAAAiXkAAIlyAACJdQAAiXQAAIluAACJfAAAiXwAAIl3AACJewAAiXwAAIkvAACJAAAAAAAAAAAAAACJAAAAiSMAAIl4AACJdgAAiXsAAIl1AACJcQAAiXcAAIl6AACJeQAAiXoAAIl0AACJKQAAiQAAAAAAAAAAAAAAiQAAAIkXAACJaAAAiXgAAIl3AACJfAAAiXkAAIl3AACJZwAAiXcAAIl0AACJagAAiSgAAIkAAAAAAAAAAAAAAIkAAACJDgAAiV4AAIl5AACJbwAAiW4AAIl9AACJewAAiXcAAIl6AACJfQAAiW8AAIkWAACJAAAAAAAAAAAAAACJAAAAiQ0AAIllAACJewAAiXYAAIl4AACJdQAAiXUAAIl4AACJbQAAiXkAAIlNAACJAwAAiQAAAAAAAAAAAAAAiQAAAIkCAACJPQAAiXMAAIl2AACJeAAAiWgAAIlsAACJfQAAiXsAAIlwAACJGQAAiQAAAIkAAAAAAAAAAAAAAAAAAACJAAAAiQcAAIk4AACJXAAAiXoAAIl7AACJfAAAiYAAAIlsAACJJwAAiQMAAIkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIkAAACJAQAAiSsAAIluAACJewAAiXwAAIluAACJKgAAiQAAAIkAAAAAAAAAAAAAAAAA8A8AAPAHAADgBwAA4AcAAMADAADAAwAAwAMAAMADAADAAwAAwAMAAMADAADAAwAAwAMAAMAHAADgBwAA8B8AAA==" type="image/x-icon" />
|
75
75
|
<style>
|
76
|
-
body {
|
77
|
-
font-family: Verdana, Geneva, sans-serif;
|
78
|
-
font-size: 11px;
|
79
|
-
background-color: #FFFFFF;
|
80
|
-
color: #084B8A !important;
|
81
|
-
}
|
82
|
-
|
83
76
|
a:link {
|
84
77
|
color: #0174DF;
|
85
78
|
text-decoration: none;
|
@@ -100,15 +93,27 @@ module PWN
|
|
100
93
|
text-decoration: underline;
|
101
94
|
}
|
102
95
|
|
96
|
+
body {
|
97
|
+
font-family: Verdana, Geneva, sans-serif;
|
98
|
+
font-size: 11px;
|
99
|
+
background-color: #FFFFFF;
|
100
|
+
color: #084B8A !important;
|
101
|
+
margin: 3px 3px 3px 3px !important;
|
102
|
+
padding: 0px 0px 0px 0px !important;
|
103
|
+
overflow-y: hidden;
|
104
|
+
min-height: 100vh !important;
|
105
|
+
height: 100% !important;
|
106
|
+
}
|
107
|
+
|
103
108
|
div.toggle_col_and_button_group {
|
104
109
|
display: flex; /* Makes the container a flex container */
|
105
110
|
justify-content: none; /* Aligns items along the main axis */
|
106
111
|
align-items: flex-start; /* Aligns items to the start of the cross-axis */
|
107
112
|
width: 1275px !important;
|
108
|
-
}
|
113
|
+
}
|
109
114
|
|
110
115
|
div.cols_to_toggle {
|
111
|
-
width:
|
116
|
+
width: 855px !important;
|
112
117
|
text-align: left !important;
|
113
118
|
vertical-align: middle !important;
|
114
119
|
}
|
@@ -119,6 +124,8 @@ module PWN
|
|
119
124
|
}
|
120
125
|
|
121
126
|
div.dt-container {
|
127
|
+
min-height: 100vh !important;
|
128
|
+
height: 100% !important;
|
122
129
|
width: 1275px !important;
|
123
130
|
}
|
124
131
|
|
@@ -129,6 +136,7 @@ module PWN
|
|
129
136
|
span.highlight {
|
130
137
|
background-color: cyan !important;
|
131
138
|
}
|
139
|
+
|
132
140
|
table {
|
133
141
|
width: 100%;
|
134
142
|
border-spacing:0px;
|
@@ -226,6 +234,16 @@ module PWN
|
|
226
234
|
<!-- DataTables <tbody> -->
|
227
235
|
</table>
|
228
236
|
</div>
|
237
|
+
<script>
|
238
|
+
var htmlEntityEncode = $.fn.dataTable.render.text().display;
|
239
|
+
var line_entry_uri = "";
|
240
|
+
var oldStart = 0;
|
241
|
+
var windowHeight = $(window).height();
|
242
|
+
|
243
|
+
// Calculate scrollY: Subtract an offset for non-table elements
|
244
|
+
var offset = 325;
|
245
|
+
var min_scroll_height = 50;
|
246
|
+
var scrollYHeight = Math.max(min_scroll_height, windowHeight - offset); // Ensure minimum of 600px
|
229
247
|
)
|
230
248
|
rescue StandardError => e
|
231
249
|
raise e
|
data/lib/pwn/reports/sast.rb
CHANGED
@@ -139,18 +139,7 @@ module PWN
|
|
139
139
|
driver_src_uri = 'https://github.com/0dayinc/pwn/blob/master/bin/pwn_sast'
|
140
140
|
|
141
141
|
html_report = %(#{PWN::Reports::HTMLHeader.generate(column_names: column_names, driver_src_uri: driver_src_uri)}
|
142
|
-
<script>
|
143
|
-
var htmlEntityEncode = $.fn.dataTable.render.text().display;
|
144
|
-
|
145
|
-
var line_entry_uri = "";
|
146
142
|
$(document).ready(function() {
|
147
|
-
var oldStart = 0;
|
148
|
-
var windowHeight = $(window).height();
|
149
|
-
|
150
|
-
// Calculate scrollY: Subtract an offset for non-table elements
|
151
|
-
var offset = 400;
|
152
|
-
var min_scroll_height = 100;
|
153
|
-
var scrollYHeight = Math.max(min_scroll_height, windowHeight - offset); // Ensure minimum of 600px
|
154
143
|
var table = $('#pwn_results').DataTable( {
|
155
144
|
"order": [[2, 'asc']],
|
156
145
|
"scrollY": scrollYHeight + "px",
|
@@ -310,7 +299,7 @@ module PWN
|
|
310
299
|
{
|
311
300
|
text: 'Export to JSON',
|
312
301
|
action: function () {
|
313
|
-
export_json();
|
302
|
+
export_json(table);
|
314
303
|
}
|
315
304
|
},
|
316
305
|
{
|
@@ -332,151 +321,12 @@ module PWN
|
|
332
321
|
}
|
333
322
|
});
|
334
323
|
|
335
|
-
$('#pwn_results tbody').on('click', '.multi_line_select tr', function () {
|
336
|
-
$(this).toggleClass('highlighted');
|
337
|
-
});
|
338
|
-
|
339
|
-
// Dynamically create the smart toggle label and input
|
340
|
-
var smartLabel = $('<label for="smart-toggle">Smart Search (e.g., "security !password")</label>');
|
341
|
-
var smartInput = $('<input type="radio" id="smart-toggle" name="searchMode" value="" checked>');
|
342
|
-
smartLabel.prepend(smartInput); // Prepend input inside label for proper association
|
343
|
-
|
344
|
-
// Dynamically create the regex toggle label and input
|
345
|
-
var regexLabel = $('<label for="regex-toggle">Regex Search (e.g., "^important.*$")</label>');
|
346
|
-
var regexInput = $('<input type="radio" id="regex-toggle" name="searchMode" value="">');
|
347
|
-
regexLabel.prepend(regexInput); // Prepend input inside label
|
348
|
-
|
349
|
-
// Now relocate them as before (insert before the search input)
|
350
|
-
smartLabel.insertBefore('#dt-search-0');
|
351
|
-
regexLabel.insertBefore('#dt-search-0');
|
352
|
-
|
353
|
-
// Style for inline display and spacing
|
354
|
-
smartLabel.css({ display: 'inline-block', marginRight: '10px' });
|
355
|
-
regexLabel.css({ display: 'inline-block', marginRight: '10px' });
|
356
|
-
|
357
|
-
// Optional: Hide the default "Search:" label if not needed
|
358
|
-
$('.dt-search label:first-of-type').hide();
|
359
|
-
|
360
|
-
// Custom advanced search handling
|
361
|
-
$('#dt-search-0').unbind();
|
362
|
-
$('#dt-search-0').on('input', function() {
|
363
|
-
var table = $('#pwn_results').DataTable();
|
364
|
-
var searchTerm = this.value;
|
365
|
-
var isRegex = $('#regex-toggle').prop('checked');
|
366
|
-
var isSmart = $('#smart-toggle').prop('checked');
|
367
|
-
table.search(searchTerm, isRegex, isSmart).draw();
|
368
|
-
});
|
369
|
-
|
370
|
-
// Additionally, reapply search on toggle changes (assuming radios exist in HTML)
|
371
|
-
$('#regex-toggle, #smart-toggle').on('input', function() {
|
372
|
-
var table = $('#pwn_results').DataTable();
|
373
|
-
var searchTerm = this.value;
|
374
|
-
var isRegex = $('#regex-toggle').prop('checked');
|
375
|
-
var isSmart = $('#smart-toggle').prop('checked');
|
376
|
-
table.search(searchTerm, isRegex, isSmart).draw();
|
377
|
-
});
|
378
|
-
|
379
|
-
// Toggle Columns
|
380
|
-
$('a.toggle-vis').on('click', function (e) {
|
381
|
-
e.preventDefault();
|
382
|
-
|
383
|
-
// Get the column API object
|
384
|
-
var column = table.column( $(this).attr('data-column') );
|
385
|
-
|
386
|
-
// Toggle the visibility
|
387
|
-
column.visible( ! column.visible() );
|
388
|
-
});
|
389
|
-
|
390
|
-
$('#debug_rows_selected').click( function () {
|
391
|
-
alert($('.multi_line_select tr.highlighted').length +' row(s) highlighted');
|
392
|
-
});
|
393
|
-
|
394
|
-
// Select All and Deselect All
|
395
|
-
function select_deselect_all() {
|
396
|
-
var visible_multi_line_trs = $('#pwn_results tbody tr:visible .multi_line_select tr');
|
397
|
-
var highlighted_in_visible = visible_multi_line_trs.filter('.highlighted');
|
398
|
-
if (highlighted_in_visible.length === visible_multi_line_trs.length) {
|
399
|
-
highlighted_in_visible.removeClass('highlighted');
|
400
|
-
} else {
|
401
|
-
visible_multi_line_trs.filter(':not(.highlighted)').addClass('highlighted');
|
402
|
-
}
|
403
|
-
}
|
404
|
-
|
405
|
-
function getExportData() {
|
406
|
-
return new Promise((resolve) => {
|
407
|
-
$.getJSON(table.ajax.url(), function(original_json) {
|
408
|
-
let new_data;
|
409
|
-
if ($('.multi_line_select tr.highlighted').length === 0) {
|
410
|
-
new_data = original_json.data;
|
411
|
-
} else {
|
412
|
-
var selected_results = {};
|
413
|
-
|
414
|
-
$('.multi_line_select tr.highlighted').each(function() {
|
415
|
-
var inner_tr = $(this);
|
416
|
-
var main_tr = inner_tr.closest('td').parent();
|
417
|
-
var row = table.row(main_tr);
|
418
|
-
var row_index = row.index();
|
419
|
-
var line_index = inner_tr.index();
|
420
|
-
|
421
|
-
if (selected_results[row_index] === undefined) {
|
422
|
-
selected_results[row_index] = {
|
423
|
-
row: row,
|
424
|
-
lines: []
|
425
|
-
};
|
426
|
-
}
|
427
|
-
|
428
|
-
selected_results[row_index].lines.push(line_index);
|
429
|
-
});
|
430
|
-
|
431
|
-
new_data = [];
|
432
|
-
|
433
|
-
Object.keys(selected_results).forEach(function(ri) {
|
434
|
-
var sel = selected_results[ri];
|
435
|
-
var orig_row_data = sel.row.data();
|
436
|
-
var new_row_data = JSON.parse(JSON.stringify(orig_row_data));
|
437
|
-
|
438
|
-
sel.lines.sort((a, b) => a - b);
|
439
|
-
new_row_data.line_no_and_contents = sel.lines.map(function(li) {
|
440
|
-
return orig_row_data.line_no_and_contents[li];
|
441
|
-
});
|
442
|
-
|
443
|
-
new_row_data.raw_content = new_row_data.line_no_and_contents.map(l => l.contents).join('\\n');
|
444
|
-
|
445
|
-
new_data.push(new_row_data);
|
446
|
-
});
|
447
|
-
}
|
448
|
-
resolve({data: new_data, report_name: original_json.report_name});
|
449
|
-
});
|
450
|
-
});
|
451
|
-
}
|
452
|
-
|
453
|
-
function export_json() {
|
454
|
-
if ($('.multi_line_select tr.highlighted').length === 0 && !confirm('No lines selected. Export all records?')) {
|
455
|
-
return;
|
456
|
-
}
|
457
|
-
|
458
|
-
getExportData().then(({data, report_name}) => {
|
459
|
-
var original_json = {report_name: report_name, data: data};
|
460
|
-
|
461
|
-
var json_str = JSON.stringify(original_json, null, 2);
|
462
|
-
var blob = new Blob([json_str], { type: 'application/json' });
|
463
|
-
var url = URL.createObjectURL(blob);
|
464
|
-
var a = document.createElement('a');
|
465
|
-
a.href = url;
|
466
|
-
a.download = report_name + '.json';
|
467
|
-
document.body.appendChild(a);
|
468
|
-
a.click();
|
469
|
-
document.body.removeChild(a);
|
470
|
-
URL.revokeObjectURL(url);
|
471
|
-
});
|
472
|
-
}
|
473
|
-
|
474
324
|
function export_xlsx_or_pdf(type) {
|
475
325
|
if ($('.multi_line_select tr.highlighted').length === 0 && !confirm('No lines selected. Export all records?')) {
|
476
326
|
return;
|
477
327
|
}
|
478
328
|
|
479
|
-
getExportData().then(({data, report_name}) => {
|
329
|
+
getExportData(table).then(({data, report_name}) => {
|
480
330
|
// Flatten data for export
|
481
331
|
var flatData = [];
|
482
332
|
data.forEach(function(row) {
|
@@ -642,17 +492,8 @@ module PWN
|
|
642
492
|
}
|
643
493
|
});
|
644
494
|
}
|
645
|
-
// Detect window size changes and recalculate/update scrollY
|
646
|
-
$(window).resize(function() {
|
647
|
-
var newWindowHeight = $(window).height();
|
648
|
-
var newScrollYHeight = Math.max(min_scroll_height, newWindowHeight - offset); // Your offset
|
649
|
-
$('.dt-scroll-body').css('max-height', newScrollYHeight + 'px')
|
650
|
-
table.columns.adjust().draw(false); // Adjust columns first, then redraw without data reload
|
651
|
-
});
|
652
495
|
});
|
653
|
-
|
654
|
-
</body>
|
655
|
-
</html>
|
496
|
+
#{PWN::Reports::HTMLFooter.generate}
|
656
497
|
)
|
657
498
|
|
658
499
|
File.open("#{dir_path}/#{report_name}.html", 'w') do |f|
|
data/lib/pwn/reports.rb
CHANGED
@@ -9,6 +9,7 @@ module PWN
|
|
9
9
|
# autoload :JSON, 'pwn/reports/json'
|
10
10
|
# autoload :PDF, 'pwn/reports/pdf'
|
11
11
|
autoload :Fuzz, 'pwn/reports/fuzz'
|
12
|
+
autoload :HTMLFooter, 'pwn/reports/html_footer'
|
12
13
|
autoload :HTMLHeader, 'pwn/reports/html_header'
|
13
14
|
autoload :Phone, 'pwn/reports/phone'
|
14
15
|
autoload :SAST, 'pwn/reports/sast'
|
data/lib/pwn/version.rb
CHANGED
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe PWN::Reports::HTMLFooter do
|
6
|
+
it 'should display information for authors' do
|
7
|
+
authors_response = PWN::Reports::HTMLFooter
|
8
|
+
expect(authors_response).to respond_to :authors
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'should display information for existing help method' do
|
12
|
+
help_response = PWN::Reports::HTMLFooter
|
13
|
+
expect(help_response).to respond_to :help
|
14
|
+
end
|
15
|
+
end
|
data/third_party/pwn_rdoc.jsonl
CHANGED
@@ -1050,10 +1050,15 @@
|
|
1050
1050
|
{"messages":[{"role":"user","content":"PWN::Reports::Fuzz.authors Usage"},{"role":"assistant","content":"`PWN::Reports::Fuzz.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
|
1051
1051
|
{"messages":[{"role":"user","content":"PWN::Reports::Fuzz.generate Usage"},{"role":"assistant","content":"`PWN::Reports::Fuzz.generate`: Supported Method Parameters\n\nPWN::Reports::Fuzz.generate(\n\ndir_path: dir_path,\nresults_hash: results_hash,\nchar_encoding: 'optional - character encoding returned by PWN::Plugins::Char.list_encoders (defaults to UTF-8)'\n\n)\n"}]}
|
1052
1052
|
{"messages":[{"role":"user","content":"PWN::Reports::Fuzz.help Usage"},{"role":"assistant","content":"`PWN::Reports::Fuzz.help`: "}]}
|
1053
|
+
{"messages":[{"role":"user","content":"PWN::Reports::HTMLHeader.authors Usage"},{"role":"assistant","content":"`PWN::Reports::HTMLHeader.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
|
1054
|
+
{"messages":[{"role":"user","content":"PWN::Reports::HTMLHeader.generate Usage"},{"role":"assistant","content":"`PWN::Reports::HTMLHeader.generate`: Supported Method Parameters\n\nPWN::Reports::HTMLHeader.generate(\n\ncolumn_names: 'required - array of column names to use in the report table',\ndriver_src_uri: 'required - pwn driver source code uri',\n\n)\n"}]}
|
1055
|
+
{"messages":[{"role":"user","content":"PWN::Reports::HTMLHeader.help Usage"},{"role":"assistant","content":"`PWN::Reports::HTMLHeader.help`: "}]}
|
1053
1056
|
{"messages":[{"role":"user","content":"PWN::Reports::Phone.authors Usage"},{"role":"assistant","content":"`PWN::Reports::Phone.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
|
1054
1057
|
{"messages":[{"role":"user","content":"PWN::Reports::Phone.generate Usage"},{"role":"assistant","content":"`PWN::Reports::Phone.generate`: Supported Method Parameters\n\nPWN::Reports::Phone.generate(\n\ndir_path: dir_path,\nresults_hash: results_hash\n\n)\n"}]}
|
1055
1058
|
{"messages":[{"role":"user","content":"PWN::Reports::Phone.help Usage"},{"role":"assistant","content":"`PWN::Reports::Phone.help`: "}]}
|
1059
|
+
{"messages":[{"role":"user","content":"PWN::Reports::SAST.authors Usage"},{"role":"assistant","content":"`PWN::Reports::SAST.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
|
1056
1060
|
{"messages":[{"role":"user","content":"PWN::Reports::SAST.generate Usage"},{"role":"assistant","content":"`PWN::Reports::SAST.generate`: Supported Method Parameters\n\nPWN::Reports::SAST.generate(\n\ndir_path: 'optional - Directory path to save the report (defaults to .)',\nresults_hash: 'optional - Hash containing the results of the SAST analysis (defaults to empty hash structure)',\nreport_name: 'optional - Name of the report file (defaults to current directory name)',\nai_engine: 'optional - AI engine to use for analysis (:grok, :ollama, or :openai)',\nai_model: 'optionnal - AI Model to Use for Respective AI Engine (e.g., grok-4i-0709, chargpt-4o-latest, llama-3.1, etc.)',\nai_key: 'optional - AI Key/Token for Respective AI Engine',\nai_fqdn: 'optional - AI FQDN (Only Required for \"ollama\" AI Engine)',\nai_system_role_content: 'optional - AI System Role Content (Defaults to \"Is this code vulnerable or a false positive? Valid responses are only: \"VULNERABLE\" or \"FALSE+\". DO NOT PROVIDE ANY OTHER TEXT OR EXPLANATIONS.\")',\nai_temp: 'optional - AI Temperature (Defaults to 0.9)'\n\n)\n"}]}
|
1061
|
+
{"messages":[{"role":"user","content":"PWN::Reports::SAST.help Usage"},{"role":"assistant","content":"`PWN::Reports::SAST.help`: "}]}
|
1057
1062
|
{"messages":[{"role":"user","content":"PWN::Reports::URIBuster.authors Usage"},{"role":"assistant","content":"`PWN::Reports::URIBuster.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
|
1058
1063
|
{"messages":[{"role":"user","content":"PWN::Reports::URIBuster.generate Usage"},{"role":"assistant","content":"`PWN::Reports::URIBuster.generate`: Supported Method Parameters\n\nPWN::Reports::URIBuster.generate(\n\ndir_path: dir_path,\nresults_hash: results_hash\n\n)\n"}]}
|
1059
1064
|
{"messages":[{"role":"user","content":"PWN::Reports::URIBuster.help Usage"},{"role":"assistant","content":"`PWN::Reports::URIBuster.help`: "}]}
|
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.5.
|
4
|
+
version: 0.5.392
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- 0day Inc.
|
@@ -757,14 +757,14 @@ dependencies:
|
|
757
757
|
requirements:
|
758
758
|
- - '='
|
759
759
|
- !ruby/object:Gem::Version
|
760
|
-
version: 1.6.
|
760
|
+
version: 1.6.2
|
761
761
|
type: :runtime
|
762
762
|
prerelease: false
|
763
763
|
version_requirements: !ruby/object:Gem::Requirement
|
764
764
|
requirements:
|
765
765
|
- - '='
|
766
766
|
- !ruby/object:Gem::Version
|
767
|
-
version: 1.6.
|
767
|
+
version: 1.6.2
|
768
768
|
- !ruby/object:Gem::Dependency
|
769
769
|
name: pry
|
770
770
|
requirement: !ruby/object:Gem::Requirement
|
@@ -939,14 +939,14 @@ dependencies:
|
|
939
939
|
requirements:
|
940
940
|
- - '='
|
941
941
|
- !ruby/object:Gem::Version
|
942
|
-
version: 1.80.
|
942
|
+
version: 1.80.2
|
943
943
|
type: :runtime
|
944
944
|
prerelease: false
|
945
945
|
version_requirements: !ruby/object:Gem::Requirement
|
946
946
|
requirements:
|
947
947
|
- - '='
|
948
948
|
- !ruby/object:Gem::Version
|
949
|
-
version: 1.80.
|
949
|
+
version: 1.80.2
|
950
950
|
- !ruby/object:Gem::Dependency
|
951
951
|
name: rubocop-rake
|
952
952
|
requirement: !ruby/object:Gem::Requirement
|
@@ -967,14 +967,14 @@ dependencies:
|
|
967
967
|
requirements:
|
968
968
|
- - '='
|
969
969
|
- !ruby/object:Gem::Version
|
970
|
-
version: 3.
|
970
|
+
version: 3.7.0
|
971
971
|
type: :runtime
|
972
972
|
prerelease: false
|
973
973
|
version_requirements: !ruby/object:Gem::Requirement
|
974
974
|
requirements:
|
975
975
|
- - '='
|
976
976
|
- !ruby/object:Gem::Version
|
977
|
-
version: 3.
|
977
|
+
version: 3.7.0
|
978
978
|
- !ruby/object:Gem::Dependency
|
979
979
|
name: ruby-audio
|
980
980
|
requirement: !ruby/object:Gem::Requirement
|
@@ -1279,6 +1279,7 @@ executables:
|
|
1279
1279
|
- pwn_aws_describe_resources
|
1280
1280
|
- pwn_bdba_groups
|
1281
1281
|
- pwn_bdba_scan
|
1282
|
+
- pwn_burp_suite_pro_active_rest_api_scan
|
1282
1283
|
- pwn_burp_suite_pro_active_scan
|
1283
1284
|
- pwn_char_base64_encoding
|
1284
1285
|
- pwn_char_dec_encoding
|
@@ -1348,6 +1349,7 @@ files:
|
|
1348
1349
|
- bin/pwn_aws_describe_resources
|
1349
1350
|
- bin/pwn_bdba_groups
|
1350
1351
|
- bin/pwn_bdba_scan
|
1352
|
+
- bin/pwn_burp_suite_pro_active_rest_api_scan
|
1351
1353
|
- bin/pwn_burp_suite_pro_active_scan
|
1352
1354
|
- bin/pwn_char_base64_encoding
|
1353
1355
|
- bin/pwn_char_dec_encoding
|
@@ -1900,6 +1902,7 @@ files:
|
|
1900
1902
|
- lib/pwn/plugins/xxd.rb
|
1901
1903
|
- lib/pwn/reports.rb
|
1902
1904
|
- lib/pwn/reports/fuzz.rb
|
1905
|
+
- lib/pwn/reports/html_footer.rb
|
1903
1906
|
- lib/pwn/reports/html_header.rb
|
1904
1907
|
- lib/pwn/reports/phone.rb
|
1905
1908
|
- lib/pwn/reports/sast.rb
|
@@ -2243,6 +2246,7 @@ files:
|
|
2243
2246
|
- spec/lib/pwn/plugins/xxd_spec.rb
|
2244
2247
|
- spec/lib/pwn/plugins_spec.rb
|
2245
2248
|
- spec/lib/pwn/reports/fuzz_spec.rb
|
2249
|
+
- spec/lib/pwn/reports/html_footer_spec.rb
|
2246
2250
|
- spec/lib/pwn/reports/html_header_spec.rb
|
2247
2251
|
- spec/lib/pwn/reports/phone_spec.rb
|
2248
2252
|
- spec/lib/pwn/reports/sast_spec.rb
|