pwn 0.5.353 → 0.5.355

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: 520c14131726908d9abb9e798087982d6d85e97fee79a4072f57379d71b4ec81
4
- data.tar.gz: 7352109003e96f827c4ba7b4a49be75217216d6450c12e8c30067832712c52a5
3
+ metadata.gz: 1a1c25778cca78de03158bfd515b79afe966f47c3696619c02a2a8b6c54e8f48
4
+ data.tar.gz: 727062f71c704907703d87877d009eb7b9cf91669e72257458592178dd89dd6f
5
5
  SHA512:
6
- metadata.gz: 4d69ceb6ad6da3d4c6534a3a009c8f9a9d3bdd6501f113b7bd5c3b30fb0bb6c2b5b2ad4578976bb3b51ae243a5e9ae006f0d1bfa5ff168a951cf791dd13eb0cb
7
- data.tar.gz: 6d505d50654d71114a4c6691e3114229531cd59ff05d6bc047b7ad3df3fb2f650c91a224dd60a90333e1d7ad608c074e73918feebc647fc4c36fe8594e9f7d8e
6
+ metadata.gz: 961c1695548771ae13d9a56d2a4170d52c2b660a55de3ae387d1a0fd5bf38e7ff9c8bd1f18366cb2b8eee40d1ee12779ce834eb0620f200b5e952ea0a2f0ed02
7
+ data.tar.gz: 208f0401332646eafec405fa2b8ff0e05932591145fa088f639290b25729085eb286d80cc6fa774d655a26c7caa3f4e5e2545d3c573fe7165d781f833ab5b06a
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.353]:001 >>> PWN.help
40
+ pwn[v0.5.355]: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.4.4@pwn
52
52
  $ gem uninstall --all --executables pwn
53
53
  $ gem install --verbose pwn
54
54
  $ pwn
55
- pwn[v0.5.353]:001 >>> PWN.help
55
+ pwn[v0.5.355]: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.353]:001 >>> PWN.help
65
+ pwn[v0.5.355]: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:
data/bin/pwn_phone CHANGED
@@ -81,6 +81,7 @@ begin
81
81
  baresip_bin = opts[:baresip_bin]
82
82
  sox_bin = opts[:sox_bin]
83
83
  session_root = opts[:session_root] ||= '.'
84
+ # session_root = opts[:session_root] ||= Dir.pwd
84
85
 
85
86
  # Optional Flag Variables
86
87
  randomize = opts[:randomize]
@@ -40,7 +40,7 @@ module PWN
40
40
  end
41
41
 
42
42
  # Supported Method Parameters::
43
- # burp_obj = PWN::Plugins::BurpSuite.start(
43
+ # burp_obj1 = PWN::Plugins::BurpSuite.start(
44
44
  # burp_jar_path: 'optional - path of burp suite pro jar file (defaults to /opt/burpsuite/burpsuite_pro.jar)',
45
45
  # headless: 'optional - run burp headless if set to true',
46
46
  # browser_type: 'optional - defaults to :firefox. See PWN::Plugins::TransparentBrowser.help for a list of types',
@@ -60,12 +60,10 @@ module PWN
60
60
 
61
61
  browser_type = opts[:browser_type] ||= :firefox
62
62
  burp_ip = opts[:burp_ip] ||= '127.0.0.1'
63
- burp_port = opts[:burp_port] ||= 8080
64
- # burp_port = opts[:burp_port] ||= PWN::Plugins::Sock.get_random_unused_port
65
- #
63
+ burp_port = opts[:burp_port] ||= PWN::Plugins::Sock.get_random_unused_port
64
+
66
65
  pwn_burp_ip = opts[:pwn_burp_ip] ||= '127.0.0.1'
67
- pwn_burp_port = opts[:pwn_burp_port] ||= 1337
68
- # pwn_burp_port = opts[:pwn_burp_port] ||= PWN::Plugins::Sock.get_random_unused_port
66
+ pwn_burp_port = opts[:pwn_burp_port] ||= PWN::Plugins::Sock.get_random_unused_port
69
67
 
70
68
  burp_cmd_string = 'java -Xmx4G'
71
69
  burp_cmd_string = "#{burp_cmd_string} -Djava.awt.headless=true" if opts[:headless]
@@ -103,14 +101,13 @@ module PWN
103
101
  next
104
102
  end
105
103
 
