pwn 0.5.508 → 0.5.509

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.
Files changed (1057) hide show
  1. checksums.yaml +4 -4
  2. metadata +24 -1131
  3. data/.github/FUNDING.yml +0 -1
  4. data/.github/ISSUE_TEMPLATE/bug_report.md +0 -38
  5. data/.gitignore +0 -65
  6. data/.rubocop.yml +0 -35
  7. data/.rubocop_todo.yml +0 -178
  8. data/.ruby-gemset +0 -1
  9. data/.ruby-version +0 -1
  10. data/.travis.yml +0 -24
  11. data/CHANGELOG_BETWEEN_TAGS.txt +0 -185
  12. data/CODE_OF_CONDUCT.md +0 -46
  13. data/CONTRIBUTING.md +0 -13
  14. data/Gemfile +0 -107
  15. data/LICENSE.txt +0 -22
  16. data/README.md +0 -100
  17. data/Rakefile +0 -20
  18. data/Vagrantfile +0 -250
  19. data/bin/pwn +0 -30
  20. data/bin/pwn_android_war_dialer +0 -151
  21. data/bin/pwn_autoinc_version +0 -58
  22. data/bin/pwn_aws_describe_resources +0 -717
  23. data/bin/pwn_bdba_groups +0 -107
  24. data/bin/pwn_bdba_scan +0 -198
  25. data/bin/pwn_burp_suite_pro_active_rest_api_scan +0 -167
  26. data/bin/pwn_burp_suite_pro_active_scan +0 -132
  27. data/bin/pwn_char_base64_encoding +0 -15
  28. data/bin/pwn_char_dec_encoding +0 -14
  29. data/bin/pwn_char_hex_escaped_encoding +0 -17
  30. data/bin/pwn_char_html_entity_encoding +0 -15
  31. data/bin/pwn_char_unicode_escaped_encoding +0 -14
  32. data/bin/pwn_char_url_encoding +0 -15
  33. data/bin/pwn_crt_sh +0 -73
  34. data/bin/pwn_defectdojo_engagement_create +0 -148
  35. data/bin/pwn_defectdojo_importscan +0 -130
  36. data/bin/pwn_defectdojo_reimportscan +0 -118
  37. data/bin/pwn_diff_csv_files_w_column_exclude +0 -171
  38. data/bin/pwn_domain_reversewhois +0 -76
  39. data/bin/pwn_fuzz_net_app_proto +0 -170
  40. data/bin/pwn_gqrx_scanner +0 -196
  41. data/bin/pwn_jenkins_create_job +0 -58
  42. data/bin/pwn_jenkins_create_view +0 -58
  43. data/bin/pwn_jenkins_install_plugin +0 -83
  44. data/bin/pwn_jenkins_thinBackup_aws_s3 +0 -113
  45. data/bin/pwn_jenkins_update_plugins +0 -77
  46. data/bin/pwn_jenkins_useradd +0 -76
  47. data/bin/pwn_mail_agent +0 -114
  48. data/bin/pwn_msf_postgres_login +0 -28
  49. data/bin/pwn_nessus_cloud_scan_crud +0 -334
  50. data/bin/pwn_nessus_cloud_vulnscan +0 -87
  51. data/bin/pwn_nexpose +0 -42
  52. data/bin/pwn_nmap_discover_tcp_udp +0 -353
  53. data/bin/pwn_openvas_vulnscan +0 -104
  54. data/bin/pwn_pastebin_sample_filter +0 -47
  55. data/bin/pwn_phone +0 -129
  56. data/bin/pwn_rdoc_to_jsonl +0 -83
  57. data/bin/pwn_sast +0 -183
  58. data/bin/pwn_serial_check_voicemail +0 -56
  59. data/bin/pwn_serial_msr206 +0 -168
  60. data/bin/pwn_serial_qualcomm_commands +0 -16
  61. data/bin/pwn_serial_son_micro_sm132_rfid +0 -188
  62. data/bin/pwn_shodan_graphql_introspection +0 -304
  63. data/bin/pwn_shodan_search +0 -90
  64. data/bin/pwn_simple_http_server +0 -44
  65. data/bin/pwn_web_cache_deception +0 -205
  66. data/bin/pwn_www_checkip +0 -77
  67. data/bin/pwn_www_uri_buster +0 -363
  68. data/bin/pwn_xss_dom_vectors +0 -149
  69. data/bin/pwn_zaproxy_active_rest_api_scan +0 -159
  70. data/bin/pwn_zaproxy_active_scan +0 -130
  71. data/build_pwn_gem.sh +0 -33
  72. data/documentation/PWN.png +0 -0
  73. data/documentation/PWN_Contributors_and_Users.png +0 -0
  74. data/documentation/fax-spectrogram.png +0 -0
  75. data/documentation/fax-waveform.png +0 -0
  76. data/documentation/frozen_string_literal_files_changed_from_false_to_true.txt +0 -54
  77. data/documentation/pwn_android_war_dialer_session.png +0 -0
  78. data/documentation/pwn_install.png +0 -0
  79. data/documentation/pwn_wallpaper.jpg +0 -0
  80. data/documentation/ringing-spectrogram.png +0 -0
  81. data/documentation/ringing-waveform.png +0 -0
  82. data/etc/systemd/msfrpcd.service +0 -12
  83. data/etc/systemd/openvas.service +0 -14
  84. data/etc/userland/aws/apache2/jenkins_443.conf +0 -90
  85. data/etc/userland/aws/apache2/jenkins_80.conf +0 -7
  86. data/etc/userland/aws/apache2/openvas_443.conf +0 -87
  87. data/etc/userland/aws/apache2/openvas_80.conf +0 -7
  88. data/etc/userland/aws/apache2/sast_443.conf +0 -87
  89. data/etc/userland/aws/apache2/sast_80.conf +0 -9
  90. data/etc/userland/aws/apache2/vagrant.yaml.EXAMPLE +0 -9
  91. data/etc/userland/aws/arachni/navigation-REST.instruct.EXAMPLE +0 -29
  92. data/etc/userland/aws/arachni/navigation.instruct.EXAMPLE +0 -3
  93. data/etc/userland/aws/burpsuite/navigation.instruct.EXAMPLE +0 -3
  94. data/etc/userland/aws/burpsuite/vagrant.yaml.EXAMPLE +0 -2
  95. data/etc/userland/aws/defectdojo/vagrant.yaml.EXAMPLE +0 -3
  96. data/etc/userland/aws/jenkins/inject_build_envs.sh +0 -15
  97. data/etc/userland/aws/jenkins/jenkins +0 -81
  98. data/etc/userland/aws/jenkins/jobs/pipeline-pwntemplate.xml +0 -298
  99. data/etc/userland/aws/jenkins/jobs/pipeline-selfupdate.xml +0 -462
  100. data/etc/userland/aws/jenkins/jobs/pwntemplate-DOMAIN-burpsuite.xml +0 -44
  101. data/etc/userland/aws/jenkins/jobs/pwntemplate-DOMAIN-owasp_zap.xml +0 -35
  102. data/etc/userland/aws/jenkins/jobs/pwntemplate-DOMAIN-ssllabs-scan.xml +0 -45
  103. data/etc/userland/aws/jenkins/jobs/pwntemplate-GITREPO_BRANCH-sast.xml +0 -71
  104. data/etc/userland/aws/jenkins/jobs/pwntemplate-NETWORKRANGE-nmap_discovery_scan_tcp_udp_65k.xml +0 -56
  105. data/etc/userland/aws/jenkins/jobs/pwntemplate-NETWORKRANGE-nmap_xml_results_searchsploit.xml +0 -59
  106. data/etc/userland/aws/jenkins/jobs/pwntemplate-NETWORKRANGE-openvas.xml +0 -45
  107. data/etc/userland/aws/jenkins/jobs/selfupdate-exploit-db.xml +0 -43
  108. data/etc/userland/aws/jenkins/jobs/selfupdate-gem.xml +0 -42
  109. data/etc/userland/aws/jenkins/jobs/selfupdate-jenkins_plugins.xml +0 -42
  110. data/etc/userland/aws/jenkins/jobs/selfupdate-metasploit.xml +0 -42
  111. data/etc/userland/aws/jenkins/jobs/selfupdate-nmap_all_live_hosts.xml +0 -42
  112. data/etc/userland/aws/jenkins/jobs/selfupdate-openvas_sync.xml +0 -42
  113. data/etc/userland/aws/jenkins/jobs/selfupdate-openvas_wrappers.xml +0 -42
  114. data/etc/userland/aws/jenkins/jobs/selfupdate-os.xml +0 -42
  115. data/etc/userland/aws/jenkins/jobs/selfupdate-pwn.xml +0 -42
  116. data/etc/userland/aws/jenkins/jobs/selfupdate-rvm.xml +0 -42
  117. data/etc/userland/aws/jenkins/jobs/selfupdate-ssllabs-scan.xml +0 -42
  118. data/etc/userland/aws/jenkins/jobs/selfupdate-wpscan.xml +0 -42
  119. data/etc/userland/aws/jenkins/jobs_userland/.gitkeep +0 -0
  120. data/etc/userland/aws/jenkins/log_parser_rules/arachni.rules +0 -5
  121. data/etc/userland/aws/jenkins/log_parser_rules/sast.rules +0 -2
  122. data/etc/userland/aws/jenkins/log_parser_rules/self_update.rules +0 -14
  123. data/etc/userland/aws/jenkins/log_parser_rules/ssllabs-scan.rules +0 -8
  124. data/etc/userland/aws/jenkins/log_parser_rules/system_maintenance.rules +0 -9
  125. data/etc/userland/aws/jenkins/log_parser_rules/wpscan.rules +0 -2
  126. data/etc/userland/aws/jenkins/vagrant.yaml.EXAMPLE +0 -8
  127. data/etc/userland/aws/letsencrypt/vagrant.yaml.EXAMPLE +0 -5
  128. data/etc/userland/aws/metasploit/vagrant.yaml.EXAMPLE +0 -4
  129. data/etc/userland/aws/nessus/vagrant.yaml.EXAMPLE +0 -15
  130. data/etc/userland/aws/openvas/vagrant.yaml.EXAMPLE +0 -2
  131. data/etc/userland/aws/owasp_zap/navigation.instruct.EXAMPLE +0 -3
  132. data/etc/userland/aws/postgres/vagrant.yaml.EXAMPLE +0 -2
  133. data/etc/userland/aws/recon-ng/vagrant.yaml.EXAMPLE +0 -52
  134. data/etc/userland/aws/vagrant.yaml.EXAMPLE +0 -35
  135. data/etc/userland/docker/apache2/jenkins_443.conf +0 -90
  136. data/etc/userland/docker/apache2/jenkins_80.conf +0 -7
  137. data/etc/userland/docker/apache2/openvas_443.conf +0 -87
  138. data/etc/userland/docker/apache2/openvas_80.conf +0 -7
  139. data/etc/userland/docker/apache2/sast_443.conf +0 -87
  140. data/etc/userland/docker/apache2/sast_80.conf +0 -9
  141. data/etc/userland/docker/apache2/vagrant.yaml.EXAMPLE +0 -9
  142. data/etc/userland/docker/arachni/navigation-REST.instruct.EXAMPLE +0 -29
  143. data/etc/userland/docker/arachni/navigation.instruct.EXAMPLE +0 -3
  144. data/etc/userland/docker/burpsuite/navigation.instruct.EXAMPLE +0 -3
  145. data/etc/userland/docker/burpsuite/vagrant.yaml.EXAMPLE +0 -2
  146. data/etc/userland/docker/defectdojo/vagrant.yaml.EXAMPLE +0 -3
  147. data/etc/userland/docker/jenkins/inject_build_envs.sh +0 -15
  148. data/etc/userland/docker/jenkins/jenkins +0 -81
  149. data/etc/userland/docker/jenkins/jobs/pipeline-pwntemplate.xml +0 -298
  150. data/etc/userland/docker/jenkins/jobs/pipeline-selfupdate.xml +0 -462
  151. data/etc/userland/docker/jenkins/jobs/pwntemplate-DOMAIN-burpsuite.xml +0 -44
  152. data/etc/userland/docker/jenkins/jobs/pwntemplate-DOMAIN-owasp_zap.xml +0 -35
  153. data/etc/userland/docker/jenkins/jobs/pwntemplate-DOMAIN-ssllabs-scan.xml +0 -45
  154. data/etc/userland/docker/jenkins/jobs/pwntemplate-GITREPO_BRANCH-sast.xml +0 -71
  155. data/etc/userland/docker/jenkins/jobs/pwntemplate-NETWORKRANGE-nmap_discovery_scan_tcp_udp_65k.xml +0 -56
  156. data/etc/userland/docker/jenkins/jobs/pwntemplate-NETWORKRANGE-nmap_xml_results_searchsploit.xml +0 -59
  157. data/etc/userland/docker/jenkins/jobs/pwntemplate-NETWORKRANGE-openvas.xml +0 -45
  158. data/etc/userland/docker/jenkins/jobs/selfupdate-exploit-db.xml +0 -43
  159. data/etc/userland/docker/jenkins/jobs/selfupdate-gem.xml +0 -42
  160. data/etc/userland/docker/jenkins/jobs/selfupdate-jenkins_plugins.xml +0 -42
  161. data/etc/userland/docker/jenkins/jobs/selfupdate-metasploit.xml +0 -42
  162. data/etc/userland/docker/jenkins/jobs/selfupdate-nmap_all_live_hosts.xml +0 -42
  163. data/etc/userland/docker/jenkins/jobs/selfupdate-openvas_sync.xml +0 -42
  164. data/etc/userland/docker/jenkins/jobs/selfupdate-openvas_wrappers.xml +0 -42
  165. data/etc/userland/docker/jenkins/jobs/selfupdate-os.xml +0 -42
  166. data/etc/userland/docker/jenkins/jobs/selfupdate-pwn.xml +0 -42
  167. data/etc/userland/docker/jenkins/jobs/selfupdate-rvm.xml +0 -42
  168. data/etc/userland/docker/jenkins/jobs/selfupdate-ssllabs-scan.xml +0 -42
  169. data/etc/userland/docker/jenkins/jobs/selfupdate-wpscan.xml +0 -42
  170. data/etc/userland/docker/jenkins/jobs_userland/.gitkeep +0 -0
  171. data/etc/userland/docker/jenkins/log_parser_rules/arachni.rules +0 -5
  172. data/etc/userland/docker/jenkins/log_parser_rules/sast.rules +0 -2
  173. data/etc/userland/docker/jenkins/log_parser_rules/self_update.rules +0 -14
  174. data/etc/userland/docker/jenkins/log_parser_rules/ssllabs-scan.rules +0 -8
  175. data/etc/userland/docker/jenkins/log_parser_rules/system_maintenance.rules +0 -9
  176. data/etc/userland/docker/jenkins/log_parser_rules/wpscan.rules +0 -2
  177. data/etc/userland/docker/jenkins/vagrant.yaml.EXAMPLE +0 -8
  178. data/etc/userland/docker/letsencrypt/vagrant.yaml.EXAMPLE +0 -5
  179. data/etc/userland/docker/metasploit/vagrant.yaml.EXAMPLE +0 -4
  180. data/etc/userland/docker/nessus/vagrant.yaml.EXAMPLE +0 -15
  181. data/etc/userland/docker/openvas/vagrant.yaml.EXAMPLE +0 -2
  182. data/etc/userland/docker/owasp_zap/navigation.instruct.EXAMPLE +0 -3
  183. data/etc/userland/docker/postgres/vagrant.yaml.EXAMPLE +0 -2
  184. data/etc/userland/docker/recon-ng/vagrant.yaml.EXAMPLE +0 -52
  185. data/etc/userland/qemu/apache2/jenkins_443.conf +0 -90
  186. data/etc/userland/qemu/apache2/jenkins_80.conf +0 -7
  187. data/etc/userland/qemu/apache2/openvas_443.conf +0 -87
  188. data/etc/userland/qemu/apache2/openvas_80.conf +0 -7
  189. data/etc/userland/qemu/apache2/sast_443.conf +0 -87
  190. data/etc/userland/qemu/apache2/sast_80.conf +0 -9
  191. data/etc/userland/qemu/apache2/vagrant.yaml.EXAMPLE +0 -9
  192. data/etc/userland/qemu/arachni/navigation-REST.instruct.EXAMPLE +0 -29
  193. data/etc/userland/qemu/arachni/navigation.instruct.EXAMPLE +0 -3
  194. data/etc/userland/qemu/burpsuite/navigation.instruct.EXAMPLE +0 -3
  195. data/etc/userland/qemu/burpsuite/vagrant.yaml.EXAMPLE +0 -2
  196. data/etc/userland/qemu/defectdojo/vagrant.yaml.EXAMPLE +0 -3
  197. data/etc/userland/qemu/jenkins/inject_build_envs.sh +0 -15
  198. data/etc/userland/qemu/jenkins/jenkins +0 -81
  199. data/etc/userland/qemu/jenkins/jobs/pipeline-pwntemplate.xml +0 -298
  200. data/etc/userland/qemu/jenkins/jobs/pipeline-selfupdate.xml +0 -462
  201. data/etc/userland/qemu/jenkins/jobs/pwntemplate-DOMAIN-burpsuite.xml +0 -44
  202. data/etc/userland/qemu/jenkins/jobs/pwntemplate-DOMAIN-owasp_zap.xml +0 -35
  203. data/etc/userland/qemu/jenkins/jobs/pwntemplate-DOMAIN-ssllabs-scan.xml +0 -45
  204. data/etc/userland/qemu/jenkins/jobs/pwntemplate-GITREPO_BRANCH-sast.xml +0 -71
  205. data/etc/userland/qemu/jenkins/jobs/pwntemplate-NETWORKRANGE-nmap_discovery_scan_tcp_udp_65k.xml +0 -56
  206. data/etc/userland/qemu/jenkins/jobs/pwntemplate-NETWORKRANGE-nmap_xml_results_searchsploit.xml +0 -59
  207. data/etc/userland/qemu/jenkins/jobs/pwntemplate-NETWORKRANGE-openvas.xml +0 -45
  208. data/etc/userland/qemu/jenkins/jobs/selfupdate-exploit-db.xml +0 -43
  209. data/etc/userland/qemu/jenkins/jobs/selfupdate-gem.xml +0 -42
  210. data/etc/userland/qemu/jenkins/jobs/selfupdate-jenkins_plugins.xml +0 -42
  211. data/etc/userland/qemu/jenkins/jobs/selfupdate-metasploit.xml +0 -42
  212. data/etc/userland/qemu/jenkins/jobs/selfupdate-nmap_all_live_hosts.xml +0 -42
  213. data/etc/userland/qemu/jenkins/jobs/selfupdate-openvas_sync.xml +0 -42
  214. data/etc/userland/qemu/jenkins/jobs/selfupdate-openvas_wrappers.xml +0 -42
  215. data/etc/userland/qemu/jenkins/jobs/selfupdate-os.xml +0 -42
  216. data/etc/userland/qemu/jenkins/jobs/selfupdate-pwn.xml +0 -42
  217. data/etc/userland/qemu/jenkins/jobs/selfupdate-rvm.xml +0 -42
  218. data/etc/userland/qemu/jenkins/jobs/selfupdate-ssllabs-scan.xml +0 -42
  219. data/etc/userland/qemu/jenkins/jobs/selfupdate-wpscan.xml +0 -42
  220. data/etc/userland/qemu/jenkins/jobs_userland/.gitkeep +0 -0
  221. data/etc/userland/qemu/jenkins/log_parser_rules/arachni.rules +0 -5
  222. data/etc/userland/qemu/jenkins/log_parser_rules/sast.rules +0 -2
  223. data/etc/userland/qemu/jenkins/log_parser_rules/self_update.rules +0 -14
  224. data/etc/userland/qemu/jenkins/log_parser_rules/ssllabs-scan.rules +0 -8
  225. data/etc/userland/qemu/jenkins/log_parser_rules/system_maintenance.rules +0 -9
  226. data/etc/userland/qemu/jenkins/log_parser_rules/wpscan.rules +0 -2
  227. data/etc/userland/qemu/jenkins/vagrant.yaml.EXAMPLE +0 -8
  228. data/etc/userland/qemu/letsencrypt/vagrant.yaml.EXAMPLE +0 -5
  229. data/etc/userland/qemu/metasploit/vagrant.yaml.EXAMPLE +0 -4
  230. data/etc/userland/qemu/nessus/vagrant.yaml.EXAMPLE +0 -15
  231. data/etc/userland/qemu/openvas/vagrant.yaml.EXAMPLE +0 -2
  232. data/etc/userland/qemu/owasp_zap/navigation.instruct.EXAMPLE +0 -3
  233. data/etc/userland/qemu/postgres/vagrant.yaml.EXAMPLE +0 -2
  234. data/etc/userland/qemu/recon-ng/vagrant.yaml.EXAMPLE +0 -52
  235. data/etc/userland/ruby-gem/apache2/jenkins_443.conf +0 -90
  236. data/etc/userland/ruby-gem/apache2/jenkins_80.conf +0 -7
  237. data/etc/userland/ruby-gem/apache2/openvas_443.conf +0 -87
  238. data/etc/userland/ruby-gem/apache2/openvas_80.conf +0 -7
  239. data/etc/userland/ruby-gem/apache2/sast_443.conf +0 -87
  240. data/etc/userland/ruby-gem/apache2/sast_80.conf +0 -9
  241. data/etc/userland/ruby-gem/apache2/vagrant.yaml.EXAMPLE +0 -9
  242. data/etc/userland/ruby-gem/arachni/navigation-REST.instruct.EXAMPLE +0 -29
  243. data/etc/userland/ruby-gem/arachni/navigation.instruct.EXAMPLE +0 -3
  244. data/etc/userland/ruby-gem/burpsuite/navigation.instruct.EXAMPLE +0 -3
  245. data/etc/userland/ruby-gem/burpsuite/vagrant.yaml.EXAMPLE +0 -2
  246. data/etc/userland/ruby-gem/defectdojo/vagrant.yaml.EXAMPLE +0 -3
  247. data/etc/userland/ruby-gem/jenkins/inject_build_envs.sh +0 -15
  248. data/etc/userland/ruby-gem/jenkins/jenkins +0 -81
  249. data/etc/userland/ruby-gem/jenkins/jobs/pipeline-pwntemplate.xml +0 -298
  250. data/etc/userland/ruby-gem/jenkins/jobs/pipeline-selfupdate.xml +0 -462
  251. data/etc/userland/ruby-gem/jenkins/jobs/pwntemplate-DOMAIN-burpsuite.xml +0 -44
  252. data/etc/userland/ruby-gem/jenkins/jobs/pwntemplate-DOMAIN-owasp_zap.xml +0 -35
  253. data/etc/userland/ruby-gem/jenkins/jobs/pwntemplate-DOMAIN-ssllabs-scan.xml +0 -45
  254. data/etc/userland/ruby-gem/jenkins/jobs/pwntemplate-GITREPO_BRANCH-sast.xml +0 -71
  255. data/etc/userland/ruby-gem/jenkins/jobs/pwntemplate-NETWORKRANGE-nmap_discovery_scan_tcp_udp_65k.xml +0 -56
  256. data/etc/userland/ruby-gem/jenkins/jobs/pwntemplate-NETWORKRANGE-nmap_xml_results_searchsploit.xml +0 -59
  257. data/etc/userland/ruby-gem/jenkins/jobs/pwntemplate-NETWORKRANGE-openvas.xml +0 -45
  258. data/etc/userland/ruby-gem/jenkins/jobs/selfupdate-exploit-db.xml +0 -43
  259. data/etc/userland/ruby-gem/jenkins/jobs/selfupdate-gem.xml +0 -42
  260. data/etc/userland/ruby-gem/jenkins/jobs/selfupdate-jenkins_plugins.xml +0 -42
  261. data/etc/userland/ruby-gem/jenkins/jobs/selfupdate-metasploit.xml +0 -42
  262. data/etc/userland/ruby-gem/jenkins/jobs/selfupdate-nmap_all_live_hosts.xml +0 -42
  263. data/etc/userland/ruby-gem/jenkins/jobs/selfupdate-openvas_sync.xml +0 -42
  264. data/etc/userland/ruby-gem/jenkins/jobs/selfupdate-openvas_wrappers.xml +0 -42
  265. data/etc/userland/ruby-gem/jenkins/jobs/selfupdate-os.xml +0 -42
  266. data/etc/userland/ruby-gem/jenkins/jobs/selfupdate-pwn.xml +0 -42
  267. data/etc/userland/ruby-gem/jenkins/jobs/selfupdate-rvm.xml +0 -42
  268. data/etc/userland/ruby-gem/jenkins/jobs/selfupdate-ssllabs-scan.xml +0 -42
  269. data/etc/userland/ruby-gem/jenkins/jobs/selfupdate-wpscan.xml +0 -42
  270. data/etc/userland/ruby-gem/jenkins/jobs_userland/.gitkeep +0 -0
  271. data/etc/userland/ruby-gem/jenkins/log_parser_rules/arachni.rules +0 -5
  272. data/etc/userland/ruby-gem/jenkins/log_parser_rules/sast.rules +0 -2
  273. data/etc/userland/ruby-gem/jenkins/log_parser_rules/self_update.rules +0 -14
  274. data/etc/userland/ruby-gem/jenkins/log_parser_rules/ssllabs-scan.rules +0 -8
  275. data/etc/userland/ruby-gem/jenkins/log_parser_rules/system_maintenance.rules +0 -9
  276. data/etc/userland/ruby-gem/jenkins/log_parser_rules/wpscan.rules +0 -2
  277. data/etc/userland/ruby-gem/jenkins/vagrant.yaml.EXAMPLE +0 -8
  278. data/etc/userland/ruby-gem/letsencrypt/vagrant.yaml.EXAMPLE +0 -5
  279. data/etc/userland/ruby-gem/metasploit/vagrant.yaml.EXAMPLE +0 -4
  280. data/etc/userland/ruby-gem/nessus/vagrant.yaml.EXAMPLE +0 -15
  281. data/etc/userland/ruby-gem/openvas/vagrant.yaml.EXAMPLE +0 -2
  282. data/etc/userland/ruby-gem/owasp_zap/navigation.instruct.EXAMPLE +0 -3
  283. data/etc/userland/ruby-gem/postgres/vagrant.yaml.EXAMPLE +0 -2
  284. data/etc/userland/ruby-gem/recon-ng/vagrant.yaml.EXAMPLE +0 -52
  285. data/etc/userland/virtualbox/apache2/jenkins_443.conf +0 -90
  286. data/etc/userland/virtualbox/apache2/jenkins_80.conf +0 -7
  287. data/etc/userland/virtualbox/apache2/openvas_443.conf +0 -87
  288. data/etc/userland/virtualbox/apache2/openvas_80.conf +0 -7
  289. data/etc/userland/virtualbox/apache2/sast_443.conf +0 -87
  290. data/etc/userland/virtualbox/apache2/sast_80.conf +0 -9
  291. data/etc/userland/virtualbox/apache2/vagrant.yaml.EXAMPLE +0 -9
  292. data/etc/userland/virtualbox/arachni/navigation-REST.instruct.EXAMPLE +0 -29
  293. data/etc/userland/virtualbox/arachni/navigation.instruct.EXAMPLE +0 -3
  294. data/etc/userland/virtualbox/burpsuite/navigation.instruct.EXAMPLE +0 -3
  295. data/etc/userland/virtualbox/burpsuite/vagrant.yaml.EXAMPLE +0 -2
  296. data/etc/userland/virtualbox/defectdojo/vagrant.yaml.EXAMPLE +0 -3
  297. data/etc/userland/virtualbox/jenkins/inject_build_envs.sh +0 -15
  298. data/etc/userland/virtualbox/jenkins/jenkins +0 -81
  299. data/etc/userland/virtualbox/jenkins/jobs/pipeline-pwntemplate.xml +0 -298
  300. data/etc/userland/virtualbox/jenkins/jobs/pipeline-selfupdate.xml +0 -462
  301. data/etc/userland/virtualbox/jenkins/jobs/pwntemplate-DOMAIN-burpsuite.xml +0 -44
  302. data/etc/userland/virtualbox/jenkins/jobs/pwntemplate-DOMAIN-owasp_zap.xml +0 -35
  303. data/etc/userland/virtualbox/jenkins/jobs/pwntemplate-DOMAIN-ssllabs-scan.xml +0 -45
  304. data/etc/userland/virtualbox/jenkins/jobs/pwntemplate-GITREPO_BRANCH-sast.xml +0 -71
  305. data/etc/userland/virtualbox/jenkins/jobs/pwntemplate-NETWORKRANGE-nmap_discovery_scan_tcp_udp_65k.xml +0 -56
  306. data/etc/userland/virtualbox/jenkins/jobs/pwntemplate-NETWORKRANGE-nmap_xml_results_searchsploit.xml +0 -59
  307. data/etc/userland/virtualbox/jenkins/jobs/pwntemplate-NETWORKRANGE-openvas.xml +0 -45
  308. data/etc/userland/virtualbox/jenkins/jobs/selfupdate-exploit-db.xml +0 -43
  309. data/etc/userland/virtualbox/jenkins/jobs/selfupdate-gem.xml +0 -42
  310. data/etc/userland/virtualbox/jenkins/jobs/selfupdate-jenkins_plugins.xml +0 -42
  311. data/etc/userland/virtualbox/jenkins/jobs/selfupdate-metasploit.xml +0 -42
  312. data/etc/userland/virtualbox/jenkins/jobs/selfupdate-nmap_all_live_hosts.xml +0 -42
  313. data/etc/userland/virtualbox/jenkins/jobs/selfupdate-openvas_sync.xml +0 -42
  314. data/etc/userland/virtualbox/jenkins/jobs/selfupdate-openvas_wrappers.xml +0 -42
  315. data/etc/userland/virtualbox/jenkins/jobs/selfupdate-os.xml +0 -42
  316. data/etc/userland/virtualbox/jenkins/jobs/selfupdate-pwn.xml +0 -42
  317. data/etc/userland/virtualbox/jenkins/jobs/selfupdate-rvm.xml +0 -42
  318. data/etc/userland/virtualbox/jenkins/jobs/selfupdate-ssllabs-scan.xml +0 -42
  319. data/etc/userland/virtualbox/jenkins/jobs/selfupdate-wpscan.xml +0 -42
  320. data/etc/userland/virtualbox/jenkins/jobs_userland/.gitkeep +0 -0
  321. data/etc/userland/virtualbox/jenkins/log_parser_rules/arachni.rules +0 -5
  322. data/etc/userland/virtualbox/jenkins/log_parser_rules/sast.rules +0 -2
  323. data/etc/userland/virtualbox/jenkins/log_parser_rules/self_update.rules +0 -14
  324. data/etc/userland/virtualbox/jenkins/log_parser_rules/ssllabs-scan.rules +0 -8
  325. data/etc/userland/virtualbox/jenkins/log_parser_rules/system_maintenance.rules +0 -9
  326. data/etc/userland/virtualbox/jenkins/log_parser_rules/wpscan.rules +0 -2
  327. data/etc/userland/virtualbox/jenkins/vagrant.yaml.EXAMPLE +0 -8
  328. data/etc/userland/virtualbox/letsencrypt/vagrant.yaml.EXAMPLE +0 -5
  329. data/etc/userland/virtualbox/metasploit/vagrant.yaml.EXAMPLE +0 -4
  330. data/etc/userland/virtualbox/nessus/vagrant.yaml.EXAMPLE +0 -15
  331. data/etc/userland/virtualbox/openvas/vagrant.yaml.EXAMPLE +0 -2
  332. data/etc/userland/virtualbox/owasp_zap/navigation.instruct.EXAMPLE +0 -3
  333. data/etc/userland/virtualbox/postgres/vagrant.yaml.EXAMPLE +0 -2
  334. data/etc/userland/virtualbox/recon-ng/vagrant.yaml.EXAMPLE +0 -52
  335. data/etc/userland/virtualbox/vagrant.yaml.EXAMPLE +0 -4
  336. data/etc/userland/vmware/apache2/jenkins_443.conf +0 -90
  337. data/etc/userland/vmware/apache2/jenkins_80.conf +0 -7
  338. data/etc/userland/vmware/apache2/openvas_443.conf +0 -87
  339. data/etc/userland/vmware/apache2/openvas_80.conf +0 -7
  340. data/etc/userland/vmware/apache2/sast_443.conf +0 -87
  341. data/etc/userland/vmware/apache2/sast_80.conf +0 -9
  342. data/etc/userland/vmware/apache2/vagrant.yaml.EXAMPLE +0 -9
  343. data/etc/userland/vmware/arachni/navigation-REST.instruct.EXAMPLE +0 -29
  344. data/etc/userland/vmware/arachni/navigation.instruct.EXAMPLE +0 -3
  345. data/etc/userland/vmware/burpsuite/navigation.instruct.EXAMPLE +0 -3
  346. data/etc/userland/vmware/burpsuite/vagrant.yaml.EXAMPLE +0 -2
  347. data/etc/userland/vmware/defectdojo/vagrant.yaml.EXAMPLE +0 -3
  348. data/etc/userland/vmware/jenkins/inject_build_envs.sh +0 -15
  349. data/etc/userland/vmware/jenkins/jenkins +0 -81
  350. data/etc/userland/vmware/jenkins/jobs/pipeline-pwntemplate.xml +0 -298
  351. data/etc/userland/vmware/jenkins/jobs/pipeline-selfupdate.xml +0 -462
  352. data/etc/userland/vmware/jenkins/jobs/pwntemplate-DOMAIN-burpsuite.xml +0 -44
  353. data/etc/userland/vmware/jenkins/jobs/pwntemplate-DOMAIN-owasp_zap.xml +0 -35
  354. data/etc/userland/vmware/jenkins/jobs/pwntemplate-DOMAIN-ssllabs-scan.xml +0 -45
  355. data/etc/userland/vmware/jenkins/jobs/pwntemplate-GITREPO_BRANCH-sast.xml +0 -71
  356. data/etc/userland/vmware/jenkins/jobs/pwntemplate-NETWORKRANGE-nmap_discovery_scan_tcp_udp_65k.xml +0 -56
  357. data/etc/userland/vmware/jenkins/jobs/pwntemplate-NETWORKRANGE-nmap_xml_results_searchsploit.xml +0 -59
  358. data/etc/userland/vmware/jenkins/jobs/pwntemplate-NETWORKRANGE-openvas.xml +0 -45
  359. data/etc/userland/vmware/jenkins/jobs/selfupdate-exploit-db.xml +0 -43
  360. data/etc/userland/vmware/jenkins/jobs/selfupdate-gem.xml +0 -42
  361. data/etc/userland/vmware/jenkins/jobs/selfupdate-jenkins_plugins.xml +0 -42
  362. data/etc/userland/vmware/jenkins/jobs/selfupdate-metasploit.xml +0 -42
  363. data/etc/userland/vmware/jenkins/jobs/selfupdate-nmap_all_live_hosts.xml +0 -42
  364. data/etc/userland/vmware/jenkins/jobs/selfupdate-openvas_sync.xml +0 -42
  365. data/etc/userland/vmware/jenkins/jobs/selfupdate-openvas_wrappers.xml +0 -42
  366. data/etc/userland/vmware/jenkins/jobs/selfupdate-os.xml +0 -42
  367. data/etc/userland/vmware/jenkins/jobs/selfupdate-pwn.xml +0 -42
  368. data/etc/userland/vmware/jenkins/jobs/selfupdate-rvm.xml +0 -42
  369. data/etc/userland/vmware/jenkins/jobs/selfupdate-ssllabs-scan.xml +0 -42
  370. data/etc/userland/vmware/jenkins/jobs/selfupdate-wpscan.xml +0 -42
  371. data/etc/userland/vmware/jenkins/jobs_userland/.gitkeep +0 -0
  372. data/etc/userland/vmware/jenkins/log_parser_rules/arachni.rules +0 -5
  373. data/etc/userland/vmware/jenkins/log_parser_rules/sast.rules +0 -2
  374. data/etc/userland/vmware/jenkins/log_parser_rules/self_update.rules +0 -14
  375. data/etc/userland/vmware/jenkins/log_parser_rules/ssllabs-scan.rules +0 -8
  376. data/etc/userland/vmware/jenkins/log_parser_rules/system_maintenance.rules +0 -9
  377. data/etc/userland/vmware/jenkins/log_parser_rules/wpscan.rules +0 -2
  378. data/etc/userland/vmware/jenkins/vagrant.yaml.EXAMPLE +0 -8
  379. data/etc/userland/vmware/letsencrypt/vagrant.yaml.EXAMPLE +0 -5
  380. data/etc/userland/vmware/metasploit/vagrant.yaml.EXAMPLE +0 -4
  381. data/etc/userland/vmware/nessus/vagrant.yaml.EXAMPLE +0 -15
  382. data/etc/userland/vmware/openvas/vagrant.yaml.EXAMPLE +0 -2
  383. data/etc/userland/vmware/owasp_zap/navigation.instruct.EXAMPLE +0 -3
  384. data/etc/userland/vmware/postgres/vagrant.yaml.EXAMPLE +0 -2
  385. data/etc/userland/vmware/recon-ng/vagrant.yaml.EXAMPLE +0 -52
  386. data/etc/userland/vmware/vagrant.yaml.EXAMPLE +0 -5
  387. data/find_latest_gem_versions_per_Gemfile.sh +0 -19
  388. data/git_commit_test_reinit_gem.sh +0 -57
  389. data/install.sh +0 -177
  390. data/lib/pwn/ai/grok.rb +0 -258
  391. data/lib/pwn/ai/introspection.rb +0 -100
  392. data/lib/pwn/ai/ollama.rb +0 -260
  393. data/lib/pwn/ai/open_ai.rb +0 -807
  394. data/lib/pwn/ai.rb +0 -19
  395. data/lib/pwn/aws/acm.rb +0 -92
  396. data/lib/pwn/aws/api_gateway.rb +0 -92
  397. data/lib/pwn/aws/app_stream.rb +0 -92
  398. data/lib/pwn/aws/application_auto_scaling.rb +0 -92
  399. data/lib/pwn/aws/application_discovery_service.rb +0 -92
  400. data/lib/pwn/aws/auto_scaling.rb +0 -92
  401. data/lib/pwn/aws/batch.rb +0 -92
  402. data/lib/pwn/aws/budgets.rb +0 -92
  403. data/lib/pwn/aws/cloud_formation.rb +0 -92
  404. data/lib/pwn/aws/cloud_front.rb +0 -92
  405. data/lib/pwn/aws/cloud_hsm.rb +0 -92
  406. data/lib/pwn/aws/cloud_search.rb +0 -92
  407. data/lib/pwn/aws/cloud_search_domain.rb +0 -92
  408. data/lib/pwn/aws/cloud_trail.rb +0 -92
  409. data/lib/pwn/aws/cloud_watch.rb +0 -92
  410. data/lib/pwn/aws/cloud_watch_events.rb +0 -92
  411. data/lib/pwn/aws/cloud_watch_logs.rb +0 -92
  412. data/lib/pwn/aws/code_build.rb +0 -92
  413. data/lib/pwn/aws/code_commit.rb +0 -92
  414. data/lib/pwn/aws/code_deploy.rb +0 -92
  415. data/lib/pwn/aws/code_pipeline.rb +0 -92
  416. data/lib/pwn/aws/cognito_identity.rb +0 -92
  417. data/lib/pwn/aws/cognito_identity_provider.rb +0 -92
  418. data/lib/pwn/aws/cognito_sync.rb +0 -92
  419. data/lib/pwn/aws/config_service.rb +0 -92
  420. data/lib/pwn/aws/data_pipleline.rb +0 -92
  421. data/lib/pwn/aws/database_migration_service.rb +0 -92
  422. data/lib/pwn/aws/device_farm.rb +0 -92
  423. data/lib/pwn/aws/direct_connect.rb +0 -92
  424. data/lib/pwn/aws/directory_service.rb +0 -92
  425. data/lib/pwn/aws/dynamo_db.rb +0 -92
  426. data/lib/pwn/aws/dynamo_db_streams.rb +0 -92
  427. data/lib/pwn/aws/ec2.rb +0 -92
  428. data/lib/pwn/aws/ecr.rb +0 -92
  429. data/lib/pwn/aws/ecs.rb +0 -92
  430. data/lib/pwn/aws/efs.rb +0 -92
  431. data/lib/pwn/aws/elasti_cache.rb +0 -92
  432. data/lib/pwn/aws/elastic_beanstalk.rb +0 -89
  433. data/lib/pwn/aws/elastic_load_balancing.rb +0 -92
  434. data/lib/pwn/aws/elastic_load_balancing_v2.rb +0 -92
  435. data/lib/pwn/aws/elastic_transcoder.rb +0 -92
  436. data/lib/pwn/aws/elasticsearch_service.rb +0 -92
  437. data/lib/pwn/aws/emr.rb +0 -92
  438. data/lib/pwn/aws/firehose.rb +0 -92
  439. data/lib/pwn/aws/game_lift.rb +0 -92
  440. data/lib/pwn/aws/glacier.rb +0 -92
  441. data/lib/pwn/aws/health.rb +0 -92
  442. data/lib/pwn/aws/iam.rb +0 -200
  443. data/lib/pwn/aws/import_export.rb +0 -92
  444. data/lib/pwn/aws/inspector.rb +0 -92
  445. data/lib/pwn/aws/iot.rb +0 -92
  446. data/lib/pwn/aws/iot_data_plane.rb +0 -92
  447. data/lib/pwn/aws/kinesis.rb +0 -92
  448. data/lib/pwn/aws/kinesis_analytics.rb +0 -92
  449. data/lib/pwn/aws/kms.rb +0 -92
  450. data/lib/pwn/aws/lambda.rb +0 -92
  451. data/lib/pwn/aws/lambda_preview.rb +0 -92
  452. data/lib/pwn/aws/lex.rb +0 -92
  453. data/lib/pwn/aws/lightsail.rb +0 -92
  454. data/lib/pwn/aws/machine_learning.rb +0 -92
  455. data/lib/pwn/aws/marketplace_commerce_analytics.rb +0 -92
  456. data/lib/pwn/aws/marketplace_metering.rb +0 -92
  457. data/lib/pwn/aws/ops_works.rb +0 -92
  458. data/lib/pwn/aws/ops_works_cm.rb +0 -92
  459. data/lib/pwn/aws/pinpoint.rb +0 -92
  460. data/lib/pwn/aws/polly.rb +0 -92
  461. data/lib/pwn/aws/rds.rb +0 -92
  462. data/lib/pwn/aws/redshift.rb +0 -92
  463. data/lib/pwn/aws/rekognition.rb +0 -92
  464. data/lib/pwn/aws/route53.rb +0 -92
  465. data/lib/pwn/aws/route53_domains.rb +0 -92
  466. data/lib/pwn/aws/s3.rb +0 -92
  467. data/lib/pwn/aws/service_catalog.rb +0 -92
  468. data/lib/pwn/aws/ses.rb +0 -92
  469. data/lib/pwn/aws/shield.rb +0 -92
  470. data/lib/pwn/aws/simple_db.rb +0 -92
  471. data/lib/pwn/aws/sms.rb +0 -92
  472. data/lib/pwn/aws/snowball.rb +0 -92
  473. data/lib/pwn/aws/sns.rb +0 -92
  474. data/lib/pwn/aws/sqs.rb +0 -92
  475. data/lib/pwn/aws/ssm.rb +0 -92
  476. data/lib/pwn/aws/states.rb +0 -92
  477. data/lib/pwn/aws/storage_gateway.rb +0 -92
  478. data/lib/pwn/aws/sts.rb +0 -63
  479. data/lib/pwn/aws/support.rb +0 -92
  480. data/lib/pwn/aws/swf.rb +0 -92
  481. data/lib/pwn/aws/waf.rb +0 -92
  482. data/lib/pwn/aws/waf_regional.rb +0 -92
  483. data/lib/pwn/aws/workspaces.rb +0 -92
  484. data/lib/pwn/aws/x_ray.rb +0 -92
  485. data/lib/pwn/aws.rb +0 -105
  486. data/lib/pwn/banner/anon.rb +0 -50
  487. data/lib/pwn/banner/bubble.rb +0 -42
  488. data/lib/pwn/banner/cheshire.rb +0 -58
  489. data/lib/pwn/banner/code_cave.rb +0 -1035
  490. data/lib/pwn/banner/dont_panic.rb +0 -52
  491. data/lib/pwn/banner/f_society.rb +0 -60
  492. data/lib/pwn/banner/fork_bomb.rb +0 -39
  493. data/lib/pwn/banner/jmp_esp.rb +0 -44
  494. data/lib/pwn/banner/matrix.rb +0 -206
  495. data/lib/pwn/banner/ninja.rb +0 -55
  496. data/lib/pwn/banner/off_the_air.rb +0 -73
  497. data/lib/pwn/banner/pirate.rb +0 -62
  498. data/lib/pwn/banner/radare2.rb +0 -41
  499. data/lib/pwn/banner/radare2_ai.rb +0 -116
  500. data/lib/pwn/banner/white_rabbit.rb +0 -55
  501. data/lib/pwn/banner.rb +0 -108
  502. data/lib/pwn/blockchain/btc.rb +0 -282
  503. data/lib/pwn/blockchain/eth.rb +0 -160
  504. data/lib/pwn/blockchain.rb +0 -17
  505. data/lib/pwn/config.rb +0 -304
  506. data/lib/pwn/driver.rb +0 -85
  507. data/lib/pwn/ffi/stdio.rb +0 -41
  508. data/lib/pwn/ffi.rb +0 -16
  509. data/lib/pwn/plugins/android.rb +0 -1617
  510. data/lib/pwn/plugins/assembly.rb +0 -275
  511. data/lib/pwn/plugins/authentication_helper.rb +0 -86
  512. data/lib/pwn/plugins/baresip.rb +0 -708
  513. data/lib/pwn/plugins/basic_auth.rb +0 -63
  514. data/lib/pwn/plugins/beef.rb +0 -312
  515. data/lib/pwn/plugins/black_duck_binary_analysis.rb +0 -790
  516. data/lib/pwn/plugins/burp_suite.rb +0 -2208
  517. data/lib/pwn/plugins/bus_pirate.rb +0 -147
  518. data/lib/pwn/plugins/char.rb +0 -474
  519. data/lib/pwn/plugins/credit_card.rb +0 -105
  520. data/lib/pwn/plugins/dao_ldap.rb +0 -131
  521. data/lib/pwn/plugins/dao_mongo.rb +0 -96
  522. data/lib/pwn/plugins/dao_postgres.rb +0 -224
  523. data/lib/pwn/plugins/dao_sqlite3.rb +0 -125
  524. data/lib/pwn/plugins/defect_dojo.rb +0 -841
  525. data/lib/pwn/plugins/detect_os.rb +0 -71
  526. data/lib/pwn/plugins/ein.rb +0 -141
  527. data/lib/pwn/plugins/file_fu.rb +0 -93
  528. data/lib/pwn/plugins/fuzz.rb +0 -204
  529. data/lib/pwn/plugins/git.rb +0 -159
  530. data/lib/pwn/plugins/github.rb +0 -137
  531. data/lib/pwn/plugins/hacker_one.rb +0 -154
  532. data/lib/pwn/plugins/hunter.rb +0 -160
  533. data/lib/pwn/plugins/ip_info.rb +0 -264
  534. data/lib/pwn/plugins/irc.rb +0 -312
  535. data/lib/pwn/plugins/jenkins.rb +0 -537
  536. data/lib/pwn/plugins/jira_data_center.rb +0 -676
  537. data/lib/pwn/plugins/json_pathify.rb +0 -46
  538. data/lib/pwn/plugins/log.rb +0 -123
  539. data/lib/pwn/plugins/mail_agent.rb +0 -344
  540. data/lib/pwn/plugins/metasploit.rb +0 -151
  541. data/lib/pwn/plugins/monkey_patch.rb +0 -182
  542. data/lib/pwn/plugins/msr206.rb +0 -1257
  543. data/lib/pwn/plugins/nessus_cloud.rb +0 -847
  544. data/lib/pwn/plugins/nexpose_vuln_scan.rb +0 -356
  545. data/lib/pwn/plugins/nmap_it.rb +0 -136
  546. data/lib/pwn/plugins/oauth2.rb +0 -67
  547. data/lib/pwn/plugins/ocr.rb +0 -43
  548. data/lib/pwn/plugins/open_api.rb +0 -896
  549. data/lib/pwn/plugins/openvas.rb +0 -314
  550. data/lib/pwn/plugins/packet.rb +0 -1313
  551. data/lib/pwn/plugins/pdf_parse.rb +0 -53
  552. data/lib/pwn/plugins/pony.rb +0 -281
  553. data/lib/pwn/plugins/ps.rb +0 -90
  554. data/lib/pwn/plugins/pwn_logger.rb +0 -64
  555. data/lib/pwn/plugins/rabbit_mq.rb +0 -70
  556. data/lib/pwn/plugins/repl.rb +0 -999
  557. data/lib/pwn/plugins/scannable_codes.rb +0 -87
  558. data/lib/pwn/plugins/serial.rb +0 -273
  559. data/lib/pwn/plugins/shodan.rb +0 -629
  560. data/lib/pwn/plugins/slack_client.rb +0 -104
  561. data/lib/pwn/plugins/sock.rb +0 -289
  562. data/lib/pwn/plugins/spider.rb +0 -78
  563. data/lib/pwn/plugins/ssn.rb +0 -52
  564. data/lib/pwn/plugins/thread_pool.rb +0 -80
  565. data/lib/pwn/plugins/tor.rb +0 -273
  566. data/lib/pwn/plugins/transparent_browser.rb +0 -1738
  567. data/lib/pwn/plugins/twitter_api.rb +0 -151
  568. data/lib/pwn/plugins/uri_scheme.rb +0 -328
  569. data/lib/pwn/plugins/vault.rb +0 -305
  570. data/lib/pwn/plugins/vin.rb +0 -361
  571. data/lib/pwn/plugins/voice.rb +0 -145
  572. data/lib/pwn/plugins/vsphere.rb +0 -81
  573. data/lib/pwn/plugins/xxd.rb +0 -298
  574. data/lib/pwn/plugins/zaproxy.rb +0 -837
  575. data/lib/pwn/plugins.rb +0 -81
  576. data/lib/pwn/reports/fuzz.rb +0 -328
  577. data/lib/pwn/reports/html_footer.rb +0 -160
  578. data/lib/pwn/reports/html_header.rb +0 -271
  579. data/lib/pwn/reports/phone.rb +0 -384
  580. data/lib/pwn/reports/sast.rb +0 -435
  581. data/lib/pwn/reports/uri_buster.rb +0 -335
  582. data/lib/pwn/reports.rb +0 -25
  583. data/lib/pwn/sast/amqp_connect_as_guest.rb +0 -78
  584. data/lib/pwn/sast/apache_file_system_util_api.rb +0 -76
  585. data/lib/pwn/sast/aws.rb +0 -77
  586. data/lib/pwn/sast/banned_function_calls_c.rb +0 -207
  587. data/lib/pwn/sast/base64.rb +0 -74
  588. data/lib/pwn/sast/beef_hook.rb +0 -75
  589. data/lib/pwn/sast/cmd_execution_go_lang.rb +0 -83
  590. data/lib/pwn/sast/cmd_execution_java.rb +0 -80
  591. data/lib/pwn/sast/cmd_execution_python.rb +0 -82
  592. data/lib/pwn/sast/cmd_execution_ruby.rb +0 -90
  593. data/lib/pwn/sast/cmd_execution_scala.rb +0 -80
  594. data/lib/pwn/sast/csrf.rb +0 -74
  595. data/lib/pwn/sast/deserial_java.rb +0 -85
  596. data/lib/pwn/sast/emoticon.rb +0 -82
  597. data/lib/pwn/sast/eval.rb +0 -76
  598. data/lib/pwn/sast/factory.rb +0 -79
  599. data/lib/pwn/sast/http_authorization_header.rb +0 -80
  600. data/lib/pwn/sast/inner_html.rb +0 -76
  601. data/lib/pwn/sast/keystore.rb +0 -75
  602. data/lib/pwn/sast/local_storage.rb +0 -77
  603. data/lib/pwn/sast/location_hash.rb +0 -76
  604. data/lib/pwn/sast/log4j.rb +0 -78
  605. data/lib/pwn/sast/logger.rb +0 -90
  606. data/lib/pwn/sast/md5.rb +0 -75
  607. data/lib/pwn/sast/outer_html.rb +0 -76
  608. data/lib/pwn/sast/padding_oracle.rb +0 -72
  609. data/lib/pwn/sast/password.rb +0 -75
  610. data/lib/pwn/sast/php_input_mechanisms.rb +0 -84
  611. data/lib/pwn/sast/php_type_juggling.rb +0 -82
  612. data/lib/pwn/sast/pom_version.rb +0 -164
  613. data/lib/pwn/sast/port.rb +0 -82
  614. data/lib/pwn/sast/post_message.rb +0 -76
  615. data/lib/pwn/sast/private_key.rb +0 -75
  616. data/lib/pwn/sast/redirect.rb +0 -77
  617. data/lib/pwn/sast/redos.rb +0 -82
  618. data/lib/pwn/sast/shell.rb +0 -83
  619. data/lib/pwn/sast/signature.rb +0 -75
  620. data/lib/pwn/sast/sql.rb +0 -85
  621. data/lib/pwn/sast/ssl.rb +0 -79
  622. data/lib/pwn/sast/sudo.rb +0 -75
  623. data/lib/pwn/sast/task_tag.rb +0 -89
  624. data/lib/pwn/sast/test_case_engine.rb +0 -189
  625. data/lib/pwn/sast/throw_errors.rb +0 -78
  626. data/lib/pwn/sast/token.rb +0 -77
  627. data/lib/pwn/sast/type_script_type_juggling.rb +0 -82
  628. data/lib/pwn/sast/use_after_free.rb +0 -82
  629. data/lib/pwn/sast/version.rb +0 -76
  630. data/lib/pwn/sast/window_location_hash.rb +0 -75
  631. data/lib/pwn/sast.rb +0 -67
  632. data/lib/pwn/sdr/decoder/gsm.rb +0 -200
  633. data/lib/pwn/sdr/decoder.rb +0 -19
  634. data/lib/pwn/sdr/flipper_zero.rb +0 -128
  635. data/lib/pwn/sdr/frequency_allocation.rb +0 -416
  636. data/lib/pwn/sdr/gqrx.rb +0 -655
  637. data/lib/pwn/sdr/rfidler.rb +0 -56
  638. data/lib/pwn/sdr/son_micro_rfid.rb +0 -773
  639. data/lib/pwn/sdr.rb +0 -21
  640. data/lib/pwn/version.rb +0 -5
  641. data/lib/pwn/www/app_cobalt_io.rb +0 -139
  642. data/lib/pwn/www/bing.rb +0 -88
  643. data/lib/pwn/www/bug_crowd.rb +0 -136
  644. data/lib/pwn/www/checkip.rb +0 -69
  645. data/lib/pwn/www/coinbase_pro.rb +0 -136
  646. data/lib/pwn/www/duckduckgo.rb +0 -114
  647. data/lib/pwn/www/facebook.rb +0 -124
  648. data/lib/pwn/www/google.rb +0 -114
  649. data/lib/pwn/www/hacker_one.rb +0 -649
  650. data/lib/pwn/www/linkedin.rb +0 -124
  651. data/lib/pwn/www/pandora.rb +0 -124
  652. data/lib/pwn/www/pastebin.rb +0 -84
  653. data/lib/pwn/www/paypal.rb +0 -208
  654. data/lib/pwn/www/synack.rb +0 -136
  655. data/lib/pwn/www/torch.rb +0 -107
  656. data/lib/pwn/www/trading_view.rb +0 -127
  657. data/lib/pwn/www/twitter.rb +0 -138
  658. data/lib/pwn/www/uber.rb +0 -124
  659. data/lib/pwn/www/upwork.rb +0 -124
  660. data/lib/pwn/www/wayback_machine.rb +0 -113
  661. data/lib/pwn/www/youtube.rb +0 -88
  662. data/lib/pwn/www.rb +0 -36
  663. data/lib/pwn.rb +0 -39
  664. data/packer/daemons/msfrpcd.rb +0 -64
  665. data/packer/daemons/openvas.rb +0 -51
  666. data/packer/deploy_docker_containers.sh +0 -9
  667. data/packer/deploy_packer_box.sh +0 -87
  668. data/packer/docker/kali_rolling_docker_pwn_fuzz_net_app_proto.json +0 -44
  669. data/packer/docker/kali_rolling_docker_pwn_prototyper.json +0 -48
  670. data/packer/docker/kali_rolling_docker_pwn_sast.json +0 -44
  671. data/packer/docker/kali_rolling_docker_pwn_transparent_browser.json +0 -46
  672. data/packer/docker/kali_rolling_docker_pwn_www_checkip.json +0 -34
  673. data/packer/http/kali_rolling_preseed.cfg +0 -81
  674. data/packer/kali_rolling_aws_ami.json +0 -139
  675. data/packer/kali_rolling_qemu_kvm.json +0 -159
  676. data/packer/kali_rolling_virtualbox.json +0 -186
  677. data/packer/kali_rolling_vmware.json +0 -167
  678. data/packer/packer_secrets.json.EXAMPLE +0 -9
  679. data/packer/provisioners/PayloadsAllTheThings.sh +0 -5
  680. data/packer/provisioners/SecLists.sh +0 -5
  681. data/packer/provisioners/afl.sh +0 -28
  682. data/packer/provisioners/aliases.rb +0 -23
  683. data/packer/provisioners/amass.sh +0 -5
  684. data/packer/provisioners/android.sh +0 -18
  685. data/packer/provisioners/ansible.sh +0 -5
  686. data/packer/provisioners/apache2.sh +0 -24
  687. data/packer/provisioners/arachni.sh +0 -28
  688. data/packer/provisioners/awscli.sh +0 -5
  689. data/packer/provisioners/bashrc.sh +0 -13
  690. data/packer/provisioners/beef.rb +0 -23
  691. data/packer/provisioners/burpsuite.sh +0 -24
  692. data/packer/provisioners/chrome.sh +0 -11
  693. data/packer/provisioners/coreutils.sh +0 -6
  694. data/packer/provisioners/curl.sh +0 -6
  695. data/packer/provisioners/docker.sh +0 -43
  696. data/packer/provisioners/docker_bashrc.sh +0 -2
  697. data/packer/provisioners/docker_rvm.sh +0 -22
  698. data/packer/provisioners/eyewitness.sh +0 -5
  699. data/packer/provisioners/ffmpeg.sh +0 -6
  700. data/packer/provisioners/firefox.sh +0 -7
  701. data/packer/provisioners/fuzzdb.sh +0 -5
  702. data/packer/provisioners/gdb.sh +0 -5
  703. data/packer/provisioners/geckodriver.sh +0 -9
  704. data/packer/provisioners/ghidra.sh +0 -5
  705. data/packer/provisioners/git.sh +0 -6
  706. data/packer/provisioners/init_image.sh +0 -103
  707. data/packer/provisioners/install_vagrant_ssh_key.sh +0 -15
  708. data/packer/provisioners/irc.sh +0 -13
  709. data/packer/provisioners/jenkins.sh +0 -77
  710. data/packer/provisioners/metasploit.rb +0 -59
  711. data/packer/provisioners/nmap.sh +0 -5
  712. data/packer/provisioners/openvas.sh +0 -23
  713. data/packer/provisioners/openvas_wrappers.sh +0 -4
  714. data/packer/provisioners/openvpn.sh +0 -7
  715. data/packer/provisioners/peda.sh +0 -4
  716. data/packer/provisioners/phantomjs.rb +0 -28
  717. data/packer/provisioners/phantomjs_wrapper.sh +0 -22
  718. data/packer/provisioners/post_install.sh +0 -41
  719. data/packer/provisioners/postgresql.sh +0 -49
  720. data/packer/provisioners/preeny.sh +0 -8
  721. data/packer/provisioners/pwn.sh +0 -100
  722. data/packer/provisioners/pwntools.sh +0 -13
  723. data/packer/provisioners/radamsa.sh +0 -7
  724. data/packer/provisioners/radare2.sh +0 -29
  725. data/packer/provisioners/rc.local.sh +0 -16
  726. data/packer/provisioners/reboot_os.sh +0 -7
  727. data/packer/provisioners/ruby.sh +0 -35
  728. data/packer/provisioners/rvm.sh +0 -31
  729. data/packer/provisioners/scapy.sh +0 -5
  730. data/packer/provisioners/scout2.sh +0 -5
  731. data/packer/provisioners/sox.sh +0 -5
  732. data/packer/provisioners/ssllabs-scan.sh +0 -9
  733. data/packer/provisioners/strace.sh +0 -5
  734. data/packer/provisioners/sublist3r.sh +0 -5
  735. data/packer/provisioners/terminator.sh +0 -5
  736. data/packer/provisioners/toggle_tor.sh +0 -2
  737. data/packer/provisioners/tor.sh +0 -5
  738. data/packer/provisioners/twinkle.sh +0 -6
  739. data/packer/provisioners/update_os.sh +0 -108
  740. data/packer/provisioners/upload_globals.sh +0 -63
  741. data/packer/provisioners/vim.sh +0 -23
  742. data/packer/provisioners/virtualbox_guest_additions.sh +0 -20
  743. data/packer/provisioners/vmware_tools.sh +0 -8
  744. data/packer/provisioners/wpscan.rb +0 -23
  745. data/packer/provisioners/xrdp.sh +0 -23
  746. data/packer/provisioners/zzuf.sh +0 -5
  747. data/pwn.gemspec +0 -77
  748. data/reinstall_pwn_gemset.sh +0 -30
  749. data/spec/lib/pwn/ai/grok_spec.rb +0 -15
  750. data/spec/lib/pwn/ai/introspection_spec.rb +0 -15
  751. data/spec/lib/pwn/ai/ollama_spec.rb +0 -15
  752. data/spec/lib/pwn/ai/open_ai_spec.rb +0 -15
  753. data/spec/lib/pwn/ai_spec.rb +0 -10
  754. data/spec/lib/pwn/aws/acm_spec.rb +0 -15
  755. data/spec/lib/pwn/aws/api_gateway_spec.rb +0 -15
  756. data/spec/lib/pwn/aws/app_stream_spec.rb +0 -15
  757. data/spec/lib/pwn/aws/application_auto_scaling_spec.rb +0 -15
  758. data/spec/lib/pwn/aws/application_discovery_service_spec.rb +0 -15
  759. data/spec/lib/pwn/aws/auto_scaling_spec.rb +0 -15
  760. data/spec/lib/pwn/aws/batch_spec.rb +0 -15
  761. data/spec/lib/pwn/aws/budgets_spec.rb +0 -15
  762. data/spec/lib/pwn/aws/cloud_formation_spec.rb +0 -15
  763. data/spec/lib/pwn/aws/cloud_front_spec.rb +0 -15
  764. data/spec/lib/pwn/aws/cloud_hsm_spec.rb +0 -15
  765. data/spec/lib/pwn/aws/cloud_search_domain_spec.rb +0 -15
  766. data/spec/lib/pwn/aws/cloud_search_spec.rb +0 -15
  767. data/spec/lib/pwn/aws/cloud_trail_spec.rb +0 -15
  768. data/spec/lib/pwn/aws/cloud_watch_events_spec.rb +0 -15
  769. data/spec/lib/pwn/aws/cloud_watch_logs_spec.rb +0 -15
  770. data/spec/lib/pwn/aws/cloud_watch_spec.rb +0 -15
  771. data/spec/lib/pwn/aws/code_build_spec.rb +0 -15
  772. data/spec/lib/pwn/aws/code_commit_spec.rb +0 -15
  773. data/spec/lib/pwn/aws/code_deploy_spec.rb +0 -15
  774. data/spec/lib/pwn/aws/code_pipeline_spec.rb +0 -15
  775. data/spec/lib/pwn/aws/cognito_identity_provider_spec.rb +0 -15
  776. data/spec/lib/pwn/aws/cognito_identity_spec.rb +0 -15
  777. data/spec/lib/pwn/aws/cognito_sync_spec.rb +0 -15
  778. data/spec/lib/pwn/aws/config_service_spec.rb +0 -15
  779. data/spec/lib/pwn/aws/data_pipleline_spec.rb +0 -15
  780. data/spec/lib/pwn/aws/database_migration_service_spec.rb +0 -15
  781. data/spec/lib/pwn/aws/device_farm_spec.rb +0 -15
  782. data/spec/lib/pwn/aws/direct_connect_spec.rb +0 -15
  783. data/spec/lib/pwn/aws/directory_service_spec.rb +0 -15
  784. data/spec/lib/pwn/aws/dynamo_db_spec.rb +0 -15
  785. data/spec/lib/pwn/aws/dynamo_db_streams_spec.rb +0 -15
  786. data/spec/lib/pwn/aws/ec2_spec.rb +0 -15
  787. data/spec/lib/pwn/aws/ecr_spec.rb +0 -15
  788. data/spec/lib/pwn/aws/ecs_spec.rb +0 -15
  789. data/spec/lib/pwn/aws/efs_spec.rb +0 -15
  790. data/spec/lib/pwn/aws/elasti_cache_spec.rb +0 -15
  791. data/spec/lib/pwn/aws/elastic_beanstalk_spec.rb +0 -15
  792. data/spec/lib/pwn/aws/elastic_load_balancing_spec.rb +0 -15
  793. data/spec/lib/pwn/aws/elastic_load_balancing_v2_spec.rb +0 -15
  794. data/spec/lib/pwn/aws/elastic_transcoder_spec.rb +0 -15
  795. data/spec/lib/pwn/aws/elasticsearch_service_spec.rb +0 -15
  796. data/spec/lib/pwn/aws/emr_spec.rb +0 -15
  797. data/spec/lib/pwn/aws/firehose_spec.rb +0 -15
  798. data/spec/lib/pwn/aws/game_lift_spec.rb +0 -15
  799. data/spec/lib/pwn/aws/glacier_spec.rb +0 -15
  800. data/spec/lib/pwn/aws/health_spec.rb +0 -15
  801. data/spec/lib/pwn/aws/iam_spec.rb +0 -15
  802. data/spec/lib/pwn/aws/import_export_spec.rb +0 -15
  803. data/spec/lib/pwn/aws/inspector_spec.rb +0 -15
  804. data/spec/lib/pwn/aws/iot_data_plane_spec.rb +0 -15
  805. data/spec/lib/pwn/aws/iot_spec.rb +0 -15
  806. data/spec/lib/pwn/aws/kinesis_analytics_spec.rb +0 -15
  807. data/spec/lib/pwn/aws/kinesis_spec.rb +0 -15
  808. data/spec/lib/pwn/aws/kms_spec.rb +0 -15
  809. data/spec/lib/pwn/aws/lambda_preview_spec.rb +0 -15
  810. data/spec/lib/pwn/aws/lambda_spec.rb +0 -15
  811. data/spec/lib/pwn/aws/lex_spec.rb +0 -15
  812. data/spec/lib/pwn/aws/lightsail_spec.rb +0 -15
  813. data/spec/lib/pwn/aws/machine_learning_spec.rb +0 -15
  814. data/spec/lib/pwn/aws/marketplace_commerce_analytics_spec.rb +0 -15
  815. data/spec/lib/pwn/aws/marketplace_metering_spec.rb +0 -15
  816. data/spec/lib/pwn/aws/ops_works_cm_spec.rb +0 -15
  817. data/spec/lib/pwn/aws/ops_works_spec.rb +0 -15
  818. data/spec/lib/pwn/aws/pinpoint_spec.rb +0 -15
  819. data/spec/lib/pwn/aws/polly_spec.rb +0 -15
  820. data/spec/lib/pwn/aws/rds_spec.rb +0 -15
  821. data/spec/lib/pwn/aws/redshift_spec.rb +0 -15
  822. data/spec/lib/pwn/aws/rekognition_spec.rb +0 -15
  823. data/spec/lib/pwn/aws/route53_domains_spec.rb +0 -15
  824. data/spec/lib/pwn/aws/route53_spec.rb +0 -15
  825. data/spec/lib/pwn/aws/s3_spec.rb +0 -15
  826. data/spec/lib/pwn/aws/service_catalog_spec.rb +0 -15
  827. data/spec/lib/pwn/aws/ses_spec.rb +0 -15
  828. data/spec/lib/pwn/aws/shield_spec.rb +0 -15
  829. data/spec/lib/pwn/aws/simple_db_spec.rb +0 -15
  830. data/spec/lib/pwn/aws/sms_spec.rb +0 -15
  831. data/spec/lib/pwn/aws/snowball_spec.rb +0 -15
  832. data/spec/lib/pwn/aws/sns_spec.rb +0 -15
  833. data/spec/lib/pwn/aws/sqs_spec.rb +0 -15
  834. data/spec/lib/pwn/aws/ssm_spec.rb +0 -15
  835. data/spec/lib/pwn/aws/states_spec.rb +0 -15
  836. data/spec/lib/pwn/aws/storage_gateway_spec.rb +0 -15
  837. data/spec/lib/pwn/aws/sts_spec.rb +0 -15
  838. data/spec/lib/pwn/aws/support_spec.rb +0 -15
  839. data/spec/lib/pwn/aws/swf_spec.rb +0 -15
  840. data/spec/lib/pwn/aws/waf_regional_spec.rb +0 -15
  841. data/spec/lib/pwn/aws/waf_spec.rb +0 -15
  842. data/spec/lib/pwn/aws/workspaces_spec.rb +0 -15
  843. data/spec/lib/pwn/aws/x_ray_spec.rb +0 -15
  844. data/spec/lib/pwn/aws_spec.rb +0 -10
  845. data/spec/lib/pwn/banner/anon_spec.rb +0 -20
  846. data/spec/lib/pwn/banner/bubble_spec.rb +0 -20
  847. data/spec/lib/pwn/banner/cheshire_spec.rb +0 -20
  848. data/spec/lib/pwn/banner/code_cave_spec.rb +0 -20
  849. data/spec/lib/pwn/banner/dont_panic_spec.rb +0 -20
  850. data/spec/lib/pwn/banner/f_society_spec.rb +0 -20
  851. data/spec/lib/pwn/banner/fork_bomb_spec.rb +0 -20
  852. data/spec/lib/pwn/banner/jmp_esp_spec.rb +0 -20
  853. data/spec/lib/pwn/banner/matrix_spec.rb +0 -20
  854. data/spec/lib/pwn/banner/ninja_spec.rb +0 -20
  855. data/spec/lib/pwn/banner/off_the_air_spec.rb +0 -20
  856. data/spec/lib/pwn/banner/pirate_spec.rb +0 -20
  857. data/spec/lib/pwn/banner/radare2_ai_spec.rb +0 -20
  858. data/spec/lib/pwn/banner/radare2_spec.rb +0 -20
  859. data/spec/lib/pwn/banner/white_rabbit_spec.rb +0 -20
  860. data/spec/lib/pwn/banner_spec.rb +0 -15
  861. data/spec/lib/pwn/blockchain/btc_spec.rb +0 -15
  862. data/spec/lib/pwn/blockchain/eth_spec.rb +0 -15
  863. data/spec/lib/pwn/blockchain_spec.rb +0 -10
  864. data/spec/lib/pwn/config_spec.rb +0 -15
  865. data/spec/lib/pwn/driver_spec.rb +0 -15
  866. data/spec/lib/pwn/ffi/stdio_spec.rb +0 -15
  867. data/spec/lib/pwn/ffi_spec.rb +0 -10
  868. data/spec/lib/pwn/plugins/android_spec.rb +0 -15
  869. data/spec/lib/pwn/plugins/assembly_spec.rb +0 -15
  870. data/spec/lib/pwn/plugins/authentication_helper_spec.rb +0 -15
  871. data/spec/lib/pwn/plugins/baresip_spec.rb +0 -15
  872. data/spec/lib/pwn/plugins/basic_auth_spec.rb +0 -15
  873. data/spec/lib/pwn/plugins/beef_spec.rb +0 -15
  874. data/spec/lib/pwn/plugins/black_duck_binary_analysis_spec.rb +0 -15
  875. data/spec/lib/pwn/plugins/burp_suite_spec.rb +0 -15
  876. data/spec/lib/pwn/plugins/bus_pirate_spec.rb +0 -15
  877. data/spec/lib/pwn/plugins/char_spec.rb +0 -15
  878. data/spec/lib/pwn/plugins/credit_card_spec.rb +0 -15
  879. data/spec/lib/pwn/plugins/dao_ldap_spec.rb +0 -15
  880. data/spec/lib/pwn/plugins/dao_mongo_spec.rb +0 -15
  881. data/spec/lib/pwn/plugins/dao_postgres_spec.rb +0 -15
  882. data/spec/lib/pwn/plugins/dao_sqlite3_spec.rb +0 -15
  883. data/spec/lib/pwn/plugins/defect_dojo_spec.rb +0 -15
  884. data/spec/lib/pwn/plugins/detect_os_spec.rb +0 -15
  885. data/spec/lib/pwn/plugins/ein_spec.rb +0 -15
  886. data/spec/lib/pwn/plugins/file_fu_spec.rb +0 -15
  887. data/spec/lib/pwn/plugins/fuzz_spec.rb +0 -15
  888. data/spec/lib/pwn/plugins/git_spec.rb +0 -15
  889. data/spec/lib/pwn/plugins/github_spec.rb +0 -15
  890. data/spec/lib/pwn/plugins/hacker_one_spec.rb +0 -15
  891. data/spec/lib/pwn/plugins/hunter_spec.rb +0 -15
  892. data/spec/lib/pwn/plugins/ip_info_spec.rb +0 -15
  893. data/spec/lib/pwn/plugins/irc_spec.rb +0 -15
  894. data/spec/lib/pwn/plugins/jenkins_spec.rb +0 -15
  895. data/spec/lib/pwn/plugins/jira_data_center_spec.rb +0 -15
  896. data/spec/lib/pwn/plugins/json_pathify_spec.rb +0 -15
  897. data/spec/lib/pwn/plugins/log_spec.rb +0 -15
  898. data/spec/lib/pwn/plugins/mail_agent_spec.rb +0 -15
  899. data/spec/lib/pwn/plugins/metasploit_spec.rb +0 -15
  900. data/spec/lib/pwn/plugins/monkey_patch_spec.rb +0 -15
  901. data/spec/lib/pwn/plugins/msr206_spec.rb +0 -15
  902. data/spec/lib/pwn/plugins/nessus_cloud_spec.rb +0 -15
  903. data/spec/lib/pwn/plugins/nexpose_vuln_scan_spec.rb +0 -15
  904. data/spec/lib/pwn/plugins/nmap_it_spec.rb +0 -15
  905. data/spec/lib/pwn/plugins/oauth2_spec.rb +0 -15
  906. data/spec/lib/pwn/plugins/ocr_spec.rb +0 -15
  907. data/spec/lib/pwn/plugins/open_api_spec.rb +0 -15
  908. data/spec/lib/pwn/plugins/openvas_spec.rb +0 -15
  909. data/spec/lib/pwn/plugins/packet_spec.rb +0 -15
  910. data/spec/lib/pwn/plugins/pdf_parse_spec.rb +0 -15
  911. data/spec/lib/pwn/plugins/pony_spec.rb +0 -15
  912. data/spec/lib/pwn/plugins/ps_spec.rb +0 -15
  913. data/spec/lib/pwn/plugins/pwn_logger_spec.rb +0 -15
  914. data/spec/lib/pwn/plugins/rabbit_mq_spec.rb +0 -15
  915. data/spec/lib/pwn/plugins/repl_spec.rb +0 -15
  916. data/spec/lib/pwn/plugins/scannable_codes_spec.rb +0 -15
  917. data/spec/lib/pwn/plugins/serial_spec.rb +0 -15
  918. data/spec/lib/pwn/plugins/shodan_spec.rb +0 -15
  919. data/spec/lib/pwn/plugins/slack_client_spec.rb +0 -15
  920. data/spec/lib/pwn/plugins/sock_spec.rb +0 -15
  921. data/spec/lib/pwn/plugins/spider_spec.rb +0 -15
  922. data/spec/lib/pwn/plugins/ssn_spec.rb +0 -15
  923. data/spec/lib/pwn/plugins/thread_pool_spec.rb +0 -15
  924. data/spec/lib/pwn/plugins/tor_spec.rb +0 -15
  925. data/spec/lib/pwn/plugins/transparent_browser_spec.rb +0 -15
  926. data/spec/lib/pwn/plugins/twitter_api_spec.rb +0 -15
  927. data/spec/lib/pwn/plugins/uri_scheme_spec.rb +0 -15
  928. data/spec/lib/pwn/plugins/vault_spec.rb +0 -15
  929. data/spec/lib/pwn/plugins/vin_spec.rb +0 -15
  930. data/spec/lib/pwn/plugins/voice_spec.rb +0 -15
  931. data/spec/lib/pwn/plugins/vsphere_spec.rb +0 -15
  932. data/spec/lib/pwn/plugins/xxd_spec.rb +0 -15
  933. data/spec/lib/pwn/plugins/zaproxy_spec.rb +0 -15
  934. data/spec/lib/pwn/plugins_spec.rb +0 -10
  935. data/spec/lib/pwn/reports/fuzz_spec.rb +0 -15
  936. data/spec/lib/pwn/reports/html_footer_spec.rb +0 -15
  937. data/spec/lib/pwn/reports/html_header_spec.rb +0 -15
  938. data/spec/lib/pwn/reports/phone_spec.rb +0 -15
  939. data/spec/lib/pwn/reports/sast_spec.rb +0 -15
  940. data/spec/lib/pwn/reports/uri_buster_spec.rb +0 -15
  941. data/spec/lib/pwn/reports_spec.rb +0 -10
  942. data/spec/lib/pwn/sast/amqp_connect_as_guest_spec.rb +0 -25
  943. data/spec/lib/pwn/sast/apache_file_system_util_api_spec.rb +0 -25
  944. data/spec/lib/pwn/sast/aws_spec.rb +0 -25
  945. data/spec/lib/pwn/sast/banned_function_calls_c_spec.rb +0 -25
  946. data/spec/lib/pwn/sast/base64_spec.rb +0 -25
  947. data/spec/lib/pwn/sast/beef_hook_spec.rb +0 -25
  948. data/spec/lib/pwn/sast/cmd_execution_go_lang_spec.rb +0 -25
  949. data/spec/lib/pwn/sast/cmd_execution_java_spec.rb +0 -25
  950. data/spec/lib/pwn/sast/cmd_execution_python_spec.rb +0 -25
  951. data/spec/lib/pwn/sast/cmd_execution_ruby_spec.rb +0 -25
  952. data/spec/lib/pwn/sast/cmd_execution_scala_spec.rb +0 -25
  953. data/spec/lib/pwn/sast/csrf_spec.rb +0 -25
  954. data/spec/lib/pwn/sast/deserial_java_spec.rb +0 -25
  955. data/spec/lib/pwn/sast/emoticon_spec.rb +0 -25
  956. data/spec/lib/pwn/sast/eval_spec.rb +0 -25
  957. data/spec/lib/pwn/sast/factory_spec.rb +0 -25
  958. data/spec/lib/pwn/sast/http_authorization_header_spec.rb +0 -25
  959. data/spec/lib/pwn/sast/inner_html_spec.rb +0 -25
  960. data/spec/lib/pwn/sast/keystore_spec.rb +0 -25
  961. data/spec/lib/pwn/sast/local_storage_spec.rb +0 -25
  962. data/spec/lib/pwn/sast/location_hash_spec.rb +0 -25
  963. data/spec/lib/pwn/sast/log4j_spec.rb +0 -25
  964. data/spec/lib/pwn/sast/logger_spec.rb +0 -25
  965. data/spec/lib/pwn/sast/md5_spec.rb +0 -25
  966. data/spec/lib/pwn/sast/outer_html_spec.rb +0 -25
  967. data/spec/lib/pwn/sast/padding_oracle_spec.rb +0 -25
  968. data/spec/lib/pwn/sast/password_spec.rb +0 -25
  969. data/spec/lib/pwn/sast/php_input_mechanisms_spec.rb +0 -25
  970. data/spec/lib/pwn/sast/php_type_juggling_spec.rb +0 -25
  971. data/spec/lib/pwn/sast/pom_version_spec.rb +0 -25
  972. data/spec/lib/pwn/sast/port_spec.rb +0 -25
  973. data/spec/lib/pwn/sast/post_message_spec.rb +0 -25
  974. data/spec/lib/pwn/sast/private_key_spec.rb +0 -25
  975. data/spec/lib/pwn/sast/redirect_spec.rb +0 -25
  976. data/spec/lib/pwn/sast/redos_spec.rb +0 -25
  977. data/spec/lib/pwn/sast/shell_spec.rb +0 -25
  978. data/spec/lib/pwn/sast/signature_spec.rb +0 -25
  979. data/spec/lib/pwn/sast/sql_spec.rb +0 -25
  980. data/spec/lib/pwn/sast/ssl_spec.rb +0 -25
  981. data/spec/lib/pwn/sast/sudo_spec.rb +0 -25
  982. data/spec/lib/pwn/sast/task_tag_spec.rb +0 -25
  983. data/spec/lib/pwn/sast/test_case_engine_spec.rb +0 -20
  984. data/spec/lib/pwn/sast/throw_errors_spec.rb +0 -25
  985. data/spec/lib/pwn/sast/token_spec.rb +0 -25
  986. data/spec/lib/pwn/sast/type_script_type_juggling_spec.rb +0 -25
  987. data/spec/lib/pwn/sast/use_after_free_spec.rb +0 -25
  988. data/spec/lib/pwn/sast/version_spec.rb +0 -25
  989. data/spec/lib/pwn/sast/window_location_hash_spec.rb +0 -25
  990. data/spec/lib/pwn/sast_spec.rb +0 -10
  991. data/spec/lib/pwn/sdr/decoder/gsm_spec.rb +0 -15
  992. data/spec/lib/pwn/sdr/decoder_spec.rb +0 -10
  993. data/spec/lib/pwn/sdr/flipper_zero_spec.rb +0 -15
  994. data/spec/lib/pwn/sdr/frequency_allocation_spec.rb +0 -15
  995. data/spec/lib/pwn/sdr/gqrx_spec.rb +0 -15
  996. data/spec/lib/pwn/sdr/rfidler_spec.rb +0 -15
  997. data/spec/lib/pwn/sdr/son_micro_rfid_spec.rb +0 -15
  998. data/spec/lib/pwn/sdr_spec.rb +0 -10
  999. data/spec/lib/pwn/version_spec.rb +0 -17
  1000. data/spec/lib/pwn/www/app_cobalt_io_spec.rb +0 -15
  1001. data/spec/lib/pwn/www/bing_spec.rb +0 -15
  1002. data/spec/lib/pwn/www/bug_crowd_spec.rb +0 -15
  1003. data/spec/lib/pwn/www/checkip_spec.rb +0 -15
  1004. data/spec/lib/pwn/www/coinbase_pro_spec.rb +0 -15
  1005. data/spec/lib/pwn/www/duckduckgo_spec.rb +0 -15
  1006. data/spec/lib/pwn/www/facebook_spec.rb +0 -15
  1007. data/spec/lib/pwn/www/google_spec.rb +0 -15
  1008. data/spec/lib/pwn/www/hacker_one_spec.rb +0 -15
  1009. data/spec/lib/pwn/www/linkedin_spec.rb +0 -15
  1010. data/spec/lib/pwn/www/pandora_spec.rb +0 -15
  1011. data/spec/lib/pwn/www/pastebin_spec.rb +0 -15
  1012. data/spec/lib/pwn/www/paypal_spec.rb +0 -15
  1013. data/spec/lib/pwn/www/synack_spec.rb +0 -15
  1014. data/spec/lib/pwn/www/torch_spec.rb +0 -15
  1015. data/spec/lib/pwn/www/trading_view_spec.rb +0 -15
  1016. data/spec/lib/pwn/www/twitter_spec.rb +0 -15
  1017. data/spec/lib/pwn/www/uber_spec.rb +0 -15
  1018. data/spec/lib/pwn/www/upwork_spec.rb +0 -15
  1019. data/spec/lib/pwn/www/wayback_machine_spec.rb +0 -15
  1020. data/spec/lib/pwn/www/youtube_spec.rb +0 -15
  1021. data/spec/lib/pwn/www_spec.rb +0 -10
  1022. data/spec/lib/pwn_spec.rb +0 -10
  1023. data/spec/spec_helper.rb +0 -3
  1024. data/third_party/.gitkeep +0 -0
  1025. data/third_party/http-request-headers-fields-large.txt +0 -1185
  1026. data/third_party/pwn_rdoc.jsonl +0 -1435
  1027. data/third_party/r2-pwn-layout +0 -1
  1028. data/update_pwn.sh +0 -9
  1029. data/upgrade_ruby.sh +0 -42
  1030. data/vagrant/provisioners/apache2.sh +0 -76
  1031. data/vagrant/provisioners/beef.rb +0 -30
  1032. data/vagrant/provisioners/burpsuite_pro.rb +0 -37
  1033. data/vagrant/provisioners/exploit-db.sh +0 -2
  1034. data/vagrant/provisioners/gem.sh +0 -4
  1035. data/vagrant/provisioners/init_env.sh +0 -22
  1036. data/vagrant/provisioners/jenkins.sh +0 -87
  1037. data/vagrant/provisioners/jenkins_ssh-keygen.rb +0 -86
  1038. data/vagrant/provisioners/kali_customize.rb +0 -130
  1039. data/vagrant/provisioners/letsencrypt.rb +0 -35
  1040. data/vagrant/provisioners/metasploit.rb +0 -25
  1041. data/vagrant/provisioners/nmap_all_live_hosts.sh +0 -2
  1042. data/vagrant/provisioners/openvas.sh +0 -23
  1043. data/vagrant/provisioners/openvas_wrappers.sh +0 -2
  1044. data/vagrant/provisioners/post_install.sh +0 -14
  1045. data/vagrant/provisioners/postgres.sh +0 -22
  1046. data/vagrant/provisioners/pwn.sh +0 -13
  1047. data/vagrant/provisioners/rvm.sh +0 -18
  1048. data/vagrant/provisioners/ssllabs-scan.sh +0 -10
  1049. data/vagrant/provisioners/toggle_tor.sh +0 -2
  1050. data/vagrant/provisioners/update_jenkins_plugins.rb +0 -30
  1051. data/vagrant/provisioners/update_os.sh +0 -108
  1052. data/vagrant/provisioners/upload_globals.sh +0 -63
  1053. data/vagrant/provisioners/userland_fdisk.sh +0 -22
  1054. data/vagrant/provisioners/userland_lvm.sh +0 -5
  1055. data/vagrant/provisioners/wpscan.rb +0 -25
  1056. data/vagrant_rsync_third_party.lst +0 -1
  1057. data/vagrant_rsync_userland_template.lst +0 -8