106
- # USE THIS WHEN Updating Proxy Listener settings become
107
- # available in the BurpSuite Montoya API
108
104
  # Update proxy listener to use the burp_ip and burp_port
109
- # update_proxy_listener(
110
- # burp_obj: burp_obj,
111
- # address: burp_ip,
112
- # port: burp_port
113
- # )
105
+ update_proxy_listener(
106
+ burp_obj: burp_obj,
107
+ id: '0',
108
+ address: burp_ip,
109
+ port: burp_port
110
+ )
114
111
 
115
112
  burp_obj
116
113
  rescue StandardError => e
@@ -246,6 +243,113 @@ module PWN
246
243
  raise e
247
244
  end
248
245
 
246
+ # Supported Method Parameters::
247
+ # json_proxy_listeners = PWN::Plugins::BurpSuite.get_proxy_listeners(
248
+ # burp_obj: 'required - burp_obj returned by #start method'
249
+ # )
250
+
251
+ public_class_method def self.get_proxy_listeners(opts = {})
252
+ burp_obj = opts[:burp_obj]
253
+ rest_browser = burp_obj[:rest_browser]
254
+ pwn_burp_api = burp_obj[:pwn_burp_api]
255
+
256
+ listeners = rest_browser.get("http://#{pwn_burp_api}/proxy/listeners", content_type: 'application/json; charset=UTF8')
257
+ JSON.parse(listeners, symbolize_names: true)
258
+ rescue StandardError => e
259
+ stop(burp_obj: burp_obj) unless burp_obj.nil?
260
+ raise e
261
+ end
262
+
263
+ # Supported Method Parameters::
264
+ # json_proxy_listener = PWN::Plugins::BurpSuite.add_proxy_listener(
265
+ # burp_obj: 'required - burp_obj returned by #start method',
266
+ # bind_address: 'required - bind address for the proxy listener (e.g., "127.0.0.1")',
267
+ # port: 'required - port for the proxy listener (e.g., 8081)',
268
+ # enabled: 'optional - enable the listener (defaults to true)'
269
+ # )
270
+
271
+ public_class_method def self.add_proxy_listener(opts = {})
272
+ burp_obj = opts[:burp_obj]
273
+ rest_browser = burp_obj[:rest_browser]
274
+ pwn_burp_api = burp_obj[:pwn_burp_api]
275
+ bind_address = opts[:bind_address]
276
+ raise 'ERROR: bind_address parameter is required' if bind_address.nil?
277
+
278
+ port = opts[:port]
279
+ raise 'ERROR: port parameter is required' if port.nil?
280
+
281
+ enabled = opts[:enabled] != false # Default to true if not specified
282
+
283
+ proxy_listeners = get_proxy_listeners(burp_obj: burp_obj)
284
+ last_known_proxy_id = proxy_listeners.last[:id].to_i ||= 0
285
+ next_id = last_known_proxy_id + 1
286
+
287
+ post_body = {
288
+ id: next_id.to_s,
289
+ bind_address: bind_address,
290
+ port: port,
291
+ enabled: enabled
292
+ }.to_json
293
+
294
+ listener = rest_browser.post("http://#{pwn_burp_api}/proxy/listeners", post_body, content_type: 'application/json; charset=UTF8')
295
+ JSON.parse(listener, symbolize_names: true)
296
+ rescue StandardError => e
297
+ stop(burp_obj: burp_obj) unless burp_obj.nil?
298
+ raise e
299
+ end
300
+
301
+ # Supported Method Parameters::
302
+ # json_proxy_listener = PWN::Plugins::BurpSuite.update_proxy_listener(
303
+ # burp_obj: 'required - burp_obj returned by #start method',
304
+ # id: 'optional - ID of the proxy listener (defaults to "0")',
305
+ # bind_address: 'optional - bind address for the proxy listener (defaults to "127.0.0.1")',
306
+ # port: 'optional - port for the proxy listener (defaults to 8080)',
307
+ # enabled: 'optional - enable or disable the listener (defaults to true)'
308
+ # )
309
+
310
+ public_class_method def self.update_proxy_listener(opts = {})
311
+ burp_obj = opts[:burp_obj]
312
+ rest_browser = burp_obj[:rest_browser]
313
+ pwn_burp_api = burp_obj[:pwn_burp_api]
314
+ id = opts[:id] ||= '0'
315
+ bind_address = opts[:bind_address] ||= '127.0.0.1'
316
+ port = opts[:port] ||= 8080
317
+ enabled = opts[:enabled] != false # Default to true if not specified
318
+
319
+ post_body = {
320
+ id: id,
321
+ bind_address: bind_address,
322
+ port: port,
323
+ enabled: enabled
324
+ }.to_json
325
+
326
+ listener = rest_browser.put("http://#{pwn_burp_api}/proxy/listeners/#{id}", post_body, content_type: 'application/json; charset=UTF8')
327
+ JSON.parse(listener, symbolize_names: true)
328
+ rescue StandardError => e
329
+ stop(burp_obj: burp_obj) unless burp_obj.nil?
330
+ raise e
331
+ end
332
+
333
+ # Supported Method Parameters::
334
+ # PWN::Plugins::BurpSuite.delete_proxy_listener(
335
+ # burp_obj: 'required - burp_obj returned by #start method',
336
+ # id: 'required - ID of the proxy listener (defaults to "0")'
337
+ # )
338
+
339
+ public_class_method def self.delete_proxy_listener(opts = {})
340
+ burp_obj = opts[:burp_obj]
341
+ rest_browser = burp_obj[:rest_browser]
342
+ pwn_burp_api = burp_obj[:pwn_burp_api]
343
+ id = opts[:id] ||= '0'
344
+ raise 'ERROR: id parameter is required' if id.nil?
345
+
346
+ rest_browser.delete("http://#{pwn_burp_api}/proxy/listeners/#{id}")
347
+ true # Return true to indicate successful deletion (or error if API fails)
348
+ rescue StandardError => e
349
+ stop(burp_obj: burp_obj) unless burp_obj.nil?
350
+ raise e
351
+ end
352
+
249
353
  # Supported Method Parameters::
250
354
  # json_sitemap = PWN::Plugins::BurpSuite.get_sitemap(
251
355
  # burp_obj: 'required - burp_obj returned by #start method',
@@ -788,109 +892,6 @@ module PWN
788
892
  raise e
789
893
  end
790
894
 
791
- # Supported Method Parameters::
792
- # json_proxy_listeners = PWN::Plugins::BurpSuite.get_proxy_listeners(
793
- # burp_obj: 'required - burp_obj returned by #start method'
794
- # )
795
-
796
- public_class_method def self.get_proxy_listeners(opts = {})
797
- burp_obj = opts[:burp_obj]
798
- rest_browser = burp_obj[:rest_browser]
799
- pwn_burp_api = burp_obj[:pwn_burp_api]
800
-
801
- listeners = rest_browser.get("http://#{pwn_burp_api}/proxy/listeners", content_type: 'application/json; charset=UTF8')
802
- JSON.parse(listeners, symbolize_names: true)
803
- rescue StandardError => e
804
- stop(burp_obj: burp_obj) unless burp_obj.nil?
805
- raise e
806
- end
807
-
808
- # Supported Method Parameters::
809
- # json_proxy_listener = PWN::Plugins::BurpSuite.add_proxy_listener(
810
- # burp_obj: 'required - burp_obj returned by #start method',
811
- # bind_address: 'required - bind address for the proxy listener (e.g., "127.0.0.1")',
812
- # port: 'required - port for the proxy listener (e.g., 8081)',
813
- # enabled: 'optional - enable the listener (defaults to true)'
814
- # )
815
-
816
- public_class_method def self.add_proxy_listener(opts = {})
817
- burp_obj = opts[:burp_obj]
818
- rest_browser = burp_obj[:rest_browser]
819
- pwn_burp_api = burp_obj[:pwn_burp_api]
820
- bind_address = opts[:bind_address]
821
- raise 'ERROR: bind_address parameter is required' if bind_address.nil?
822
-
823
- port = opts[:port]
824
- raise 'ERROR: port parameter is required' if port.nil?
825
-
826
- enabled = opts[:enabled] != false # Default to true if not specified
827
-
828
- post_body = {
829
- id: "#{bind_address}:#{port}",
830
- bind_address: bind_address,
831
- port: port,
832
- enabled: enabled
833
- }.to_json
834
-
835
- listener = rest_browser.post("http://#{pwn_burp_api}/proxy/listeners", post_body, content_type: 'application/json; charset=UTF8')
836
- JSON.parse(listener, symbolize_names: true)
837
- rescue StandardError => e
838
- stop(burp_obj: burp_obj) unless burp_obj.nil?
839
- raise e
840
- end
841
-
842
- # Supported Method Parameters::
843
- # json_proxy_listener = PWN::Plugins::BurpSuite.update_proxy_listener(
844
- # burp_obj: 'required - burp_obj returned by #start method',
845
- # id: 'optional - ID of the proxy listener (defaults to "127.0.0.1:8080")',
846
- # bind_address: 'optional - bind address for the proxy listener (defaults to "127.0.0.1")',
847
- # port: 'optional - port for the proxy listener (defaults to 8080)',
848
- # enabled: 'optional - enable or disable the listener (defaults to true)'
849
- # )
850
-
851
- public_class_method def self.update_proxy_listener(opts = {})
852
- burp_obj = opts[:burp_obj]
853
- rest_browser = burp_obj[:rest_browser]
854
- pwn_burp_api = burp_obj[:pwn_burp_api]
855
- id = opts[:id] ||= '127.0.0.1:8080'
856
- bind_address = opts[:bind_address] ||= '127.0.0.1'
857
- port = opts[:port] ||= 8080
858
- enabled = opts[:enabled] != false # Default to true if not specified
859
-
860
- post_body = {
861
- id: id,
862
- bind_address: bind_address,
863
- port: port,
864
- enabled: enabled
865
- }.to_json
866
-
867
- listener = rest_browser.put("http://#{pwn_burp_api}/proxy/listeners/#{id}", post_body, content_type: 'application/json; charset=UTF8')
868
- JSON.parse(listener, symbolize_names: true)
869
- rescue StandardError => e
870
- stop(burp_obj: burp_obj) unless burp_obj.nil?
871
- raise e
872
- end
873
-
874
- # Supported Method Parameters::
875
- # PWN::Plugins::BurpSuite.delete_proxy_listener(
876
- # burp_obj: 'required - burp_obj returned by #start method',
877
- # id: 'required - ID of the proxy listener (e.g., "127.0.0.1:8080")'
878
- # )
879
-
880
- public_class_method def self.delete_proxy_listener(opts = {})
881
- burp_obj = opts[:burp_obj]
882
- rest_browser = burp_obj[:rest_browser]
883
- pwn_burp_api = burp_obj[:pwn_burp_api]
884
- id = opts[:id]
885
- raise 'ERROR: id parameter is required' if id.nil?
886
-
887
- rest_browser.delete("http://#{pwn_burp_api}/proxy/listeners/#{id}")
888
- true # Return true to indicate successful deletion (or error if API fails)
889
- rescue StandardError => e
890
- stop(burp_obj: burp_obj) unless burp_obj.nil?
891
- raise e
892
- end
893
-
894
895
  # Supported Method Parameters::