@@ -1,1738 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'diffy'
4
- require 'em/pure_ruby'
5
- require 'faye/websocket'
6
- require 'nokogiri'
7
- require 'openssl'
8
- require 'rest-client'
9
- require 'securerandom'
10
- require 'selenium/devtools'
11
- require 'selenium/webdriver'
12
- require 'socksify'
13
- require 'timeout'
14
- require 'watir'
15
- require 'yaml'
16
-
17
- module PWN
18
- module Plugins
19
- # This plugin rocks. Chrome, Firefox, headless, REST Client,
20
- # all from the comfort of one plugin. Proxy support (e.g. Burp
21
- # Suite Professional) is completely available for all browsers
22
- # except for limited functionality within IE (IE has interesting
23
- # protections in place to prevent this). This plugin also supports
24
- # taking screenshots :)
25
- module TransparentBrowser
26
- @@logger = PWN::Plugins::PWNLogger.create
27
-
28
- # Supported Method Parameters::
29
- # verify_devtools_browser(
30
- # browser_obj: 'required - browser_obj returned from #open method',
31
- # supported: 'optional - array of supported browser types (defaults to [:chrome, :headless_chrome, :firefox, :headless_firefox, :headless])'
32
- # )
33
- private_class_method def self.verify_devtools_browser(opts = {})
34
- browser_obj = opts[:browser_obj]
35
- supported = opts[:supported] ||= %i[chrome headless_chrome firefox headless_firefox headless]
36
-
37
- browser_type = browser_obj[:type]
38
- verified = false
39
- verified = true if supported.include?(browser_type)
40
- rescue StandardError => e
41
- raise e
42
- end
43
-
44
- # Supported Method Parameters::
45
- # browser_obj1 = PWN::Plugins::TransparentBrowser.open(
46
- # browser_type: 'optional - :firefox|:chrome|:headless|:rest|:websocket (defaults to :chrome)',
47
- # proxy: 'optional - scheme://proxy_host:port || tor (defaults to nil)',
48
- # devtools: 'optional - boolean (defaults to false)',
49
- # )
50
-
51
- public_class_method def self.open(opts = {})
52
- browser_type = opts[:browser_type] ||= :chrome
53
- proxy = opts[:proxy].to_s unless opts[:proxy].nil?
54
-
55
- browser_obj = {}
56
- browser_obj[:type] = browser_type
57
-
58
- tor_obj = nil
59
- if opts[:proxy] == 'tor'
60
- tor_obj = PWN::Plugins::Tor.start
61
- proxy = "socks5://#{tor_obj[:ip]}:#{tor_obj[:port]}"
62
- browser_obj[:tor_obj] = tor_obj
63
- end
64
-
65
- devtools_supported = %i[chrome headless_chrome firefox headless_firefox headless]
66
- devtools = opts[:devtools] ||= false
67
- devtools = true if devtools_supported.include?(browser_type) && devtools
68
-
69
- # Let's crank up the default timeout from 30 seconds to 15 min for slow sites
70
- Watir.default_timeout = 900
71
-
72
- args = []
73
- # args.push('--start-maximized')
74
- args.push('--disable-notifications')
75
-
76
- unless browser_type == :rest
77
- logger = Selenium::WebDriver.logger
78
- logger.level = :error
79
- end
80
-
81
- case browser_type
82
- when :firefox
83
- this_profile = Selenium::WebDriver::Firefox::Profile.new
84
-
85
- # Increase Web Assembly Verbosity
86
- this_profile['javascript.options.wasm_verbose'] = true
87
-
88
- # Downloads reside in ~/Downloads
89
- this_profile['browser.download.folderList'] = 1
90
- this_profile['browser.helperApps.neverAsk.saveToDisk'] = 'application/pdf'
91
-
92
- # disable Firefox's built-in PDF viewer
93
- this_profile['pdfjs.disabled'] = true
94
-
95
- # disable Adobe Acrobat PDF preview plugin
96
- this_profile['plugin.scan.plid.all'] = false
97
- this_profile['plugin.scan.Acrobat'] = '99.0'
98
-
99
- # ensure localhost proxy capabilities are enabled
100
- this_profile['network.proxy.no_proxies_on'] = ''
101
-
102
- # allow scripts to run a bit longer
103
- # this_profile['dom.max_chrome_script_run_time'] = 180
104
- # this_profile['dom.max_script_run_time'] = 180
105
-
106
- # disable browser cache
107
- this_profile['browser.cache.disk.enable'] = false
108
- this_profile['browser.cache.disk_cache_ssl.enable'] = false
109
- this_profile['browser.cache.memory.enable'] = false
110
- this_profile['browser.cache.offline.enable'] = false
111
- this_profile['devtools.cache.disabled'] = true
112
- this_profile['dom.caches.enabled'] = false
113
-
114
- if devtools
115
- # args.push('--start-debugger-server')
116
- # this_profile['devtools.debugger.remote-enabled'] = true
117
- # this_profile['devtools.debugger.remote-host'] = 'localhost'
118
- # this_profile['devtools.debugger.remote-port'] = 6000
119
-
120
- # DevTools ToolBox Settings in Firefox about:config
121
- this_profile['devtools.f12.enabled'] = true
122
- this_profile['devtools.toolbox.host'] = 'right'
123
- this_profile['devtools.toolbox.selectedTool'] = 'jsdebugger'
124
- this_profile['devtools.toolbox.sidebar.width'] = 1700
125
- this_profile['devtools.toolbox.splitconsoleHeight'] = 200
126
-
127
- # DevTools Debugger Settings in Firefox about:config
128
- this_profile['devtools.chrome.enabled'] = true
129
- this_profile['devtools.debugger.start-panel-size'] = 200
130
- this_profile['devtools.debugger.end-panel-size'] = 200
131
- this_profile['devtools.debugger.auto-pretty-print'] = true
132
- this_profile['devtools.debugger.ui.editor-wrapping'] = true
133
- this_profile['devtools.debugger.features.javascript-tracing'] = true
134
- this_profile['devtools.debugger.xhr-breakpoints-visible'] = true
135
- this_profile['devtools.debugger.expressions-visible'] = true
136
- this_profile['devtools.debugger.dom-mutation-breakpoints-visible'] = true
137
- this_profile['devtools.debugger.features.async-live-stacks'] = true
138
- this_profile['devtools.debugger.features.autocomplete-expressions'] = true
139
- this_profile['devtools.debugger.features.code-folding'] = true
140
- this_profile['devtools.debugger.features.command-click'] = true
141
- this_profile['devtools.debugger.features.component-pane'] = true
142
- this_profile['devtools.debugger.map-scopes-enabled'] = true
143
-
144
- # Never optimize out variables in the debugger
145
- this_profile['javascript.options.baselinejit'] = false
146
- this_profile['javascript.options.ion'] = false
147
- end
148
-
149
- # caps = Selenium::WebDriver::Remote::Capabilities.firefox
150
- # caps[:acceptInsecureCerts] = true
151
-
152
- if proxy
153
- this_profile['network.proxy.type'] = 1
154
- this_profile['network.proxy.allow_hijacking_localhost'] = true
155
- if tor_obj
156
- this_profile['network.proxy.socks_version'] = 5
157
- this_profile['network.proxy.socks'] = tor_obj[:ip]
158
- this_profile['network.proxy.socks_port'] = tor_obj[:port]
159
- else
160
- this_profile['network.proxy.ftp'] = URI(proxy).host
161
- this_profile['network.proxy.ftp_port'] = URI(proxy).port
162
- this_profile['network.proxy.http'] = URI(proxy).host
163
- this_profile['network.proxy.http_port'] = URI(proxy).port
164
- this_profile['network.proxy.ssl'] = URI(proxy).host
165
- this_profile['network.proxy.ssl_port'] = URI(proxy).port
166
- end
167
- end
168
-
169
- # Private browsing mode
170
- args.push('--private')
171
- options = Selenium::WebDriver::Firefox::Options.new(
172
- args: args,
173
- accept_insecure_certs: true
174
- )
175
-
176
- # This is required for BiDi support
177
- options.web_socket_url = true
178
- options.add_preference('remote.active-protocols', 3)
179
- options.profile = this_profile
180
- driver = Selenium::WebDriver.for(:firefox, options: options)
181
- browser_obj[:browser] = Watir::Browser.new(driver)
182
-
183
- when :chrome
184
- this_profile = Selenium::WebDriver::Chrome::Profile.new
185
- this_profile['download.prompt_for_download'] = false
186
- this_profile['download.default_directory'] = '~/Downloads'
187
-
188
- if proxy
189
- args.push("--host-resolver-rules='MAP * 0.0.0.0 , EXCLUDE #{tor_obj[:ip]}'") if tor_obj
190
- args.push("--proxy-server=#{proxy}")
191
- end
192
-
193
- # Incognito browsing mode
194
- args.push('--incognito')
195
- options = Selenium::WebDriver::Chrome::Options.new(
196
- args: args,
197
- accept_insecure_certs: true
198
- )
199
-
200
- if devtools
201
- args.push('--auto-open-devtools-for-tabs')
202
- args.push('--disable-hang-monitor')
203
- options.add_preference('devtools.preferences.enable-ignore-listing', false)
204
- options.add_preference('devtools.preferences.default-indentation', '2 spaces')
205
- end
206
-
207
- # This is required for BiDi support
208
- options.web_socket_url = true
209
- options.add_preference('remote.active-protocols', 3)
210
- options.profile = this_profile
211
- driver = Selenium::WebDriver.for(:chrome, options: options)
212
- browser_obj[:browser] = Watir::Browser.new(driver)
213
-
214
- when :headless, :headless_firefox
215
- this_profile = Selenium::WebDriver::Firefox::Profile.new
216
-
217
- # Increase Web Assembly Verbosity
218
- this_profile['javascript.options.wasm_verbose'] = true
219
-
220
- # Downloads reside in ~/Downloads
221
- this_profile['browser.download.folderList'] = 1
222
- this_profile['browser.helperApps.neverAsk.saveToDisk'] = 'application/pdf'
223
-
224
- # disable Firefox's built-in PDF viewer
225
- this_profile['pdfjs.disabled'] = true
226
-
227
- # disable Adobe Acrobat PDF preview plugin
228
- this_profile['plugin.scan.plid.all'] = false
229
- this_profile['plugin.scan.Acrobat'] = '99.0'
230
-
231
- # ensure localhost proxy capabilities are enabled
232
- this_profile['network.proxy.no_proxies_on'] = ''
233
-
234
- # allow scripts to run a bit longer
235
- # this_profile['dom.max_chrome_script_run_time'] = 180
236
- # this_profile['dom.max_script_run_time'] = 180
237
-
238
- # disable browser cache
239
- this_profile['browser.cache.disk.enable'] = false
240
- this_profile['browser.cache.disk_cache_ssl.enable'] = false
241
- this_profile['browser.cache.memory.enable'] = false
242
- this_profile['browser.cache.offline.enable'] = false
243
- this_profile['devtools.cache.disabled'] = true
244
- this_profile['dom.caches.enabled'] = false
245
-
246
- if proxy
247
- this_profile['network.proxy.type'] = 1
248
- this_profile['network.proxy.allow_hijacking_localhost'] = true
249
- if tor_obj
250
- this_profile['network.proxy.socks_version'] = 5
251
- this_profile['network.proxy.socks'] = tor_obj[:ip]
252
- this_profile['network.proxy.socks_port'] = tor_obj[:port]
253
- else
254
- this_profile['network.proxy.ftp'] = URI(proxy).host
255
- this_profile['network.proxy.ftp_port'] = URI(proxy).port
256
- this_profile['network.proxy.http'] = URI(proxy).host
257
- this_profile['network.proxy.http_port'] = URI(proxy).port
258
- this_profile['network.proxy.ssl'] = URI(proxy).host
259
- this_profile['network.proxy.ssl_port'] = URI(proxy).port
260
- end
261
- end
262
-
263
- args.push('--headless')
264
- # Private browsing mode
265
- args.push('--private')
266
- options = Selenium::WebDriver::Firefox::Options.new(
267
- args: args,
268
- accept_insecure_certs: true
269
- )
270
-
271
- # This is required for BiDi support
272
- options.web_socket_url = true
273
- options.add_preference('remote.active-protocols', 3)
274
- options.profile = this_profile
275
- driver = Selenium::WebDriver.for(:firefox, options: options)
276
- browser_obj[:browser] = Watir::Browser.new(driver)
277
-
278
- when :headless_chrome
279
- this_profile = Selenium::WebDriver::Chrome::Profile.new
280
- this_profile['download.prompt_for_download'] = false
281
- this_profile['download.default_directory'] = '~/Downloads'
282
-
283
- if proxy
284
- args.push("--host-resolver-rules='MAP * 0.0.0.0 , EXCLUDE #{tor_obj[:ip]}'") if tor_obj
285
- args.push("--proxy-server=#{proxy}")
286
- end
287
-
288
- args.push('--headless')
289
- # Incognito browsing mode
290
- args.push('--incognito')
291
- options = Selenium::WebDriver::Chrome::Options.new(
292
- args: args,
293
- accept_insecure_certs: true
294
- )
295
-
296
- # This is required for BiDi support
297
- options.web_socket_url = true
298
- options.add_preference('remote.active-protocols', 3)
299
- options.profile = this_profile
300
- driver = Selenium::WebDriver.for(:chrome, options: options)
301
- browser_obj[:browser] = Watir::Browser.new(driver)
302
-
303
- when :rest
304
- browser_obj[:browser] = RestClient
305
- if proxy
306
- if tor_obj
307
- TCPSocket.socks_server = tor_obj[:ip]
308
- TCPSocket.socks_port = tor_obj[:port]
309
- else
310
- browser_obj[:browser].proxy = proxy
311
- end
312
- end
313
-
314
- when :websocket
315
- if proxy
316
- if tor_obj
317
- TCPSocket.socks_server = tor_obj[:ip]
318
- TCPSocket.socks_port = tor_obj[:port]
319
- end
320
- proxy_opts = { origin: proxy }
321
- tls_opts = { verify_peer: false }
322
- browser_obj[:browser] = Faye::WebSocket::Client.new(
323
- '',
324
- [],
325
- {
326
- tls: tls_opts,
327
- proxy: proxy_opts
328
- }
329
- )
330
- else
331
- browser_obj[:browser] = Faye::WebSocket::Client.new('')
332
- end
333
- else
334
- puts 'Error: browser_type only supports :firefox, :chrome, :headless, :headless_chrome, :headless_firefox, :rest, :websocket'
335
- return nil
336
- end
337
-
338
- if devtools && devtools_supported.include?(browser_type)
339
- chrome_types = %i[chrome headless_chrome]
340
- firefox_types = %i[firefox headless_firefox]
341
-
342
- # Switch to the last opened window which should be the active tab
343
- # if it doesn't work, try the first window handle. In chrome they
344
- # get reversed sometimes ¯\_(ツ)_/¯
345
- target_window_handle = browser_obj[:browser].driver.window_handles.last
346
- begin
347
- browser_obj[:browser].driver.switch_to.window(target_window_handle)
348
-
349
- url = 'about:about'
350
- url = 'chrome://chrome-urls' if chrome_types.include?(browser_type)
351
- browser_obj[:browser].goto(url)
352
- rescue Selenium::WebDriver::Error::WebDriverError
353
- target_window_handle = browser_obj[:browser].driver.window_handles.first
354
- retry
355
- end
356
-
357
- rand_tab = SecureRandom.hex(8)
358
- browser_obj[:browser].execute_script("document.title = 'about:about-#{rand_tab}'")
359
-
360
- browser_obj[:browser].driver.manage.window.maximize
361
- toggle_devtools(browser_obj: browser_obj)
362
-
363
- browser_obj[:bidi] = browser_obj[:browser].driver.bidi
364
- browser_obj[:devtools] = browser_obj[:browser].driver.devtools if chrome_types.include?(browser_type)
365
- browser_obj[:devtools] = browser_obj[:browser].driver.bidi if firefox_types.include?(browser_type)
366
- end
367
-
368
- browser_obj
369
- rescue StandardError => e
370
- puts e.backtrace
371
- raise e
372
- end
373
-
374
- # Supported Method Parameters::
375
- # browser_obj = PWN::Plugins::TransparentBrowser.dump_links(
376
- # browser_obj: browser_obj1
377
- # )
378
-
379
- public_class_method def self.dump_links(opts = {})
380
- browser_obj = opts[:browser_obj]
381
-
382
- dump_links_arr = []
383
- browser_obj[:browser].links.each do |link|
384
- link_hash = {}
385
-
386
- link_hash[:text] = link.text
387
- link_hash[:href] = link.href
388
- link_hash[:id] = link.id
389
- link_hash[:name] = link.name
390
- link_hash[:class_name] = link.class_name
391
- link_hash[:html] = link.html
392
- link_hash[:target] = link.target
393
- dump_links_arr.push(link_hash)
394
-
395
- yield link if block_given?
396
- end
397
-
398
- dump_links_arr
399
- rescue StandardError => e
400
- raise e
401
- end
402
-
403
- # Supported Method Parameters::
404
- # browser_obj = PWN::Plugins::TransparentBrowser.find_elements_by_text(
405
- # browser_obj: browser_obj1,
406
- # text: 'required - text to search for in the DOM'
407
- # )
408
-
409
- public_class_method def self.find_elements_by_text(opts = {})
410
- browser_obj = opts[:browser_obj]
411
- text = opts[:text].to_s
412
-
413
- elements = browser_obj[:browser].elements
414
- elements_found_arr = []
415
- elements.each do |element|
416
- begin
417
- if element.text == text || element.value == text
418
- element_hash = {}
419
- element_hash[:tag_name] = element.tag_name
420
- element_hash[:html] = element.html
421
- elements_found_arr.push(element_hash)
422
-
423
- yield element if block_given?
424
- end
425
- rescue NoMethodError
426
- next
427
- end
428
- end
429
-
430
- elements_found_arr
431
- rescue StandardError => e
432
- puts e.backtrace
433
- raise e
434
- end
435
-
436
- # Supported Method Parameters::
437
- # PWN::Plugins::TransparentBrowser.type_as_human(
438
- # string: 'required - string to type as human',
439
- # rand_sleep_float: 'optional - float timing in between keypress (defaults to 0.09)'
440
- # )
441
-
442
- public_class_method def self.type_as_human(opts = {})
443
- string = opts[:string].to_s
444
-
445
- rand_sleep_float = if opts[:rand_sleep_float]
446
- opts[:rand_sleep_float].to_f
447
- else
448
- 0.09
449
- end
450
-
451
- string.each_char do |char|
452
- yield char
453
-
454
- sleep Random.rand(rand_sleep_float)
455
- end
456
- rescue StandardError => e
457
- raise e
458
- end
459
-
460
- # Supported Method Parameters::
461
- # console_resp = PWN::Plugins::TransparentBrowser.console(
462
- # browser_obj: browser_obj1,
463
- # js: 'required - JavaScript expression to evaluate',
464
- # return_to: 'optional - return to :console or :stdout (defaults to :console)'
465
- # )
466
-
467
- public_class_method def self.console(opts = {})
468
- browser_obj = opts[:browser_obj]
469
- verified = verify_devtools_browser(browser_obj: browser_obj)
470
- puts 'This browser is not supported for DevTools operations.' unless verified
471
- return unless verified
472
-
473
- js = opts[:js] ||= "alert('ACK from => #{self}')"
474
- return_to = opts[:return_to] ||= :console
475
- raise 'ERROR: return_to parameter must be :console or :stdout' unless %i[console stdout].include?(return_to.to_s.downcase.to_sym)
476
-
477
- case js
478
- when 'clear', 'clear;', 'clear()', 'clear();'
479
- script = 'console.clear()'
480
- when 'debugger', 'debugger;', 'debugger()', 'debugger();'
481
- script = 'debugger'
482
- else
483
- case return_to.to_s.downcase.to_sym
484
- when :stdout
485
- script = "return #{js}"
486
- when :console
487
- script = "console.log(#{js})"
488
- end
489
- end
490
-
491
- console_resp = nil
492
- begin
493
- Timeout.timeout(1) { console_resp = browser_obj[:browser].execute_script(script) }
494
- rescue Timeout::Error, Timeout::ExitException
495
- console_resp
496
- rescue Selenium::WebDriver::Error::JavascriptError
497
- script = js
498
- retry
499
- end
500
-
501
- console_resp
502
- rescue StandardError => e
503
- raise e
504
- end
505
-
506
- # Supported Method Parameters:
507
- # console_resp = PWN::Plugins::TransparentBrowser.view_dom_mutations(
508
- # browser_obj: 'required - browser_obj returned from #open method',
509
- # index: 'optional - index of tab to switch to (defaults to active tab)',
510
- # target: 'optional - target JavaScript node to observe (defaults to document.body)',
511
- # observe_clobbering: 'optional - boolean to enable DOM Clobbering detection (defaults to true)',
512
- # observe_redirects: 'optional - boolean to enable Insecure Redirect detection (defaults to true)',
513
- # observe_resources: 'optional - boolean to enable resource load monitoring (defaults to true)'
514
- # )
515
-
516
- public_class_method def self.view_dom_mutations(opts = {})
517
- browser_obj = opts[:browser_obj]
518
- verified = verify_devtools_browser(browser_obj: browser_obj)
519
- puts 'This browser is not supported for DevTools operations.' unless verified
520
- return unless verified
521
-
522
- index = opts[:index]
523
- jmp_tab(browser_obj: browser_obj, index: index) if index
524
-
525
- target = opts[:target] ||= 'undefined'
526
- observe_clobbering = opts.fetch(:observe_clobbering, true)
527
- observe_redirects = opts.fetch(:observe_redirects, true)
528
- observe_resources = opts.fetch(:observe_resources, true)
529
-
530
- jmp_devtools_panel(
531
- browser_obj: browser_obj,
532
- panel: :console
533
- )
534
-
535
- js = <<~JAVASCRIPT
536
- // Select the target node to observe (default to document.body)
537
- const targetNode = document.getElementById(#{target}) || document.body;
538
-
539
- // Configuration for MutationObserver
540
- const config = {
541
- attributes: true,
542
- childList: true,
543
- subtree: true,
544
- characterData: true,
545
- attributeOldValue: true
546
- };
547
-
548
- // Exhaustive list of elements that can execute scripts or load resources
549
- const xssElements = [
550
- 'SCRIPT', 'IFRAME', 'FRAME', 'OBJECT', 'EMBED', 'APPLET', 'SVG', 'IMG', 'VIDEO', 'AUDIO', 'LINK', 'META', 'BASE',
551
- 'INPUT', 'SOURCE', 'TRACK', 'FORM', 'BUTTON', 'AREA', 'NOSCRIPT', 'STYLE', 'HTML', 'BODY'
552
- ];
553
-
554
- // Exhaustive list of attributes that can contain URLs, scripts, or event handlers
555
- const xssAttributes = [
556
- 'src', 'href', 'action', 'srcdoc', 'data', 'codebase', 'style', 'manifest', 'poster', 'background', 'lowsrc',
557
- 'formaction', 'cite', 'ping', 'icon', 'longdesc', 'usemap', 'content', 'value', 'pattern',
558
- 'onload', 'onerror', 'onclick', 'onmouseover', 'onmouseout', 'onfocus', 'onblur', 'onchange', 'onsubmit', 'onreset',
559
- 'onselect', 'ondblclick', 'onkeydown', 'onkeypress', 'onkeyup', 'onmousedown', 'onmousemove', 'onmouseup', 'onwheel',
560
- 'oncontextmenu', 'ondrag', 'ondragend', 'ondragenter', 'ondragleave', 'ondragover', 'ondragstart', 'ondrop', 'onscroll',
561
- 'ontouchstart', 'ontouchmove', 'ontouchend', 'ontouchcancel', 'onanimationstart', 'onanimationend', 'onanimationiteration',
562
- 'ontransitionend'
563
- ];
564
-
565
- // Attributes that can cause navigation (for insecure redirects)
566
- const redirectAttributes = ['href', 'action', 'src', 'formaction', 'content'];
567
-
568
- // Attributes that load resources (for data exfiltration)
569
- const resourceAttributes = ['src', 'href', 'poster', 'data', 'background', 'lowsrc', 'cite', 'ping', 'icon', 'longdesc'];
570
-
571
- // Global properties that could be clobbered
572
- const globalProperties = [
573
- 'document', 'window', 'location', 'navigator', 'history', 'screen', 'console', 'alert', 'confirm', 'prompt',
574
- 'fetch', 'XMLHttpRequest', 'WebSocket', 'localStorage', 'sessionStorage'
575
- ];
576
-
577
- // Callback function to handle mutations
578
- const callback = (mutationList, observer) => {
579
- mutationList.forEach((mutation) => {
580
- if (mutation.type === 'childList') {
581
- if (mutation.addedNodes.length) {
582
- mutation.addedNodes.forEach((node) => {
583
- if (node.nodeType === Node.ELEMENT_NODE) {
584
- const tagName = node.tagName.toUpperCase();
585
- // Check for XSS sinks
586
- if (xssElements.includes(tagName)) {
587
- console.warn('Potential DOM-XSS sink: Added element', {
588
- tagName: tagName,
589
- id: node.id || 'N/A',
590
- classList: node.className || 'N/A',
591
- outerHTML: node.outerHTML
592
- });
593
- }
594
- // Check for DOM Clobbering
595
- if (#{observe_clobbering} && (node.id || node.name) && globalProperties.includes(node.id || node.name)) {
596
- console.warn('Potential DOM Clobbering: Added element with id/name', {
597
- id: node.id || 'N/A',
598
- name: node.name || 'N/A',
599
- tagName: tagName,
600
- outerHTML: node.outerHTML
601
- });
602
- }
603
- }
604
- });
605
- }
606
- } else if (mutation.type === 'attributes') {
607
- const attrName = mutation.attributeName.toLowerCase();
608
- const tagName = mutation.target.tagName.toUpperCase();
609
- // Check for XSS sinks
610
- if (xssAttributes.includes(attrName)) {
611
- console.warn('Potential DOM-XSS sink: Attribute change', {
612
- element: tagName,
613
- id: mutation.target.id || 'N/A',
614
- attribute: attrName,
615
- oldValue: mutation.oldValue,
616
- newValue: mutation.target.getAttribute(attrName),
617
- outerHTML: mutation.target.outerHTML
618
- });
619
- }
620
- // Check for insecure redirects
621
- if (#{observe_redirects} && redirectAttributes.includes(attrName) &&
622
- (tagName === 'A' || tagName === 'FORM' || tagName === 'IFRAME' || tagName === 'BUTTON' || tagName === 'INPUT' ||
623
- (tagName === 'META' && mutation.target.getAttribute('http-equiv') === 'refresh'))) {
624
- console.warn('Potential Insecure Redirect: Attribute change', {
625
- element: tagName,
626
- id: mutation.target.id || 'N/A',
627
- attribute: attrName,
628
- oldValue: mutation.oldValue,
629
- newValue: mutation.target.getAttribute(attrName),
630
- outerHTML: mutation.target.outerHTML
631
- });
632
- }
633
- // Check for resource loads (data exfiltration)
634
- if (#{observe_resources} && resourceAttributes.includes(attrName)) {
635
- console.warn('Potential Resource Load (Data Exfiltration): Attribute change', {
636
- element: tagName,
637
- id: mutation.target.id || 'N/A',
638
- attribute: attrName,
639
- oldValue: mutation.oldValue,
640
- newValue: mutation.target.getAttribute(attrName),
641
- outerHTML: mutation.target.outerHTML
642
- });
643
- }
644
- } else if (mutation.type === 'characterData') {
645
- if (mutation.target.parentElement) {
646
- const parentTag = mutation.target.parentElement.tagName.toUpperCase();
647
- if (parentTag === 'SCRIPT') {
648
- console.warn('Potential DOM-XSS sink: Script content changed', {
649
- scriptId: mutation.target.parentElement.id || 'N/A',
650
- oldValue: mutation.oldValue,
651
- newValue: mutation.target.textContent
652
- });
653
- } else if (parentTag === 'STYLE') {
654
- console.warn('Potential DOM-XSS sink: Style content changed', {
655
- styleId: mutation.target.parentElement.id || 'N/A',
656
- oldValue: mutation.oldValue,
657
- newValue: mutation.target.textContent
658
- });
659
- }
660
- }
661
- }
662
- });
663
- };
664
-
665
- // Create and start the MutationObserver
666
- const observer = new MutationObserver(callback);
667
- observer.observe(targetNode, config);
668
-
669
- // Function to stop the observer
670
- window.hide_dom_mutations = () => {
671
- observer.disconnect();
672
- console.log('MutationObserver stopped.');
673
- };
674
-
675
- // Log instructions to console
676
- console.log('MutationObserver started for DOM-based vulnerabilities. To stop, run: hide_dom_mutations()');
677
- JAVASCRIPT
678
-
679
- console(browser_obj: browser_obj, js: 'clear();')
680
- browser_obj[:browser].execute_script(js)
681
- rescue StandardError => e
682
- raise e
683
- end
684
-
685
- # Supported Method Parameters::
686
- # console_resp = PWN::Plugins::TransparentBrowser.hide_dom_mutations(
687
- # browser_obj: browser_obj1,
688
- # index: 'optional - index of tab to switch to (defaults to active tab)'
689
- # )
690
-
691
- public_class_method def self.hide_dom_mutations(opts = {})
692
- browser_obj = opts[:browser_obj]
693
- verified = verify_devtools_browser(browser_obj: browser_obj)
694
- puts 'This browser is not supported for DevTools operations.' unless verified
695
- return unless verified
696
-
697
- index = opts[:index]
698
- jmp_tab(browser_obj: browser_obj, index: index) if index
699
-
700
- jmp_devtools_panel(
701
- browser_obj: browser_obj,
702
- panel: :console
703
- )
704
-
705
- js = <<~JAVASCRIPT
706
- if (typeof hide_dom_mutations === 'function') {
707
- hide_dom_mutations();
708
- console.log('DOM mutation observer and event listeners disabled.');
709
- } else {
710
- console.log('Error: hide_dom_mutations function not found. DOM mutation observer was not active.');
711
- }
712
- JAVASCRIPT
713
-
714
- console(browser_obj: browser_obj, js: 'clear();')
715
- browser_obj[:browser].execute_script(js)
716
- rescue StandardError => e
717
- raise e
718
- end
719
- # Supported Method Parameters::
720
- # PWN::Plugins::TransparentBrowser.update_about_config(
721
- # browser_obj: browser_obj1,
722
- # key: 'required - key to update in about:config',
723
- # value: 'required - value to set for key in about:config'
724
- # )
725
-
726
- public_class_method def self.update_about_config(opts = {})
727
- browser_obj = opts[:browser_obj]
728
- supported = %i[firefox headless_firefox]
729
- verified = verify_devtools_browser(browser_obj: browser_obj, supported: supported)
730
- puts 'This browser is not supported for DevTools operations.' unless verified
731
- return unless verified
732
-
733
- key = opts[:key]
734
- raise 'ERROR: key parameter is required' if key.nil?
735
-
736
- value = opts[:value]
737
- raise 'ERROR: value parameter is required' if value.nil?
738
-
739
- browser_type = browser_obj[:type]
740
- # chrome_types = %i[chrome headless_chrome]
741
- firefox_types = %i[firefox headless_firefox]
742
-
743
- browser_obj[:browser].goto('about:config')
744
- # Confirmed working in Firefox
745
- js = %{Services.prefs.setStringPref("#{key}", "#{value}")} if firefox_types.include?(browser_type)
746
- console(browser_obj: browser_obj, js: js)
747
- browser_obj[:browser].back
748
- rescue Timeout::Error, Timeout::ExitException
749
- console_resp
750
- rescue StandardError => e
751
- raise e
752
- end
753
-
754
- # Supported Method Parameters::
755
- # tabs = PWN::Plugins::TransparentBrowser.list_tabs(
756
- # browser_obj: 'required - browser_obj returned from #open method)'
757
- # )
758
-
759
- public_class_method def self.list_tabs(opts = {})
760
- browser_obj = opts[:browser_obj]
761
- verified = verify_devtools_browser(browser_obj: browser_obj)
762
- puts 'This browser is not supported for DevTools operations.' unless verified
763
- return unless verified
764
-
765
- current_window_handle = browser_obj[:browser].driver.window_handle
766
-
767
- tabs_arr_hash = []
768
- browser_obj[:browser].driver.window_handles.each do |window_handle|
769
- # Skip DevTools tabs
770
- browser_obj[:browser].driver.switch_to.window(window_handle)
771
- title = browser_obj[:browser].execute_script('return document.title')
772
- url = browser_obj[:browser].execute_script('return document.location.href')
773
- next if url.include?('devtools://')
774
-
775
- # Get title and URL without switching tabs
776
-
777
- state = window_handle == current_window_handle ? :active : :inactive
778
-
779
- tabs_arr_hash << { index: window_handle, title: title, url: url, state: state }
780
- ensure
781
- # Ensure we return to the original active tab
782
- browser_obj[:browser].driver.switch_to.window(current_window_handle)
783
- end
784
-
785
- # Ensure we have a visible tab that's active
786
- active_tab = tabs_arr_hash.find { |tab| tab[:state] == :active } || tabs_arr_hash.first
787
- # Switch to the active tab if it exists
788
- browser_obj[:browser].driver.switch_to.window(active_tab[:index]) if active_tab
789
-
790
- tabs_arr_hash
791
- rescue Selenium::WebDriver::Error::NoSuchWindowError => e
792
- puts "Error: No valid window handles available (#{e.message})"
793
- [] # Return empty array if no tabs are available
794
- rescue StandardError => e
795
- raise "Failed to list tabs: #{e.message}"
796
- end
797
-
798
- # Supported Method Parameters::
799
- # tab = PWN::Plugins::TransparentBrowser.jmp_tab(
800
- # browser_obj: 'required - browser_obj returned from #open method)',
801
- # index: 'optional - index of tab to switch to (defaults to switching to next tab)',
802
- # keyword: 'optional - keyword in title or url used to switch tabs (defaults to switching to next tab)'
803
- # )
804
-
805
- public_class_method def self.jmp_tab(opts = {})
806
- browser_obj = opts[:browser_obj]
807
- verified = verify_devtools_browser(browser_obj: browser_obj)
808
- puts 'This browser is not supported for DevTools operations.' unless verified
809
- return unless verified
810
-
811
- index = opts[:index]
812
- keyword = opts[:keyword]
813
-
814
- tabs_arr_hash = list_tabs(browser_obj: browser_obj)
815
-
816
- if index.nil? && keyword.nil?
817
- # If no keyword is provided, switch to the next tab in the list
818
- active_tab_index = tabs_arr_hash.find_index { |tab| tab[:state] == :active }
819
- next_tab_index = (active_tab_index + 1) % tabs_arr_hash.size
820
- # Find value of :index key from tabs_arr_hash
821
- tab_sel = tabs_arr_hash[next_tab_index]
822
- elsif index
823
- tab_sel = tabs_arr_hash.find { |tab| tab[:index] == index }
824
- else
825
- tab_sel = tabs_arr_hash.find { |tab| tab[:title].include?(keyword) || tab[:url].include?(keyword) }
826
- end
827
-
828
- if tab_sel.is_a?(Hash) && tab_sel[:index]
829
- index = tab_sel[:index]
830
- browser_obj[:browser].driver.switch_to.window(index)
831
- else
832
- tab_sel = { index: index, error: 'not found' }
833
- end
834
-
835
- tab_sel
836
- rescue StandardError => e
837
- raise e
838
- end
839
-
840
- # Supported Method Parameters::
841
- # tab = PWN::Plugins::TransparentBrowser.new_tab(
842
- # browser_obj: 'required - browser_obj returned from #open method)',
843
- # url: 'optional - URL to open in new tab'
844
- # )
845
-
846
- public_class_method def self.new_tab(opts = {})
847
- browser_obj = opts[:browser_obj]
848
- verified = verify_devtools_browser(browser_obj: browser_obj)
849
- puts 'This browser is not supported for DevTools operations.' unless verified
850
- return unless verified
851
-
852
- url = opts[:url]
853
- chrome_types = %i[chrome headless_chrome]
854
- firefox_types = %i[firefox headless_firefox]
855
-
856
- browser_type = browser_obj[:type]
857
-
858
- if url.nil? || url.empty?
859
- url = 'about:about' if firefox_types.include?(browser_type)
860
- url = 'chrome://chrome-urls/' if chrome_types.include?(browser_type)
861
- end
862
-
863
- # Open a new tab
864
- console(
865
- browser_obj: browser_obj,
866
- js: "window.open('#{url}', '_blank')",
867
- return_to: :stdout
868
- )
869
-
870
- # tabs_arr_hash = list_tabs(browser_obj: browser_obj)
871
- # new_tab_index = tabs_arr_hash.find { |tab| tab[:state] == :inactive && tab[:url] == url }[:index]
872
- # jmp_tab(browser_obj: browser_obj, index: new_tab_index)
873
- jmp_tab(browser_obj: browser_obj)
874
- new_tab_index = browser_obj[:browser].driver.window_handles.last
875
-
876
- rand_tab = SecureRandom.hex(8)
877
- browser_obj[:browser].execute_script("document.title = 'about:about-#{rand_tab}'")
878
- toggle_devtools(browser_obj: browser_obj) if browser_obj[:devtools]
879
-
880
- { index: new_tab_index, title: browser_obj[:browser].title, url: browser_obj[:browser].url, state: :active }
881
- rescue StandardError => e
882
- puts e.backtrace
883
- raise e
884
- end
885
-
886
- # Supported Method Parameters::
887
- # tab = PWN::Plugins::TransparentBrowser.close_tab(
888
- # browser_obj: 'required - browser_obj returned from #open method)',
889
- # index: 'optional - index of tab to close (defaults to closing active tab)',
890
- # keyword: 'optional - keyword in title or url used to close tabs (defaults to closing active tab)'
891
- # )
892
-
893
- public_class_method def self.close_tab(opts = {})
894
- browser_obj = opts[:browser_obj]
895
- verified = verify_devtools_browser(browser_obj: browser_obj)
896
- puts 'This browser is not supported for DevTools operations.' unless verified
897
- return unless verified
898
-
899
- index = opts[:index]
900
- keyword = opts[:keyword]
901
-
902
- tabs_arr_hash = list_tabs(browser_obj: browser_obj)
903
- browser_ready_to_close = true if tabs_arr_hash.length == 1
904
-
905
- if browser_ready_to_close
906
- close(browser_obj: browser_obj)
907
- return [{ index: nil, title: nil, url: nil, state: :browser_closed }]
908
- elsif index.nil? && keyword.nil?
909
- index = browser_obj[:browser].driver.window_handle
910
- browser_obj[:browser].driver.switch_to.window(index)
911
- browser_obj[:browser].driver.close
912
- new_tab_index_arr = browser_obj[:browser].driver.window_handles
913
- if new_tab_index_arr.any?
914
- new_tab_index = new_tab_index_arr.last
915
- browser_obj[:browser].driver.switch_to.window(new_tab_index)
916
- end
917
- elsif index
918
- browser_obj[:browser].driver.switch_to.window(index)
919
- browser_obj[:browser].driver.close
920
- new_tab_index_arr = browser_obj[:browser].driver.window_handles
921
- if new_tab_index_arr.any?
922
- new_tab_index = new_tab_index_arr.last
923
- browser_obj[:browser].driver.switch_to.window(new_tab_index)
924
- end
925
- else
926
- active_tab = tabs_arr_hash.find { |tab| tab[:state] == :active }
927
- if active_tab[:url].include?(keyword)
928
- inactive_tabs = tabs_arr_hash.reject { |tab| tab[:url] == browser_obj[:browser].url }
929
- if inactive_tabs.any?
930
- tab_to_activate = inactive_tabs.last[:url]
931
- jmp_tab(browser_obj: browser_obj, keyword: tab_to_activate)
932
- end
933
- end
934
- all_tabs = browser_obj[:browser].windows
935
-
936
- tabs_to_close = all_tabs.select { |tab| tab.title.include?(keyword) || tab.url.include?(keyword) }
937
- tabs_to_close.each(&:close)
938
- end
939
-
940
- list_tabs(browser_obj: browser_obj)
941
- rescue StandardError => e
942
- raise e
943
- end
944
-
945
- # Supported Method Parameters::
946
- # current_dom = PWN::Plugins::TransparentBrowser.dom(
947
- # browser_obj: 'required - browser_obj returned from #open method)'
948
- # )
949
-
950
- public_class_method def self.dom(opts = {})
951
- browser_obj = opts[:browser_obj]
952
- verified = verify_devtools_browser(browser_obj: browser_obj)
953
- puts 'This browser is not supported for DevTools operations.' unless verified
954
- return unless verified
955
-
956
- dom_str = console(browser_obj: browser_obj, js: 'document.documentElement.outerHTML', return_to: :stdout)
957
- raise 'DOM capture failed: returned nil or empty string. Check DevTools connection.' if dom_str.nil? || dom_str.strip.empty?
958
-
959
- Nokogiri::HTML.parse(dom_str)
960
- rescue StandardError => e
961
- raise e
962
- end
963
-
964
- # Supported Method Parameters::
965
- # page_state = PWN::Plugins::TransparentBrowser.get_page_state(
966
- # browser_obj: 'required - browser_obj returned from #open method)'
967
- # )
968
-
969
- public_class_method def self.get_page_state(opts = {})
970
- browser_obj = opts[:browser_obj]
971
- verified = verify_devtools_browser(browser_obj: browser_obj)
972
- puts 'This browser is not supported for DevTools operations.' unless verified
973
- return unless verified
974
-
975
- js = <<~JS.strip
976
- (function() {
977
- try {
978
- let ls = {};
979
- for (let i = 0; i < localStorage.length; i++) {
980
- let key = localStorage.key(i);
981
- ls[key] = localStorage.getItem(key);
982
- }
983
- let ss = {};
984
- for (let i = 0; i < sessionStorage.length; i++) {
985
- let key = sessionStorage.key(i);
986
- ss[key] = sessionStorage.getItem(key);
987
- }
988
-
989
- let scripts = Array.from(document.scripts).map(s => ({
990
- src: s.src,
991
- innerHTML: s.innerHTML
992
- })).filter(s => s.src || s.innerHTML);
993
-
994
- let stylesheets = Array.from(document.querySelectorAll('link[rel="stylesheet"]')).map(l => l.href).filter(h => h);
995
-
996
- let inline_styles = Array.from(document.querySelectorAll('style')).map(s => s.innerHTML).filter(c => c);
997
-
998
- let forms = Array.from(document.forms).map(f => ({
999
- action: f.action,
1000
- method: f.method,
1001
- elements: Array.from(f.elements).map(e => ({
1002
- name: e.name,
1003
- type: e.type,
1004
- value: e.value
1005
- }))
1006
- }));
1007
-
1008
- let iframes = Array.from(document.querySelectorAll('iframe')).map(i => i.src).filter(s => s);
1009
-
1010
- let csp_meta = document.querySelector('meta[http-equiv="Content-Security-Policy"]');
1011
- let csp = csp_meta ? csp_meta.content : null;
1012
-
1013
- let feature_policy = [];
1014
- if (document.featurePolicy) {
1015
- feature_policy = document.featurePolicy.allowedFeatures().sort();
1016
- }
1017
-
1018
- let is_framed = false;
1019
- try {
1020
- if (window.top !== window.self) {
1021
- is_framed = true;
1022
- }
1023
- } catch (e) {
1024
- is_framed = true;
1025
- }
1026
-
1027
- let resources = window.performance.getEntriesByType('resource').map(e => ({
1028
- name: e.name,
1029
- initiatorType: e.initiatorType
1030
- }));
1031
-
1032
- // Enhanced globals capture with values
1033
- let globals = {};
1034
- let propNames = Object.getOwnPropertyNames(window).sort();
1035
- const safeStringify = (value, depth = 0) => {
1036
- if (depth > 5) return '[Max depth exceeded]'; // Prevent deep recursion
1037
- try {
1038
- return JSON.stringify(value, (key, val) => {
1039
- if (typeof val === 'function') {
1040
- return val.toString(); // Capture function source
1041
- } else if (typeof val === 'symbol') {
1042
- return val.toString();
1043
- } else if (val === window) {
1044
- return '[Window reference]'; // Avoid circularity
1045
- } else if (val && typeof val === 'object') {
1046
- if (depth > 5) return '[Object (depth limit)]';
1047
- return val; // Let JSON handle, recurse with depth
1048
- }
1049
- return val;
1050
- });
1051
- } catch (e) {
1052
- return '[Stringify error: ' + e.message + ']';
1053
- }
1054
- };
1055
-
1056
- for (let name of propNames) {
1057
- try {
1058
- let value = window[name];
1059
- globals[name] = safeStringify(value);
1060
- } catch (e) {
1061
- globals[name] = '[Access error: ' + e.message + ']';
1062
- }
1063
- }
1064
-
1065
- return JSON.stringify({
1066
- cookies: document.cookie,
1067
- localStorage: ls,
1068
- sessionStorage: ss,
1069
- globals: globals, // Now an object with name: stringified_value
1070
- scripts: scripts,
1071
- stylesheets: stylesheets,
1072
- inline_styles: inline_styles,
1073
- stack: new Error().stack,
1074
- location: {
1075
- href: location.href,
1076
- origin: location.origin,
1077
- pathname: location.pathname,
1078
- search: location.search,
1079
- hash: location.hash
1080
- },
1081
- referrer: document.referrer,
1082
- userAgent: navigator.userAgent,
1083
- html_snapshot: document.documentElement.outerHTML,
1084
- forms: forms,
1085
- iframes: iframes,
1086
- csp: csp,
1087
- feature_policy: feature_policy,
1088
- is_framed: is_framed,
1089
- has_service_worker: 'serviceWorker' in navigator,
1090
- resources: resources
1091
- });
1092
- } catch (e) {
1093
- return JSON.stringify({
1094
- error: e.message,
1095
- stack: e.stack
1096
- });
1097
- }
1098
- })()
1099
- JS
1100
-
1101
- browser_obj[:devtools].send_cmd('Console.clearMessages')
1102
- browser_obj[:devtools].send_cmd('Log.clear')
1103
- console_events = []
1104
- browser_obj[:browser].driver.on_log_event(:console) { |event| console_events.push(event) }
1105
-
1106
- # page_state = console(browser_obj: browser_obj, js: js, return_to: :stdout)
1107
- console_cmd = { expression: js }
1108
- runtime_resp = browser_obj[:devtools].send_cmd('Runtime.evaluate', **console_cmd)
1109
- page_state = runtime_resp['result']['result']['value']
1110
- JSON.parse(page_state, symbolize_names: true)
1111
- rescue JSON::ParserError => e
1112
- raise "Failed to parse state JSON: #{e.message}. Raw output: #{state_json.inspect}"
1113
- rescue StandardError => e
1114
- raise e
1115
- end
1116
-
1117
- # Supported Method Parameters::
1118
- # messages = PWN::Plugins::TransparentBrowser.devtools_websocket_messages(
1119
- # browser_obj: 'required - browser_obj returned from #open method)'
1120
- # )
1121
-
1122
- public_class_method def self.devtools_websocket_messages(opts = {})
1123
- browser_obj = opts[:browser_obj]
1124
- verified = verify_devtools_browser(browser_obj: browser_obj)
1125
- puts 'This browser is not supported for DevTools operations.' unless verified
1126
- return unless verified
1127
-
1128
- devtools = browser_obj[:devtools]
1129
- websocket = devtools.instance_variable_get(:@ws)
1130
- websocket.instance_variable_get(:@messages)[nil]
1131
- rescue StandardError => e
1132
- raise e
1133
- end
1134
-
1135
- # Supported Method Parameters::
1136
- # PWN::Plugins::TransparentBrowser.debugger(
1137
- # browser_obj: 'required - browser_obj returned from #open method)',
1138
- # action: 'optional - action to take :enable|:pause|:resume|:disable (Defaults to :enable)',
1139
- # )
1140
-
1141
- public_class_method def self.debugger(opts = {})
1142
- browser_obj = opts[:browser_obj]
1143
- verified = verify_devtools_browser(browser_obj: browser_obj)
1144
- puts 'This browser is not supported for DevTools operations.' unless verified
1145
- return unless verified
1146
-
1147
- valid_actions = %i[enable pause resume disable]
1148
- action = opts[:action] ||= :enable
1149
- action = action.to_s.downcase.to_sym
1150
- raise 'ERROR: action parameter must be :enable|:pause|:resume|:disable' unless valid_actions.include?(action)
1151
-
1152
- devtools = browser_obj[:devtools]
1153
- debugger_state = devtools.instance_variable_get(:@debugger_state) || {}
1154
- breakpoint_arr = debugger_state[:breakpoints] || []
1155
-
1156
- method = nil
1157
- case action
1158
- when :enable
1159
- devtools.dom.enable
1160
- devtools.log.disable
1161
- devtools.network.disable
1162
- devtools.page.disable
1163
- devtools.runtime.disable
1164
-
1165
- method = 'Debugger.scriptParsed'
1166
- callbacks_to_delete = devtools.callbacks.keys.reject { |k| k == 'Target.atta`chedToTarget' }
1167
- # until devtools.callbacks.keys.include?(method) && breakpoint_arr.any?
1168
- until breakpoint_arr.any?
1169
- callbacks_to_delete.each { |method| devtools.callbacks.delete(method) }
1170
- breakpoint_set = false
1171
- # devtools.dom.disable
1172
- devtools.debugger.disable
1173
- devtools.debugger.on(:script_parsed) do |params|
1174
- url = params['url']
1175
- next if breakpoint_set || url.include?('devtools://') || url.empty?
1176
-
1177
- breakpoint_set = true
1178
- puts url
1179
- bcmd = 'Debugger.setBreakpoint'
1180
- script_id = params['scriptId']
1181
- line = params['startLine']
1182
- column = params['startColumn']
1183
- location = { scriptId: script_id, lineNumber: line, columnNumber: column }
1184
- breakpoint = devtools.send_cmd(bcmd, location: location)
1185
- breakpoint['result']['breakpointId'] = "#{bcmd}.#{script_id}.#{line}.#{column}.#{SecureRandom.uuid}"
1186
- breakpoint['id'] = breakpoint['id'].to_s
1187
- breakpoint['url'] = url
1188
- breakpoint['caught'] = false
1189
- breakpoint_arr.push(breakpoint)
1190
- debugger_state[:breakpoints] = breakpoint_arr
1191
- devtools.instance_variable_set(:@debugger_state, debugger_state)
1192
-
1193
- puts "Breakpoint set in #{url} at line #{line}, column #{column}: #{breakpoint}"
1194
- puts params.inspect
1195
- end
1196
- devtools.debugger.enable
1197
- end
1198
- devtools.callbacks.delete(method)
1199
- method = 'Debugger.enabled'
1200
- when :pause
1201
- method = 'Debugger.paused'
1202
- callbacks_to_delete = devtools.callbacks.keys.reject { |k| k == 'Target.attachedToTarget' }
1203
- Timeout.timeout(30) { browser_obj[:browser].refresh }
1204
- until devtools.callbacks.keys.include?(method) && breakpoint_arr.any? { |bp| bp['caught'] == true }
1205
- devtools.callbacks.delete(method)
1206
- devtools.debugger.resume
1207
- devtools.debugger.on(:paused) do |params|
1208
- breakpoint_id_caught = params['callFrames'].first['location']['scriptId']
1209
- breakpoint_arr.each_with_index do |bp, idx|
1210
- next unless bp['id'] == breakpoint_id_caught
1211
-
1212
- bp['caught'] = true
1213
- breakpoint_arr[idx] = bp
1214
- debugger_state[:breakpoints] = breakpoint_arr
1215
- devtools.instance_variable_set(:@debugger_state, debugger_state)
1216
- end
1217
- # puts "TARGET BREAKPOINTS: #{breakpoint_arr.inspect}"
1218
- # puts "PARAMS Observerd: #{params.inspect}"
1219
- debugger_state = devtools.instance_variable_get(:@debugger_state)
1220
- puts devtools.callbacks.inspect
1221
- puts debugger_state.inspect
1222
- end
1223
- devtools.debugger.pause
1224
- # browser_obj[:browser].refresh
1225
- debugger_state = devtools.instance_variable_get(:@debugger_state)
1226
- breakpoint_arr = debugger_state[:breakpoints]
1227
- end
1228
- devtools.callbacks.delete(method)
1229
- when :resume
1230
- method = 'Debugger.resumed'
1231
- callbacks_to_delete = devtools.callbacks.keys.reject { |k| k == 'Target.attachedToTarget' }
1232
- callbacks_to_delete.each { |method| devtools.callbacks.delete(method) }
1233
- devtools.debugger.resume until devtools.callbacks.keys.include?(method)
1234
- when :disable
1235
- callbacks_to_delete = devtools.callbacks.keys.reject { |k| k == 'Target.attachedToTarget' }
1236
- callbacks_to_delete.each { |method| devtools.callbacks.delete(method) }
1237
- devtools.debugger.disable
1238
- method = 'Debugger.disabled'
1239
- end
1240
-
1241
- devtools
1242
- rescue Selenium::WebDriver::Error::WebDriverError => e
1243
- puts e.message
1244
- rescue StandardError => e
1245
- raise e
1246
- ensure
1247
- debugger_state[:method] = method
1248
- devtools.instance_variable_set(:@debugger_state, debugger_state) if debugger_state.is_a?(Hash)
1249
- end
1250
-
1251
- # Supported Method Parameters::
1252
- # page_state_arr = PWN::Plugins::TransparentBrowser.get_targets(
1253
- # browser_obj: 'required - browser_obj returned from #open method)'
1254
- # )
1255
-
1256
- public_class_method def self.get_targets(opts = {})
1257
- browser_obj = opts[:browser_obj]
1258
- supported = %i[chrome headless_chrome]
1259
- verified = verify_devtools_browser(browser_obj: browser_obj, supported: supported)
1260
- puts 'This browser is not supported for DevTools operations.' unless verified
1261
- return unless verified
1262
-
1263
- devtools = browser_obj[:devtools]
1264
- bcmd = 'Target.getTargets'
1265
- devtools.send_cmd(bcmd)
1266
- rescue StandardError => e
1267
- raise e
1268
- end
1269
-
1270
- # Supported Method Parameters::
1271
- # page_state_arr = PWN::Plugins::TransparentBrowser.breakpoint_locations(
1272
- # browser_obj: 'required - browser_obj returned from #open method)'
1273
- # )
1274
-
1275
- public_class_method def self.breakpoint_locations(opts = {})
1276
- browser_obj = opts[:browser_obj]
1277
- supported = %i[chrome headless_chrome]
1278
- verified = verify_devtools_browser(browser_obj: browser_obj, supported: supported)
1279
- puts 'This browser is not supported for DevTools operations.' unless verified
1280
- return unless verified
1281
-
1282
- valid_methods = %w[Debugger.scriptParsed Debugger.paused Debugger.resumed]
1283
- devtools = browser_obj[:devtools]
1284
- ws_msg = devtools_websocket_messages(browser_obj: browser_obj)
1285
- method = ws_msg['method']
1286
- raise "ERROR: Unsupported method: #{method}" unless valid_methods.include?(method)
1287
-
1288
- case method
1289
- when 'Debugger.resumed', 'Debugger.paused'
1290
- script_id = ws_msg['params']['callFrames'].first['location']['scriptId'].to_s
1291
- when 'Debugger.scriptParsed'
1292
- script_id = ws_msg['params']['scriptId'].to_s
1293
- end
1294
-
1295
- puts "Method: #{method}"
1296
- puts "Fetching possible breakpoints for script ID: #{script_id}..."
1297
- bcmd = 'Debugger.getPossibleBreakpoints'
1298
- devtools.send_cmd(bcmd, start: { scriptId: script_id, lineNumber: 0, columnNumber: 0 })
1299
- rescue StandardError => e
1300
- raise e
1301
- end
1302
-
1303
- # Supported Method Parameters::
1304
- # page_state_arr = PWN::Plugins::TransparentBrowser.step(
1305
- # browser_obj: 'required - browser_obj returned from #open method)',
1306
- # action: 'optional - action to take :into|:out|:over (Defaults to :into)',
1307
- # steps: 'optional - number of steps taken (Defaults to 1)'
1308
- # )
1309
-
1310
- public_class_method def self.step(opts = {})
1311
- browser_obj = opts[:browser_obj]
1312
- supported = %i[chrome headless_chrome]
1313
- verified = verify_devtools_browser(browser_obj: browser_obj, supported: supported)
1314
- puts 'This browser is not supported for DevTools operations.' unless verified
1315
- return unless verified
1316
-
1317
- valid_actions = %i[into out over]
1318
- action = opts[:action] ||= :into
1319
- action = action.to_s.downcase.to_sym
1320
- raise 'ERROR: action parameter must be :into|:out|:over' unless valid_actions.include?(action)
1321
-
1322
- steps = opts[:steps].to_i
1323
- steps = 1 if steps.zero? || steps.negative?
1324
-
1325
- devtools = browser_obj[:devtools]
1326
- ws_msg = devtools_websocket_messages(browser_obj: browser_obj)
1327
- method = ws_msg['method']
1328
-
1329
- debugger_state = devtools.instance_variable_get(:@debugger_state)
1330
- debugger_state[:method] = method
1331
- devtools.instance_variable_set(:@debugger_state, debugger_state)
1332
-
1333
- valid_methods = %w[Debugger.scriptParsed Debugger.paused Debugger.resumed]
1334
- devtools = browser_obj[:devtools]
1335
- ws_msg = devtools_websocket_messages(browser_obj: browser_obj)
1336
- method = ws_msg['method']
1337
- raise "ERROR: Unsupported method: #{method}" unless valid_methods.include?(method)
1338
-
1339
- steps_arr = []
1340
- cursor_termination_chars = %w[; , . ( ) { } = |]
1341
- steps.times do |s|
1342
- step_num = s + 1
1343
- puts "Stepping #{action} (step #{step_num}/#{steps})..."
1344
-
1345
- method = 'Debugger.resumed'
1346
- case action
1347
- when :into
1348
- devtools.debugger.step_into until devtools.callbacks.keys.include?(method)
1349
- when :out
1350
- devtools.debugger.step_out until devtools.callbacks.keys.include?(method)
1351
- when :over
1352
- devtools.debugger.step_over until devtools.callbacks.keys.include?(method)
1353
- end
1354
- devtools.callbacks.delete(method)
1355
-
1356
- method = 'Debugger.paused'
1357
- devtools.debugger.pause until devtools.callbacks.keys.include?(method)
1358
- devtools.callbacks.delete(method)
1359
-
1360
- ws_msg = devtools_websocket_messages(browser_obj: browser_obj)
1361
- ws_msg_params = ws_msg['params']
1362
- ws_msg_call_frames = ws_msg_params['callFrames'].first
1363
- ws_msg_scope_chain_local = ws_msg_call_frames['scopeChain'].find { |scope| scope['type'] == 'local' }
1364
- next unless ws_msg_scope_chain_local.is_a?(Hash)
1365
-
1366
- ws_msg_scope_chain_block = ws_msg_call_frames['scopeChain'].find { |scope| scope['type'] == 'block' }
1367
-
1368
- cursor_location = ws_msg_call_frames['location']
1369
- cursor_line_num = cursor_location['lineNumber']
1370
- cursor_column_num = cursor_location['columnNumber']
1371
-
1372
- script_id = cursor_location['scriptId']
1373
-
1374
- start_location = ws_msg_scope_chain_local['startLocation']
1375
- start_line_num = start_location['lineNumber']
1376
- start_column_num = start_location['columnNumber']
1377
-
1378
- end_location = ws_msg_scope_chain_local['endLocation']
1379
- # end_location_block = ws_msg_scope_chain_block['endLocation']
1380
- # puts "TEST: #{end_location - end_location_block}"
1381
- end_line_num = end_location['lineNumber']
1382
- end_column_num = end_location['columnNumber']
1383
-
1384
- source_obj = devtools.debugger.get_script_source(script_id: script_id)
1385
- full_source_code = source_obj['result']['scriptSource']
1386
-
1387
- source_lines = full_source_code.split("\n")
1388
- # puts source_lines.inspect
1389
- source_lines_range = source_lines[start_line_num..end_line_num]
1390
- next if source_lines_range.nil?
1391
-
1392
- source_lines_str = source_lines_range.join("\n")
1393
- source_to_review = source_lines_str[start_column_num..end_column_num]
1394
- current_step = source_lines_str[cursor_column_num..end_column_num]
1395
-
1396
- # TODO: leverage ANSI escape codes to highlight current_step to red
1397
- # puts ws_msg.inspect
1398
- # puts "\n"
1399
- # puts ws_msg_call_frames['scopeChain'].inspect
1400
- # puts "\n"
1401
- cursor_terminated = false
1402
- source_to_review.each_char.with_index do |char, idx|
1403
- cursor_start_offset = cursor_column_num - start_column_num
1404
- cursor_end_offset = end_column_num - start_column_num
1405
-
1406
- if idx >= cursor_start_offset && !cursor_terminated
1407
- cursor_terminated = true if cursor_termination_chars.include?(char)
1408
- print char if cursor_terminated
1409
- print "\001\e[31m\002#{char}\001\e[0m\002" unless cursor_terminated
1410
- else
1411
- print char
1412
- end
1413
- end
1414
-
1415
- if current_step.length.positive?
1416
- system_role_content = "Being an expert penetration tester skilled in code analysis, debugging, and exploitation while stepping through JavaScript in a Chrome DevTools debugging session: 1. Your sole purpose is to analyze each JavaScript step and generate an Exploit Prediction Scoring System (EPSS) score between 0% - 100%. The step currently resides in this block of JavaScript:\n```\n#{source_to_review}\n```\n2. If the score is >= 75%, generate a JavaScript proof-of-concept that would allow a threat actor to directly exploit or target a user for exploitation (i.e. no self-exploit). 3. If the EPSS score is >= 75% also provide a code fix. *** If the EPSS score is < 75%, no explanations or summaries - just the EPSS score."
1417
-
1418
- ai_analysis = PWN::AI::Introspection.reflect_on(
1419
- system_role_content: system_role_content,
1420
- request: current_step,
1421
- suppress_pii_output: true
1422
- )
1423
- puts "^^^ #{ai_analysis}" unless ai_analysis.nil?
1424
- end
1425
- puts "\n" * 3
1426
-
1427
- step_hash = {
1428
- step: step_num,
1429
- action: action,
1430
- source: current_step
1431
- }
1432
-
1433
- steps_arr.push(step_hash)
1434
- end
1435
-
1436
- steps_arr
1437
- rescue Selenium::WebDriver::Error::WebDriverError
1438
- devtools
1439
- rescue StandardError => e
1440
- raise e
1441
- end
1442
-
1443
- # Supported Method Parameters::
1444
- # PWN::Plugins::TransparentBrowser.toggle_devtools(
1445
- # browser_obj: 'required - browser_obj returned from #open method)'
1446
- # )
1447
-
1448
- public_class_method def self.toggle_devtools(opts = {})
1449
- browser_obj = opts[:browser_obj]
1450
- verified = verify_devtools_browser(browser_obj: browser_obj)
1451
- puts 'This browser is not supported for DevTools operations.' unless verified
1452
- return unless verified
1453
-
1454
- # TODO: Find replacement for hotkey - there must be a better way.
1455
- browser_obj[:browser].send_keys(:f12)
1456
- rescue StandardError => e
1457
- raise e
1458
- end
1459
-
1460
- # Supported Method Parameters::
1461
- # PWN::Plugins::TransparentBrowser.jmp_devtools_panel(
1462
- # browser_obj: 'required - browser_obj returned from #open method)',
1463
- # panel: 'optional - panel to switch to :elements|:inspector|:console|:debugger|:sources|:network
1464
- # )
1465
-
1466
- public_class_method def self.jmp_devtools_panel(opts = {})
1467
- browser_obj = opts[:browser_obj]
1468
- verified = verify_devtools_browser(browser_obj: browser_obj)
1469
- puts 'This browser is not supported for DevTools operations.' unless verified
1470
- return unless verified
1471
-
1472
- panel = opts[:panel] ||= :elements
1473
- browser = browser_obj[:browser]
1474
- browser_type = browser_obj[:type]
1475
- firefox_types = %i[firefox headless_firefox]
1476
- chrome_types = %i[chrome headless_chrome]
1477
-
1478
- # TODO: Find replacement for hotkey - there must be a better way.
1479
- hotkey = []
1480
- case PWN::Plugins::DetectOS.type
1481
- when :linux, :openbsd, :windows
1482
- hotkey = %i[control shift]
1483
- when :macos
1484
- hotkey = %i[command option]
1485
- end
1486
-
1487
- case panel
1488
- when :elements, :inspector
1489
- hotkey.push('i') if chrome_types.include?(browser_type)
1490
- hotkey.push('c') if firefox_types.include?(browser_type)
1491
- when :console
1492
- hotkey.push('j') if chrome_types.include?(browser_type)
1493
- hotkey.push('k') if firefox_types.include?(browser_type)
1494
- when :debugger, :sources
1495
- hotkey.push('s') if chrome_types.include?(browser_type)
1496
- if firefox_types.include?(browser_type)
1497
- # If we're in the console, we need to switch to the inspector first
1498
- jmp_devtools_panel(browser_obj: browser_obj, panel: :inspector)
1499
- sleep 1
1500
- hotkey.push('z')
1501
- end
1502
- when :network
1503
- hotkey.push('e') if firefox_types.include?(browser_type)
1504
- else
1505
- raise 'ERROR: panel parameter must be :elements|:inspector|:console|:debugger|:sources|:network'
1506
- end
1507
-
1508
- browser_obj[:browser].send_keys(:escape)
1509
-
1510
- # Have to call twice for Chrome, otherwise devtools stays closed
1511
- browser_obj[:browser].send_keys(hotkey)
1512
- # browser.send_keys(hotkey) if chrome_types.include?(browser_type)
1513
- browser.send_keys(:escape)
1514
- rescue StandardError => e
1515
- raise e
1516
- end
1517
-
1518
- # Supported Method Parameters::
1519
- # browser_obj1 = PWN::Plugins::TransparentBrowser.close(
1520
- # browser_obj: 'required - browser_obj returned from #open method)'
1521
- # )
1522
-
1523
- public_class_method def self.close(opts = {})
1524
- browser_obj = opts[:browser_obj]
1525
-
1526
- return nil unless browser_obj.is_a?(Hash)
1527
-
1528
- browser = browser_obj[:browser]
1529
- tor_obj = browser_obj[:tor_obj]
1530
-
1531
- PWN::Plugins::Tor.stop(tor_obj: browser_obj[:tor_obj]) if tor_obj
1532
-
1533
- # Close the browser unless browser.nil? (thus the &)
1534
- browser&.close unless browser == RestClient
1535
-
1536
- nil
1537
- rescue StandardError => e
1538
- raise e
1539
- end
1540
-
1541
- # Author(s):: 0day Inc. <support@0dayinc.com>
1542
-
1543
- public_class_method def self.authors
1544
- "AUTHOR(S):
1545
- 0day Inc. <support@0dayinc.com>
1546
- "
1547
- end
1548
-
1549
- # Display Usage for this Module
1550
-
1551
- public_class_method def self.help
1552
- puts "USAGE:
1553
- browser_obj1 = #{self}.open(
1554
- browser_type: 'optional - :firefox|:chrome|:headless|:rest|:websocket (defaults to :chrome)',
1555
- proxy: 'optional scheme://proxy_host:port || tor (defaults to nil)',
1556
- devtools: 'optional - boolean (defaults to false)'
1557
- )
1558
- browser = browser_obj1[:browser]
1559
- puts browser.public_methods
1560
-
1561
- ********************************************************
1562
- * DevTools Interaction
1563
- * All DevTools Commands can be found here:
1564
- * https://chromedevtools.github.io/devtools-protocol/
1565
- * Examples
1566
- devtools = browser_obj1[:devtools]
1567
- puts devtools.public_methods
1568
- puts devtools.instance_variables
1569
- puts devtools.instance_variable_get('@session_id')
1570
-
1571
- websocket = devtools.instance_variable_get('@ws')
1572
- puts websocket.public_methods
1573
- puts websocket.instance_variables
1574
- puts websocket.instance_variable_get('@messages')
1575
-
1576
- * Tracing
1577
- devtools.send_cmd('Tracing.start')
1578
- devtools.send_cmd('Tracing.requestMemoryDump')
1579
- devtools.send_cmd('Tracing.end')
1580
- puts devtools.instance_variable_get('@messages')
1581
-
1582
- * Network
1583
- devtools.send_cmd('Network.enable')
1584
- last_ws_resp = devtools.instance_variable_get('@messages').last if devtools.instance_variable_get('@messages').last['method'] == 'Network.webSocketFrameReceived'
1585
- puts last_ws_resp
1586
- devtools.send_cmd('Network.disable')
1587
-
1588
- * Debugging DOM and Sending JavaScript to Console
1589
- devtools.send_cmd('Runtime.enable')
1590
- devtools.send_cmd('Console.enable')
1591
- devtools.send_cmd('DOM.enable')
1592
- devtools.send_cmd('Page.enable')
1593
- devtools.send_cmd('Log.enable')
1594
- devtools.send_cmd('Debugger.enable')
1595
- devtools.send_cmd('Debugger.pause')
1596
- step = 1
1597
- next_step = 60
1598
- loop do
1599
- devtools.send_cmd('Console.clearMessages')
1600
- devtools.send_cmd('Log.clear')
1601
- console_events = []
1602
- browser.driver.on_log_event(:console) { |event| console_events.push(event) }
1603
-
1604
- devtools.send_cmd('Debugger.stepInto')
1605
- puts \"Step: \#{step}\"
1606
-
1607
- this_document = devtools.send_cmd('DOM.getDocument')
1608
- puts \"This #document:\\n\#{this_document}\\n\\n\\n\"
1609
-
1610
- console_cmd = {
1611
- expression: 'for(var pop_var in window) { if (window.hasOwnProperty(pop_var) && window[pop_var] != null) console.log(pop_var + \" = \" + window[pop_var]); }'
1612
- }
1613
- puts devtools.send_cmd('Runtime.evaluate', **console_cmd)
1614
-
1615
- print '-' * 180
1616
- print \"\\n\"
1617
- console_events.each do |event|
1618
- puts event.args
1619
- end
1620
- puts \"Console Response Length: \#{console_events.length}\"
1621
- console_events_digest = OpenSSL::Digest::SHA256.hexdigest(
1622
- console_events.inspect
1623
- )
1624
- puts \"Console Events Array SHA256 Digest: \#{console_events_digest}\"
1625
- print '-' * 180
1626
- puts \"\\n\\n\\n\"
1627
-
1628
- print \"Next Step in \"
1629
- next_step.downto(1) {|n| print \"\#{n} \"; sleep 1 }
1630
- puts 'READY!'
1631
- step += 1
1632
- end
1633
-
1634
- devtools.send_cmd('Debugger.disable')
1635
- devtools.send_cmd('Log.disable')
1636
- devtools.send_cmd('Page.disable')
1637
- devtools.send_cmd('DOM.disable')
1638
- devtools.send_cmd('Console.disable')
1639
- devtools.send_cmd('Runtime.disable')
1640
- * End of DevTools Examples
1641
- ********************************************************
1642
-
1643
- browser_obj1 = #{self}.dump_links(
1644
- browser_obj: 'required - browser_obj returned from #open method)'
1645
- )
1646
-
1647
- browser_obj1 = #{self}.find_elements_by_text(
1648
- browser_obj: 'required - browser_obj returned from #open method)',
1649
- text: 'required - text to search for in the DOM'
1650
- )
1651
-
1652
- #{self}.type_as_human(
1653
- string: 'required - string to type as human',
1654
- rand_sleep_float: 'optional - float timing in between keypress (defaults to 0.09)'
1655
- ) {|char| browser_obj1.text_field(name: \"search\").send_keys(char) }
1656
-
1657
- console_resp = #{self}.console(
1658
- browser_obj: 'required - browser_obj returned from #open method)',
1659
- js: 'required - JavaScript expression to evaluate',
1660
- return_to: 'optional - return to :console or :stdout (defaults to :console)'
1661
- )
1662
-
1663
- console_resp = #{self}.view_dom_mutations(
1664
- browser_obj: 'required - browser_obj returned from #open method)',
1665
- index: 'optional - index of tab to switch to (defaults to active tab)',
1666
- target: 'optional - target JavaScript node to observe (defaults to document.body)'
1667
- )
1668
-
1669
- console_resp = #{self}.hide_dom_mutations(
1670
- browser_obj: 'required - browser_obj returned from #open method)',
1671
- index: 'optional - index of tab to switch to (defaults to active tab)'
1672
- )
1673
-
1674
- #{self}.update_about_config(
1675
- browser_obj: 'required - browser_obj returned from #open method)',
1676
- key: 'required - key to update in about:config',
1677
- value: 'required - value to set for key in about:config'
1678
- )
1679
-
1680
- tabs = #{self}.list_tabs(
1681
- browser_obj: 'required - browser_obj returned from #open method)'
1682
- )
1683
-
1684
- tab = #{self}.jmp_tab(
1685
- browser_obj: 'required - browser_obj returned from #open method)',
1686
- index: 'optional - index of tab to switch to (defaults to switching to next tab)',
1687
- keyword: 'optional - keyword in title or url used to switch tabs (defaults to switching to next tab)',
1688
- )
1689
-
1690
- tab = #{self}.new_tab(
1691
- browser_obj: 'required - browser_obj returned from #open method)',
1692
- url: 'optional - URL to open in new tab'
1693
- )
1694
-
1695
- tab = #{self}.close_tab(
1696
- browser_obj: 'required - browser_obj returned from #open method)',
1697
- index: 'optional - index of tab to close (defaults to closing active tab)',
1698
- keyword: 'optional - keyword in title or url used to close tabs (defaults to closing active tab)'
1699
- )
1700
-
1701
- current_dom = #{self}.dom(
1702
- browser_obj: 'required - browser_obj returned from #open method)'
1703
- )
1704
-
1705
- page_state = #{self}.get_page_state(
1706
- browser_obj: 'required - browser_obj returned from #open method)'
1707
- )
1708
-
1709
- #{self}.debugger(
1710
- browser_obj: 'required - browser_obj returned from #open method)',
1711
- action: 'optional - action to take :enable|:pause|:resume|:disable (Defaults to :enable)'
1712
- )
1713
-
1714
- #{self}.step(
1715
- browser_obj: 'required - browser_obj returned from #open method)',
1716
- action: 'optional - action to take :into|:out|:over (Defaults to :into)',
1717
- steps: 'optional - number of steps taken (Defaults to 1)'
1718
- )
1719
-
1720
- #{self}.toggle_devtools(
1721
- browser_obj: 'required - browser_obj returned from #open method)'
1722
- )
1723
-
1724
- #{self}.jmp_devtools_panel(
1725
- browser_obj: 'required - browser_obj returned from #open method)',
1726
- panel: 'optional - panel to switch to :elements|:inspector|:console|:debugger|:sources|:network'
1727
- )
1728
-
1729
- browser_obj1 = #{self}.close(
1730
- browser_obj: 'required - browser_obj returned from #open method)'
1731
- )
1732
-
1733
- #{self}.authors
1734
- "
1735
- end
1736
- end
1737
- end
1738
- end