895
896
  # PWN::Plugins::BurpSuite.update_burp_jar(
896
897
  # )
@@ -929,7 +930,7 @@ module PWN
929
930
 
930
931
  public_class_method def self.help
931
932
  puts "USAGE:
932
- burp_obj = #{self}.start(
933
+ burp_obj1 = #{self}.start(
933
934
  burp_jar_path: 'optional - path of burp suite pro jar file (defaults to /opt/burpsuite/burpsuite_pro.jar)',
934
935
  headless: 'optional - run headless if set to true',
935
936
  browser_type: 'optional - defaults to :firefox. See PWN::Plugins::TransparentBrowser.help for a list of types'
@@ -958,6 +959,30 @@ module PWN
958
959
  burp_obj: 'required - burp_obj returned by #start method'
959
960
  )
960
961
 
962
+ #{self}.get_proxy_listeners(
963
+ burp_obj: 'required - burp_obj returned by #start method'
964
+ )
965
+
966
+ json_proxy_listener = #{self}.add_proxy_listener(
967
+ burp_obj: 'required - burp_obj returned by #start method',
968
+ bind_address: 'required - bind address for the proxy listener (e.g., \"127.0.0.1\")',
969
+ port: 'required - port for the proxy listener (e.g., 8081)',
970
+ enabled: 'optional - enable the listener (defaults to true)'
971
+ )
972
+
973
+ json_proxy_listener = #{self}.update_proxy_listener(
974
+ burp_obj: 'required - burp_obj returned by #start method',
975
+ id: 'optional - ID of the proxy listener (defaults to \"0\")',
976
+ bind_address: 'required - bind address for the proxy listener (e.g., \"127.0.0.1\")',
977
+ port: 'required - port for the proxy listener (e.g., 8081)',
978
+ enabled: 'optional - enable the listener (defaults to true)'
979
+ )
980
+
981
+ #{self}.delete_proxy_listener(
982
+ burp_obj: 'required - burp_obj returned by #start method',
983
+ id: 'required - ID of the proxy listener (defaults to \"0\")'
984
+ )
985
+
961
986
  json_sitemap = #{self}.get_sitemap(
962
987
  burp_obj: 'required - burp_obj returned by #start method',
963
988
  target_url: 'optional - target URL to filter sitemap results (defaults to entire sitemap)'
@@ -70,16 +70,12 @@ module PWN
70
70
  border-spacing:0px;
71
71
  }
72
72
 
73
- table.squish {
74
- table-layout: fixed;
75
- }
76
-
77
73
  td {
78
74
  vertical-align: top;
79
75
  word-wrap: break-word !important;
80
76
  }
81
77
 
82
- tr.highlighted td {
78
+ tr.selected td {
83
79
  background-color: #FFF396 !important;
84
80
  }
85
81
  </style>
@@ -99,7 +95,6 @@ module PWN
99
95
  </h1><br /><br />
100
96
 
101
97
  <div>
102
- <!--<button type="button" id="button">Rows Selected</button>-->
103
98
  <button type="button" id="export_selected">Export Selected to JSON</button>
104
99
  </div><br />
105
100
 
@@ -108,9 +103,9 @@ module PWN
108
103
  <a class="toggle-vis" data-column="1" href="#">Timestamp</a>&nbsp;|&nbsp;
109
104
  <a class="toggle-vis" data-column="2" href="#">Request</a>&nbsp;|&nbsp;
110
105
  <a class="toggle-vis" data-column="3" href="#">Request Encoding</a>&nbsp;|&nbsp;
111
- <a class="toggle-vis" data-column="3" href="#">Request Length</a>&nbsp;|&nbsp;
112
- <a class="toggle-vis" data-column="3" href="#">Response</a>&nbsp;|&nbsp;
113
- <a class="toggle-vis" data-column="3" href="#">Response Length</a>&nbsp;|&nbsp;
106
+ <a class="toggle-vis" data-column="4" href="#">Request Length</a>&nbsp;|&nbsp;
107
+ <a class="toggle-vis" data-column="5" href="#">Response</a>&nbsp;|&nbsp;
108
+ <a class="toggle-vis" data-column="6" href="#">Response Length</a>&nbsp;|&nbsp;
114
109
  </div>
115
110
  <br /><br />
116
111
 
@@ -119,7 +114,7 @@ module PWN
119
114
  </div><br />
120
115
 
121
116
  <div>
122
- <table id="pwn_fuzz_net_app_proto" class="display squish" cellspacing="0">
117
+ <table id="pwn_fuzz_net_app_proto" class="display" cellspacing="0">
123
118
  <thead>
124
119
  <tr>
125
120
  <th>#</th>
@@ -145,7 +140,6 @@ module PWN
145
140
  <script>
146
141
  var htmlEntityEncode = $.fn.dataTable.render.text().display;
147
142
 
148
- var line_entry_uri = "";
149
143
  $(document).ready(function() {
150
144
  var oldStart = 0;
151
145
  var table = $('#pwn_fuzz_net_app_proto').DataTable( {
@@ -170,13 +164,16 @@ module PWN
170
164
  //"deferRender": true,
171
165
  "dom": "fplitfpliS",
172
166
  "autoWidth": false,
167
+ "select": {
168
+ "style": "multi"
169
+ },
173
170
  "columnDefs": [
174
171
  {
175
- targets: 3,
172
+ targets: 4,
176
173
  className: 'dt-body-center'
177
174
  },
178
175
  {
179
- targets: 5,
176
+ targets: 6,
180
177
  className: 'dt-body-center'
181
178
  }
182
179
  ],
@@ -269,54 +266,16 @@ module PWN
269
266
  column.visible( ! column.visible() );
270
267
  });
271
268
 
272
- $('#button').click( function () {
273
- alert($('.multi_line_select tr.highlighted').length +' row(s) highlighted');
274
- });
275
-
276
269
  $('#export_selected').click( function () {
277
- if ($('.multi_line_select tr.highlighted').length === 0) {
270
+ var selectedRows = table.rows({ selected: true });
271
+ if (selectedRows.count() === 0) {
278
272
  alert('No rows selected');
279
273
  return;
280
274
  }
281
275
 
282
276
  $.getJSON(table.ajax.url(), function(original_json) {
283
- var selected_results = {};
284
-
285
- $('.multi_line_select tr.highlighted').each(function() {
286
- var inner_tr = $(this);
287
- var main_tr = inner_tr.closest('td').parent();
288
- var row = table.row(main_tr);
289
- var row_index = row.index();
290
- var line_index = inner_tr.index();
291
-
292
- if (selected_results[row_index] === undefined) {
293
- selected_results[row_index] = {
294
- row: row,
295
- lines: []
296
- };
297
- }
298
-
299
- selected_results[row_index].lines.push(line_index);
300
- });
301
-
302
- var new_data = [];
303
-
304
- Object.keys(selected_results).forEach(function(ri) {
305
- var sel = selected_results[ri];
306
- var orig_row_data = sel.row.data();
307
- var new_row_data = JSON.parse(JSON.stringify(orig_row_data));
308
-
309
- sel.lines.sort((a, b) => a - b);
310
- new_row_data.line_no_and_contents = sel.lines.map(function(li) {
311
- return orig_row_data.line_no_and_contents[li];
312
- });
313
-
314
- new_row_data.raw_content = new_row_data.line_no_and_contents.map(l => l.contents).join('\\n');
315
-
316
- new_data.push(new_row_data);
317
- });
318
-
319
- original_json.data = new_data;
277
+ var selected_data = selectedRows.data().toArray();
278
+ original_json.data = selected_data;
320
279
 
321
280
  if (original_json.report_name) {
322
281
  original_json.report_name += '_selected';
@@ -62,16 +62,12 @@ module PWN
62
62
  border-spacing:0px;
63
63
  }
64
64
 
65
- table.squish {
66
- table-layout: fixed;
67
- }
68
-
69
65
  td {
70
66
  vertical-align: top;
71
67
  word-wrap: break-word !important;
72
68
  }
73
69
 
74
- tr.highlighted td {
70
+ tr.selected td {
75
71
  background-color: #FFF396 !important;
76
72
  }
77
73
  </style>
@@ -159,7 +155,7 @@ module PWN
159
155
 
160
156
  <script>
161
157
  var htmlEntityEncode = $.fn.dataTable.render.text().display;
162
- var line_entry_uri = "";
158
+
163
159
  $(document).ready(function() {
164
160
  var oldStart = 0;
165
161
  var table = $('#pwn_phone_results').DataTable( {
@@ -184,6 +180,9 @@ module PWN
184
180
  //"deferRender": true,
185
181
  "dom": "fplitfpliS",
186
182
  "autoWidth": false,
183
+ "select": {
184
+ "style": "multi"
185
+ },
187
186
  "columns": [
188
187
  { "data": null },
189
188
  {
@@ -324,54 +323,16 @@ module PWN
324
323
  column.visible( ! column.visible() );
325
324
  });
326
325
 
327
- $('#button').click( function () {
328
- alert($('.multi_line_select tr.highlighted').length +' row(s) highlighted');
329
- });
330
-
331
326
  $('#export_selected').click( function () {
332
- if ($('.multi_line_select tr.highlighted').length === 0) {
327
+ var selectedRows = table.rows({ selected: true });
328
+ if (selectedRows.count() === 0) {
333
329
  alert('No rows selected');
334
330
  return;
335
331
  }
336
332
 
337
333
  $.getJSON(table.ajax.url(), function(original_json) {
338
- var selected_results = {};
339
-
340
- $('.multi_line_select tr.highlighted').each(function() {
341
- var inner_tr = $(this);
342
- var main_tr = inner_tr.closest('td').parent();
343
- var row = table.row(main_tr);
344
- var row_index = row.index();
345
- var line_index = inner_tr.index();
346
-
347
- if (selected_results[row_index] === undefined) {
348
- selected_results[row_index] = {
349
- row: row,
350
- lines: []
351
- };
352
- }
353
-
354
- selected_results[row_index].lines.push(line_index);
355
- });
356
-
357
- var new_data = [];
358
-
359
- Object.keys(selected_results).forEach(function(ri) {
360
- var sel = selected_results[ri];
361
- var orig_row_data = sel.row.data();
362
- var new_row_data = JSON.parse(JSON.stringify(orig_row_data));
363
-
364
- sel.lines.sort((a, b) => a - b);
365
- new_row_data.line_no_and_contents = sel.lines.map(function(li) {
366
- return orig_row_data.line_no_and_contents[li];
367
- });
368
-
369
- new_row_data.raw_content = new_row_data.line_no_and_contents.map(l => l.contents).join('\\n');
370
-
371
- new_data.push(new_row_data);
372
- });
373
-
374
- original_json.data = new_data;
334
+ var selected_data = selectedRows.data().toArray();
335
+ original_json.data = selected_data;
375
336
 
376
337
  if (original_json.report_name) {
377
338
  original_json.report_name += '_selected';
@@ -62,16 +62,12 @@ module PWN
62
62
  border-spacing:0px;
63
63
  }
64
64
 
65
- table.squish {
66
- table-layout: fixed;
67
- }
68
-
69
65
  td {
70
66
  vertical-align: top;
71
67
  word-wrap: break-word !important;
72
68
  }
73
69
 
74
- tr.highlighted td {
70
+ tr.selected td {
75
71
  background-color: #FFF396 !important;
76
72
  }
77
73
  </style>
@@ -147,7 +143,7 @@ module PWN
147
143
 
148
144
  <script>
149
145
  var htmlEntityEncode = $.fn.dataTable.render.text().display;
150
- var line_entry_uri = "";
146
+
151
147
  $(document).ready(function() {
152
148
  var oldStart = 0;
153
149
  var table = $('#pwn_www_uri_buster_results').DataTable( {
@@ -172,6 +168,9 @@ module PWN
172
168
  //"deferRender": true,
173
169
  "dom": "fplitfpliS",
174
170
  "autoWidth": false,
171
+ "select": {
172
+ "style": "multi"
173
+ },
175
174
  "columns": [
176
175
  { "data": null },
177
176
  {
@@ -275,54 +274,16 @@ module PWN
275
274
  column.visible( ! column.visible() );
276
275
  });
277
276
 
278
- $('#button').click( function () {
279
- alert($('.multi_line_select tr.highlighted').length +' row(s) highlighted');
280
- });
281
-
282
277
  $('#export_selected').click( function () {
283
- if ($('.multi_line_select tr.highlighted').length === 0) {
278
+ var selectedRows = table.rows({ selected: true });
279
+ if (selectedRows.count() === 0) {
284
280
  alert('No rows selected');
285
281
  return;
286
282
  }
287
283
 
288
284
  $.getJSON(table.ajax.url(), function(original_json) {
289
- var selected_results = {};
290
-
291
- $('.multi_line_select tr.highlighted').each(function() {
292
- var inner_tr = $(this);
293
- var main_tr = inner_tr.closest('td').parent();
294
- var row = table.row(main_tr);
295
- var row_index = row.index();
296
- var line_index = inner_tr.index();
297
-
298
- if (selected_results[row_index] === undefined) {
299
- selected_results[row_index] = {
300
- row: row,
301
- lines: []
302
- };
303
- }
304
-
305
- selected_results[row_index].lines.push(line_index);
306
- });
307
-
308
- var new_data = [];
309
-
310
- Object.keys(selected_results).forEach(function(ri) {
311
- var sel = selected_results[ri];
312
- var orig_row_data = sel.row.data();
313
- var new_row_data = JSON.parse(JSON.stringify(orig_row_data));
314
-
315
- sel.lines.sort((a, b) => a - b);
316
- new_row_data.line_no_and_contents = sel.lines.map(function(li) {
317
- return orig_row_data.line_no_and_contents[li];
318
- });
319
-
320
- new_row_data.raw_content = new_row_data.line_no_and_contents.map(l => l.contents).join('\\n');
321
-
322
- new_data.push(new_row_data);
323
- });
324
-
325
- original_json.data = new_data;
285
+ var selected_data = selectedRows.data().toArray();
286
+ original_json.data = selected_data;
326
287
 
327
288
  if (original_json.report_name) {
328
289
  original_json.report_name += '_selected';
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.353'
4
+ VERSION = '0.5.355'
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.5.353
4
+ version: 0.5.355
5
5
  platform: ruby
6
6
  authors:
7
7
  - 0day Inc.