pwn 0.5.708 → 0.5.710

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 (450) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +2 -2
  3. data/documentation/Installation.md +1 -0
  4. data/etc/default_skills/exploitdev/SKILL.md +38 -0
  5. data/etc/default_skills/pwn/ai/agent/extrospection/osint/bridges/SKILL.md +30 -8
  6. data/etc/default_skills/pwn/ai/agent/extrospection/osint/social/SKILL.md +30 -8
  7. data/etc/default_skills/pwn/ai/agent/extrospection/osint/social/references/urls.md +1 -1
  8. data/etc/default_skills/pwn/ai/agent/extrospection/references/urls.md +0 -1
  9. data/etc/default_skills/pwn/memory_index/SKILL.md +0 -4
  10. data/etc/default_skills/pwn/plugins/aflplusplus/SKILL.md +49 -0
  11. data/etc/default_skills/pwn/plugins/android/SKILL.md +1 -0
  12. data/etc/default_skills/pwn/plugins/artifact_registry/SKILL.md +49 -0
  13. data/etc/default_skills/pwn/plugins/binary_parser/SKILL.md +54 -0
  14. data/etc/default_skills/pwn/plugins/credential_attack/SKILL.md +58 -0
  15. data/etc/default_skills/pwn/plugins/credential_attack/references/urls.md +3 -0
  16. data/etc/default_skills/pwn/plugins/exploit_db/SKILL.md +49 -0
  17. data/etc/default_skills/pwn/plugins/exploit_dev/SKILL.md +63 -0
  18. data/etc/default_skills/pwn/plugins/frida/SKILL.md +51 -0
  19. data/etc/default_skills/pwn/plugins/fuzz/SKILL.md +2 -0
  20. data/etc/default_skills/pwn/plugins/gdb/SKILL.md +53 -0
  21. data/etc/default_skills/pwn/plugins/jobs/SKILL.md +51 -0
  22. data/etc/default_skills/pwn/plugins/k8s/SKILL.md +51 -0
  23. data/etc/default_skills/pwn/plugins/nuclei/SKILL.md +50 -0
  24. data/etc/default_skills/pwn/plugins/preflight_checker/SKILL.md +59 -0
  25. data/etc/default_skills/pwn/plugins/process_tube/SKILL.md +53 -0
  26. data/etc/default_skills/pwn/plugins/radare2/SKILL.md +59 -0
  27. data/etc/default_skills/pwn/plugins/recon/SKILL.md +57 -0
  28. data/etc/default_skills/pwn/plugins/recon/references/urls.md +6 -0
  29. data/etc/default_skills/pwn/plugins/semgrep/SKILL.md +48 -0
  30. data/etc/default_skills/pwn/plugins/sqlmap/SKILL.md +48 -0
  31. data/etc/default_skills/pwn/plugins/transparent_browser/SKILL.md +0 -4
  32. data/etc/default_skills/pwn/plugins/volatility/SKILL.md +49 -0
  33. data/lib/pwn/ai/agent/assembly.rb +4 -1
  34. data/lib/pwn/ai/agent/btc.rb +4 -1
  35. data/lib/pwn/ai/agent/burp_suite.rb +5 -2
  36. data/lib/pwn/ai/agent/curriculum.rb +89 -30
  37. data/lib/pwn/ai/agent/dispatch.rb +27 -16
  38. data/lib/pwn/ai/agent/extrospection/osint/bridges.rb +9 -18
  39. data/lib/pwn/ai/agent/extrospection/osint/social.rb +9 -18
  40. data/lib/pwn/ai/agent/extrospection.rb +185 -60
  41. data/lib/pwn/ai/agent/gqrx.rb +4 -1
  42. data/lib/pwn/ai/agent/hacker_one.rb +5 -2
  43. data/lib/pwn/ai/agent/learning.rb +142 -25
  44. data/lib/pwn/ai/agent/loop.rb +53 -46
  45. data/lib/pwn/ai/agent/metrics.rb +133 -23
  46. data/lib/pwn/ai/agent/mistakes.rb +126 -17
  47. data/lib/pwn/ai/agent/open_goal.rb +25 -9
  48. data/lib/pwn/ai/agent/policy.rb +158 -18
  49. data/lib/pwn/ai/agent/prompt_builder.rb +21 -11
  50. data/lib/pwn/ai/agent/prompt_cache.rb +44 -13
  51. data/lib/pwn/ai/agent/reflect.rb +9 -5
  52. data/lib/pwn/ai/agent/registry.rb +65 -12
  53. data/lib/pwn/ai/agent/result.rb +19 -10
  54. data/lib/pwn/ai/agent/reward.rb +150 -32
  55. data/lib/pwn/ai/agent/sast.rb +4 -1
  56. data/lib/pwn/ai/agent/swarm.rb +72 -36
  57. data/lib/pwn/ai/agent/task_summarizer.rb +165 -36
  58. data/lib/pwn/ai/agent/tool_guard.rb +105 -6
  59. data/lib/pwn/ai/agent/tools/sessions.rb +8 -1
  60. data/lib/pwn/ai/agent/transparent_browser.rb +4 -1
  61. data/lib/pwn/ai/agent/turn_finalizer.rb +41 -21
  62. data/lib/pwn/ai/agent/vuln_gen.rb +6 -3
  63. data/lib/pwn/ai/agent.rb +4 -0
  64. data/lib/pwn/ai/anthropic.rb +41 -7
  65. data/lib/pwn/ai/gemini.rb +21 -11
  66. data/lib/pwn/ai/grok.rb +44 -6
  67. data/lib/pwn/ai/http_retry.rb +40 -12
  68. data/lib/pwn/ai/ollama.rb +19 -10
  69. data/lib/pwn/ai/open_ai.rb +81 -30
  70. data/lib/pwn/ai/open_web_ui.rb +20 -14
  71. data/lib/pwn/ai/red_team/agent_protocol_abuse.rb +7 -1
  72. data/lib/pwn/ai/red_team/data_and_model_poisoning.rb +7 -1
  73. data/lib/pwn/ai/red_team/excessive_agency.rb +7 -1
  74. data/lib/pwn/ai/red_team/hidden_context_exposure.rb +7 -1
  75. data/lib/pwn/ai/red_team/insecure_output_handling.rb +7 -1
  76. data/lib/pwn/ai/red_team/jailbreak.rb +7 -1
  77. data/lib/pwn/ai/red_team/memory_poisoning.rb +7 -1
  78. data/lib/pwn/ai/red_team/multimodal_injection.rb +7 -1
  79. data/lib/pwn/ai/red_team/overreliance.rb +7 -1
  80. data/lib/pwn/ai/red_team/payload_splitting.rb +7 -1
  81. data/lib/pwn/ai/red_team/prompt_injection.rb +7 -1
  82. data/lib/pwn/ai/red_team/rag_poisoning.rb +7 -1
  83. data/lib/pwn/ai/red_team/sensitive_information_disclosure.rb +7 -1
  84. data/lib/pwn/ai/red_team/supply_chain.rb +7 -1
  85. data/lib/pwn/ai/red_team/system_prompt_extraction.rb +7 -1
  86. data/lib/pwn/ai/red_team/test_case_engine.rb +12 -9
  87. data/lib/pwn/ai/red_team/token_smuggling.rb +7 -1
  88. data/lib/pwn/ai/red_team/unbounded_consumption.rb +7 -1
  89. data/lib/pwn/ai/red_team/vector_and_embedding_weaknesses.rb +7 -1
  90. data/lib/pwn/ai/red_team.rb +4 -0
  91. data/lib/pwn/ai.rb +4 -0
  92. data/lib/pwn/aws/acm.rb +5 -2
  93. data/lib/pwn/aws/api_gateway.rb +10 -7
  94. data/lib/pwn/aws/app_stream.rb +5 -2
  95. data/lib/pwn/aws/application_auto_scaling.rb +5 -2
  96. data/lib/pwn/aws/application_discovery_service.rb +5 -2
  97. data/lib/pwn/aws/auto_scaling.rb +5 -2
  98. data/lib/pwn/aws/batch.rb +5 -2
  99. data/lib/pwn/aws/budgets.rb +5 -2
  100. data/lib/pwn/aws/cloud_formation.rb +5 -2
  101. data/lib/pwn/aws/cloud_front.rb +7 -4
  102. data/lib/pwn/aws/cloud_hsm.rb +5 -2
  103. data/lib/pwn/aws/cloud_search.rb +5 -2
  104. data/lib/pwn/aws/cloud_search_domain.rb +5 -2
  105. data/lib/pwn/aws/cloud_trail.rb +5 -2
  106. data/lib/pwn/aws/cloud_watch.rb +5 -2
  107. data/lib/pwn/aws/cloud_watch_events.rb +5 -2
  108. data/lib/pwn/aws/cloud_watch_logs.rb +5 -2
  109. data/lib/pwn/aws/code_build.rb +5 -2
  110. data/lib/pwn/aws/code_commit.rb +5 -2
  111. data/lib/pwn/aws/code_deploy.rb +5 -2
  112. data/lib/pwn/aws/code_pipeline.rb +5 -2
  113. data/lib/pwn/aws/cognito_identity.rb +5 -2
  114. data/lib/pwn/aws/cognito_identity_provider.rb +5 -2
  115. data/lib/pwn/aws/cognito_sync.rb +5 -2
  116. data/lib/pwn/aws/config_service.rb +5 -2
  117. data/lib/pwn/aws/data_pipleline.rb +5 -2
  118. data/lib/pwn/aws/database_migration_service.rb +5 -2
  119. data/lib/pwn/aws/device_farm.rb +5 -2
  120. data/lib/pwn/aws/direct_connect.rb +5 -2
  121. data/lib/pwn/aws/directory_service.rb +5 -2
  122. data/lib/pwn/aws/dynamo_db.rb +5 -2
  123. data/lib/pwn/aws/dynamo_db_streams.rb +5 -2
  124. data/lib/pwn/aws/ec2.rb +5 -2
  125. data/lib/pwn/aws/ecr.rb +5 -2
  126. data/lib/pwn/aws/ecs.rb +5 -2
  127. data/lib/pwn/aws/efs.rb +5 -2
  128. data/lib/pwn/aws/elasti_cache.rb +5 -2
  129. data/lib/pwn/aws/elastic_beanstalk.rb +8 -5
  130. data/lib/pwn/aws/elastic_load_balancing.rb +5 -2
  131. data/lib/pwn/aws/elastic_load_balancing_v2.rb +6 -3
  132. data/lib/pwn/aws/elastic_transcoder.rb +5 -2
  133. data/lib/pwn/aws/elasticsearch_service.rb +5 -2
  134. data/lib/pwn/aws/emr.rb +5 -2
  135. data/lib/pwn/aws/firehose.rb +5 -2
  136. data/lib/pwn/aws/game_lift.rb +5 -2
  137. data/lib/pwn/aws/glacier.rb +6 -3
  138. data/lib/pwn/aws/health.rb +5 -2
  139. data/lib/pwn/aws/iam.rb +10 -4
  140. data/lib/pwn/aws/import_export.rb +5 -2
  141. data/lib/pwn/aws/inspector.rb +5 -2
  142. data/lib/pwn/aws/iot.rb +5 -2
  143. data/lib/pwn/aws/iot_data_plane.rb +5 -2
  144. data/lib/pwn/aws/kinesis.rb +5 -2
  145. data/lib/pwn/aws/kinesis_analytics.rb +5 -2
  146. data/lib/pwn/aws/kms.rb +5 -2
  147. data/lib/pwn/aws/lambda.rb +5 -2
  148. data/lib/pwn/aws/lambda_preview.rb +5 -2
  149. data/lib/pwn/aws/lex.rb +5 -2
  150. data/lib/pwn/aws/lightsail.rb +5 -2
  151. data/lib/pwn/aws/machine_learning.rb +5 -2
  152. data/lib/pwn/aws/marketplace_commerce_analytics.rb +5 -2
  153. data/lib/pwn/aws/marketplace_metering.rb +5 -2
  154. data/lib/pwn/aws/ops_works.rb +5 -2
  155. data/lib/pwn/aws/ops_works_cm.rb +5 -2
  156. data/lib/pwn/aws/pinpoint.rb +5 -2
  157. data/lib/pwn/aws/polly.rb +5 -2
  158. data/lib/pwn/aws/rds.rb +5 -2
  159. data/lib/pwn/aws/redshift.rb +5 -2
  160. data/lib/pwn/aws/rekognition.rb +5 -2
  161. data/lib/pwn/aws/route53.rb +5 -2
  162. data/lib/pwn/aws/route53_domains.rb +5 -2
  163. data/lib/pwn/aws/s3.rb +5 -2
  164. data/lib/pwn/aws/service_catalog.rb +5 -2
  165. data/lib/pwn/aws/ses.rb +5 -2
  166. data/lib/pwn/aws/shield.rb +5 -2
  167. data/lib/pwn/aws/simple_db.rb +5 -2
  168. data/lib/pwn/aws/sms.rb +5 -2
  169. data/lib/pwn/aws/snowball.rb +5 -2
  170. data/lib/pwn/aws/sns.rb +5 -2
  171. data/lib/pwn/aws/sqs.rb +5 -2
  172. data/lib/pwn/aws/ssm.rb +5 -2
  173. data/lib/pwn/aws/states.rb +5 -2
  174. data/lib/pwn/aws/storage_gateway.rb +5 -2
  175. data/lib/pwn/aws/sts.rb +4 -1
  176. data/lib/pwn/aws/support.rb +5 -2
  177. data/lib/pwn/aws/swf.rb +5 -2
  178. data/lib/pwn/aws/waf.rb +5 -2
  179. data/lib/pwn/aws/waf_regional.rb +5 -2
  180. data/lib/pwn/aws/workspaces.rb +5 -2
  181. data/lib/pwn/aws/x_ray.rb +5 -2
  182. data/lib/pwn/aws.rb +4 -0
  183. data/lib/pwn/banner/anon.rb +3 -0
  184. data/lib/pwn/banner/bubble.rb +3 -0
  185. data/lib/pwn/banner/cheshire.rb +3 -0
  186. data/lib/pwn/banner/code_cave.rb +3 -0
  187. data/lib/pwn/banner/dont_panic.rb +3 -0
  188. data/lib/pwn/banner/f_society.rb +3 -0
  189. data/lib/pwn/banner/fork_bomb.rb +3 -0
  190. data/lib/pwn/banner/jmp_esp.rb +3 -0
  191. data/lib/pwn/banner/matrix.rb +5 -1
  192. data/lib/pwn/banner/ninja.rb +3 -0
  193. data/lib/pwn/banner/off_the_air.rb +3 -0
  194. data/lib/pwn/banner/pirate.rb +3 -0
  195. data/lib/pwn/banner/radare2.rb +3 -0
  196. data/lib/pwn/banner/radare2_ai.rb +3 -0
  197. data/lib/pwn/banner/white_rabbit.rb +3 -0
  198. data/lib/pwn/banner.rb +6 -2
  199. data/lib/pwn/blockchain/btc.rb +8 -3
  200. data/lib/pwn/blockchain/eth.rb +10 -3
  201. data/lib/pwn/blockchain.rb +4 -0
  202. data/lib/pwn/bounty/lifecycle_authz_replay.rb +46 -27
  203. data/lib/pwn/bounty.rb +4 -0
  204. data/lib/pwn/config.rb +79 -13
  205. data/lib/pwn/cron.rb +297 -20
  206. data/lib/pwn/driver.rb +2 -18
  207. data/lib/pwn/ffi/adalm_pluto.rb +65 -11
  208. data/lib/pwn/ffi/fftw.rb +31 -6
  209. data/lib/pwn/ffi/hack_rf.rb +59 -8
  210. data/lib/pwn/ffi/liquid.rb +63 -10
  211. data/lib/pwn/ffi/rtl_sdr.rb +35 -5
  212. data/lib/pwn/ffi/soapy_sdr.rb +60 -10
  213. data/lib/pwn/ffi/stdio.rb +7 -8
  214. data/lib/pwn/ffi/volk.rb +36 -7
  215. data/lib/pwn/ffi.rb +12 -0
  216. data/lib/pwn/memory.rb +136 -16
  217. data/lib/pwn/memory_index.rb +34 -19
  218. data/lib/pwn/migrate.rb +34 -24
  219. data/lib/pwn/module_skills.rb +39 -8
  220. data/lib/pwn/plugins/aflplusplus.rb +72 -0
  221. data/lib/pwn/plugins/android.rb +71 -245
  222. data/lib/pwn/plugins/artifact_registry.rb +71 -0
  223. data/lib/pwn/plugins/assembly.rb +9 -4
  224. data/lib/pwn/plugins/authentication_helper.rb +8 -5
  225. data/lib/pwn/plugins/baresip.rb +59 -12
  226. data/lib/pwn/plugins/basic_auth.rb +9 -3
  227. data/lib/pwn/plugins/beef.rb +28 -18
  228. data/lib/pwn/plugins/binary_parser.rb +133 -0
  229. data/lib/pwn/plugins/black_duck_binary_analysis.rb +63 -39
  230. data/lib/pwn/plugins/burp_suite.rb +98 -68
  231. data/lib/pwn/plugins/bus_pirate.rb +15 -8
  232. data/lib/pwn/plugins/char.rb +33 -3
  233. data/lib/pwn/plugins/credential_attack.rb +158 -0
  234. data/lib/pwn/plugins/credit_card.rb +6 -1
  235. data/lib/pwn/plugins/dao_ldap.rb +19 -13
  236. data/lib/pwn/plugins/dao_mongo.rb +11 -5
  237. data/lib/pwn/plugins/dao_postgres.rb +28 -19
  238. data/lib/pwn/plugins/dao_sqlite3.rb +15 -6
  239. data/lib/pwn/plugins/defect_dojo.rb +38 -22
  240. data/lib/pwn/plugins/detect_os.rb +5 -0
  241. data/lib/pwn/plugins/ein.rb +3 -0
  242. data/lib/pwn/plugins/exploit_db.rb +69 -0
  243. data/lib/pwn/plugins/exploit_dev.rb +330 -0
  244. data/lib/pwn/plugins/file_fu.rb +11 -8
  245. data/lib/pwn/plugins/frida.rb +112 -0
  246. data/lib/pwn/plugins/fuzz.rb +42 -6
  247. data/lib/pwn/plugins/gdb.rb +115 -0
  248. data/lib/pwn/plugins/git.rb +19 -14
  249. data/lib/pwn/plugins/github.rb +38 -15
  250. data/lib/pwn/plugins/google_workspace.rb +188 -45
  251. data/lib/pwn/plugins/hacker_one.rb +159 -35
  252. data/lib/pwn/plugins/hunter.rb +6 -3
  253. data/lib/pwn/plugins/ip_info.rb +9 -4
  254. data/lib/pwn/plugins/irc.rb +28 -15
  255. data/lib/pwn/plugins/jenkins.rb +65 -57
  256. data/lib/pwn/plugins/jira_data_center.rb +30 -22
  257. data/lib/pwn/plugins/jobs.rb +110 -0
  258. data/lib/pwn/plugins/json_pathify.rb +9 -5
  259. data/lib/pwn/plugins/k8s.rb +73 -0
  260. data/lib/pwn/plugins/log.rb +113 -13
  261. data/lib/pwn/plugins/mail_agent.rb +87 -79
  262. data/lib/pwn/plugins/metasploit.rb +11 -6
  263. data/lib/pwn/plugins/monkey_patch.rb +3 -0
  264. data/lib/pwn/plugins/msr206.rb +42 -28
  265. data/lib/pwn/plugins/nessus_cloud.rb +44 -4
  266. data/lib/pwn/plugins/nexpose_vuln_scan.rb +40 -24
  267. data/lib/pwn/plugins/nmap_it.rb +14 -34
  268. data/lib/pwn/plugins/nuclei.rb +90 -0
  269. data/lib/pwn/plugins/oauth2.rb +11 -5
  270. data/lib/pwn/plugins/ocr.rb +3 -0
  271. data/lib/pwn/plugins/open_api.rb +5 -2
  272. data/lib/pwn/plugins/openvas.rb +33 -25
  273. data/lib/pwn/plugins/packet.rb +152 -31
  274. data/lib/pwn/plugins/pdf_parse.rb +5 -2
  275. data/lib/pwn/plugins/pony.rb +86 -1
  276. data/lib/pwn/plugins/preflight_checker.rb +166 -0
  277. data/lib/pwn/plugins/process_tube.rb +139 -0
  278. data/lib/pwn/plugins/ps.rb +7 -1
  279. data/lib/pwn/plugins/pwn_logger.rb +6 -2
  280. data/lib/pwn/plugins/rabbit_mq.rb +12 -7
  281. data/lib/pwn/plugins/radare2.rb +253 -0
  282. data/lib/pwn/plugins/recon.rb +196 -0
  283. data/lib/pwn/plugins/repl.rb +122 -1
  284. data/lib/pwn/plugins/scannable_codes.rb +5 -1
  285. data/lib/pwn/plugins/semgrep.rb +61 -0
  286. data/lib/pwn/plugins/serial.rb +24 -14
  287. data/lib/pwn/plugins/shodan.rb +54 -35
  288. data/lib/pwn/plugins/slack_client.rb +11 -6
  289. data/lib/pwn/plugins/sock.rb +17 -8
  290. data/lib/pwn/plugins/spider.rb +5 -2
  291. data/lib/pwn/plugins/sqlmap.rb +49 -0
  292. data/lib/pwn/plugins/ssn.rb +3 -0
  293. data/lib/pwn/plugins/thread_pool.rb +6 -9
  294. data/lib/pwn/plugins/tor.rb +9 -4
  295. data/lib/pwn/plugins/transparent_browser.rb +62 -107
  296. data/lib/pwn/plugins/tty_spinner.rb +16 -2
  297. data/lib/pwn/plugins/twitter_api.rb +6 -2
  298. data/lib/pwn/plugins/uri_scheme.rb +4 -1
  299. data/lib/pwn/plugins/vault.rb +12 -3
  300. data/lib/pwn/plugins/vin.rb +24 -12
  301. data/lib/pwn/plugins/voice.rb +7 -2
  302. data/lib/pwn/plugins/volatility.rb +67 -0
  303. data/lib/pwn/plugins/vsphere.rb +9 -5
  304. data/lib/pwn/plugins/xxd.rb +12 -43
  305. data/lib/pwn/plugins/zaproxy.rb +30 -16
  306. data/lib/pwn/plugins.rb +22 -0
  307. data/lib/pwn/reports/ai_red_team.rb +6 -2
  308. data/lib/pwn/reports/csv.rb +8 -1
  309. data/lib/pwn/reports/fuzz.rb +5 -2
  310. data/lib/pwn/reports/html.rb +8 -1
  311. data/lib/pwn/reports/html_footer.rb +4 -3
  312. data/lib/pwn/reports/html_header.rb +6 -2
  313. data/lib/pwn/reports/json.rb +8 -1
  314. data/lib/pwn/reports/markdown.rb +8 -1
  315. data/lib/pwn/reports/pdf.rb +8 -1
  316. data/lib/pwn/reports/phone.rb +5 -2
  317. data/lib/pwn/reports/sast.rb +6 -2
  318. data/lib/pwn/reports/uri_buster.rb +5 -2
  319. data/lib/pwn/reports/xml.rb +8 -1
  320. data/lib/pwn/reports.rb +19 -0
  321. data/lib/pwn/sast/amqp_connect_as_guest.rb +9 -3
  322. data/lib/pwn/sast/apache_file_system_util_api.rb +9 -3
  323. data/lib/pwn/sast/aws.rb +9 -3
  324. data/lib/pwn/sast/banned_function_calls_c.rb +9 -3
  325. data/lib/pwn/sast/base64.rb +9 -3
  326. data/lib/pwn/sast/beef_hook.rb +9 -3
  327. data/lib/pwn/sast/cmd_execution_go_lang.rb +9 -3
  328. data/lib/pwn/sast/cmd_execution_java.rb +9 -3
  329. data/lib/pwn/sast/cmd_execution_python.rb +9 -3
  330. data/lib/pwn/sast/cmd_execution_ruby.rb +9 -3
  331. data/lib/pwn/sast/cmd_execution_scala.rb +9 -3
  332. data/lib/pwn/sast/csrf.rb +9 -3
  333. data/lib/pwn/sast/deserial_java.rb +9 -3
  334. data/lib/pwn/sast/emoticon.rb +9 -3
  335. data/lib/pwn/sast/eval.rb +9 -3
  336. data/lib/pwn/sast/factory.rb +9 -3
  337. data/lib/pwn/sast/http_authorization_header.rb +9 -3
  338. data/lib/pwn/sast/inner_html.rb +9 -3
  339. data/lib/pwn/sast/keystore.rb +9 -3
  340. data/lib/pwn/sast/local_storage.rb +9 -3
  341. data/lib/pwn/sast/location_hash.rb +9 -3
  342. data/lib/pwn/sast/log4j.rb +9 -3
  343. data/lib/pwn/sast/logger.rb +9 -3
  344. data/lib/pwn/sast/md5.rb +9 -3
  345. data/lib/pwn/sast/outer_html.rb +9 -3
  346. data/lib/pwn/sast/padding_oracle.rb +9 -3
  347. data/lib/pwn/sast/password.rb +9 -3
  348. data/lib/pwn/sast/php_input_mechanisms.rb +9 -3
  349. data/lib/pwn/sast/php_type_juggling.rb +9 -3
  350. data/lib/pwn/sast/pom_version.rb +9 -3
  351. data/lib/pwn/sast/port.rb +9 -3
  352. data/lib/pwn/sast/post_message.rb +9 -3
  353. data/lib/pwn/sast/private_key.rb +9 -3
  354. data/lib/pwn/sast/redirect.rb +9 -3
  355. data/lib/pwn/sast/redos.rb +9 -3
  356. data/lib/pwn/sast/shell.rb +9 -3
  357. data/lib/pwn/sast/signature.rb +9 -3
  358. data/lib/pwn/sast/sql.rb +9 -3
  359. data/lib/pwn/sast/ssl.rb +9 -3
  360. data/lib/pwn/sast/sudo.rb +9 -3
  361. data/lib/pwn/sast/task_tag.rb +9 -3
  362. data/lib/pwn/sast/test_case_engine.rb +11 -7
  363. data/lib/pwn/sast/throw_errors.rb +9 -3
  364. data/lib/pwn/sast/token.rb +9 -3
  365. data/lib/pwn/sast/type_script_type_juggling.rb +9 -3
  366. data/lib/pwn/sast/use_after_free.rb +9 -3
  367. data/lib/pwn/sast/version.rb +9 -3
  368. data/lib/pwn/sast/window_location_hash.rb +9 -3
  369. data/lib/pwn/sast.rb +4 -0
  370. data/lib/pwn/sdr/decoder/adsb.rb +36 -5
  371. data/lib/pwn/sdr/decoder/apt.rb +9 -6
  372. data/lib/pwn/sdr/decoder/base.rb +74 -22
  373. data/lib/pwn/sdr/decoder/bluetooth.rb +17 -5
  374. data/lib/pwn/sdr/decoder/dect.rb +12 -3
  375. data/lib/pwn/sdr/decoder/dsp.rb +229 -39
  376. data/lib/pwn/sdr/decoder/flex.rb +59 -11
  377. data/lib/pwn/sdr/decoder/gps.rb +12 -3
  378. data/lib/pwn/sdr/decoder/gsm.rb +24 -4
  379. data/lib/pwn/sdr/decoder/iridium.rb +12 -3
  380. data/lib/pwn/sdr/decoder/lora.rb +13 -4
  381. data/lib/pwn/sdr/decoder/lte.rb +27 -3
  382. data/lib/pwn/sdr/decoder/morse.rb +12 -3
  383. data/lib/pwn/sdr/decoder/p25.rb +12 -3
  384. data/lib/pwn/sdr/decoder/pager.rb +8 -5
  385. data/lib/pwn/sdr/decoder/pocsag.rb +29 -9
  386. data/lib/pwn/sdr/decoder/rds.rb +14 -8
  387. data/lib/pwn/sdr/decoder/rfid.rb +12 -3
  388. data/lib/pwn/sdr/decoder/rtl433.rb +12 -3
  389. data/lib/pwn/sdr/decoder/rtty.rb +8 -5
  390. data/lib/pwn/sdr/decoder/wifi.rb +12 -3
  391. data/lib/pwn/sdr/decoder/zigbee.rb +12 -3
  392. data/lib/pwn/sdr/decoder.rb +9 -0
  393. data/lib/pwn/sdr/flipper_zero.rb +17 -10
  394. data/lib/pwn/sdr/frequency_allocation.rb +4 -1
  395. data/lib/pwn/sdr/gqrx.rb +178 -119
  396. data/lib/pwn/sdr/rfidler.rb +4 -1
  397. data/lib/pwn/sdr/son_micro_rfid.rb +37 -24
  398. data/lib/pwn/sdr.rb +14 -0
  399. data/lib/pwn/sessions.rb +86 -16
  400. data/lib/pwn/setup.rb +106 -37
  401. data/lib/pwn/version.rb +1 -1
  402. data/lib/pwn/www/app_cobalt_io.rb +11 -5
  403. data/lib/pwn/www/bing.rb +10 -5
  404. data/lib/pwn/www/bug_crowd.rb +11 -5
  405. data/lib/pwn/www/checkip.rb +8 -4
  406. data/lib/pwn/www/coinbase_pro.rb +11 -5
  407. data/lib/pwn/www/duckduckgo.rb +12 -6
  408. data/lib/pwn/www/facebook.rb +11 -5
  409. data/lib/pwn/www/github.rb +11 -5
  410. data/lib/pwn/www/google.rb +11 -5
  411. data/lib/pwn/www/hacker_one.rb +20 -9
  412. data/lib/pwn/www/linkedin.rb +11 -5
  413. data/lib/pwn/www/pandora.rb +11 -5
  414. data/lib/pwn/www/pastebin.rb +9 -4
  415. data/lib/pwn/www/paypal.rb +19 -11
  416. data/lib/pwn/www/synack.rb +11 -5
  417. data/lib/pwn/www/torch.rb +13 -8
  418. data/lib/pwn/www/trading_view.rb +11 -5
  419. data/lib/pwn/www/twitter.rb +11 -5
  420. data/lib/pwn/www/uber.rb +11 -5
  421. data/lib/pwn/www/upwork.rb +11 -5
  422. data/lib/pwn/www/wayback_machine.rb +12 -6
  423. data/lib/pwn/www/youtube.rb +10 -5
  424. data/lib/pwn/www.rb +4 -0
  425. data/spec/conventions_spec.rb +118 -2
  426. data/spec/integration/help_contract_spec.rb +2 -0
  427. data/spec/lib/pwn/ai/agent/reward_spec.rb +9 -0
  428. data/spec/lib/pwn/plugins/aflplusplus_spec.rb +13 -0
  429. data/spec/lib/pwn/plugins/artifact_registry_spec.rb +13 -0
  430. data/spec/lib/pwn/plugins/binary_parser_spec.rb +21 -0
  431. data/spec/lib/pwn/plugins/credential_attack_spec.rb +13 -0
  432. data/spec/lib/pwn/plugins/exploit_db_spec.rb +13 -0
  433. data/spec/lib/pwn/plugins/exploit_dev_spec.rb +23 -0
  434. data/spec/lib/pwn/plugins/frida_spec.rb +13 -0
  435. data/spec/lib/pwn/plugins/gdb_spec.rb +13 -0
  436. data/spec/lib/pwn/plugins/jobs_spec.rb +13 -0
  437. data/spec/lib/pwn/plugins/k8s_spec.rb +13 -0
  438. data/spec/lib/pwn/plugins/nuclei_spec.rb +13 -0
  439. data/spec/lib/pwn/plugins/preflight_checker_spec.rb +23 -0
  440. data/spec/lib/pwn/plugins/process_tube_spec.rb +13 -0
  441. data/spec/lib/pwn/plugins/radare2_spec.rb +13 -0
  442. data/spec/lib/pwn/plugins/recon_spec.rb +26 -0
  443. data/spec/lib/pwn/plugins/semgrep_spec.rb +13 -0
  444. data/spec/lib/pwn/plugins/sqlmap_spec.rb +13 -0
  445. data/spec/lib/pwn/plugins/volatility_spec.rb +13 -0
  446. data/spec/lib/pwn/req_queue_spec.rb +168 -0
  447. data/third_party/pwn_rdoc.jsonl +160 -5
  448. metadata +63 -7
  449. data/etc/default_skills/pwn/memory_index/references/urls.md +0 -4
  450. data/etc/default_skills/pwn/plugins/transparent_browser/references/urls.md +0 -3
@@ -248,25 +248,30 @@ module PWN
248
248
 
249
249
  public_class_method def self.help
250
250
  puts "USAGE:
251
- tor_obj = #{self}.start(
251
+ # Run start and return its result
252
+ #{self}.start(
252
253
  ip: 'optional - IP address to listen (default: 127.0.0.1)',
253
- port: 'optional - socks port to listen (default: 9050)',
254
- ctrl_port: 'optional - tor control port to listen (default: 9051)',
255
- net: 'optional - CIDR notation to accept connections (default: 127.0.0.1/32)',
254
+ port: 'optional - socks port to listen (default: 1024-65535)',
255
+ ctrl_port: 'optional - tor control port to listen (default: 1024-65535)',
256
+ net: 'optional - CIDR notation to accept connections (default: 127.0.0.0.1/32)',
256
257
  data_dir: 'optional - directory to keep tor session data (default: /tmp/tor_pwn-TIMESTAMP)'
257
258
  )
258
259
 
260
+ # Run switch exit node and return its result
259
261
  #{self}.switch_exit_node(
260
262
  tor_obj: 'required - tor_obj returned from #start method',
261
263
  response_timeout: 'optional - float in seconds to timeout (default: 3.0)'
262
264
  )
263
265
 
266
+ # Run stop and return its result
264
267
  #{self}.stop(
265
268
  tor_obj: 'required - tor_obj returned from #start method'
266
269
  )
267
270
 
271
+ # Print the AUTHOR(S) string for this module.
268
272
  #{self}.authors
269
273
  "
274
+ constants.sort
270
275
  end
271
276
  end
272
277
  end
@@ -1561,188 +1561,143 @@ module PWN
1561
1561
 
1562
1562
  public_class_method def self.help
1563
1563
  puts "USAGE:
1564
- browser_obj1 = #{self}.open(
1564
+ # Open a session or connection and return a handle.
1565
+ #{self}.open(
1565
1566
  browser_type: 'optional - :firefox|:chrome|:headless|:rest|:websocket (defaults to :chrome)',
1566
- proxy: 'optional scheme://proxy_host:port || tor (defaults to nil)',
1567
+ proxy: 'optional - scheme://proxy_host:port || tor (defaults to nil)',
1567
1568
  devtools: 'optional - boolean (defaults to false)'
1568
1569
  )
1569
- browser = browser_obj1[:browser]
1570
- puts browser.public_methods
1571
-
1572
- ********************************************************
1573
- * DevTools Interaction
1574
- * All DevTools Commands can be found here:
1575
- * https://chromedevtools.github.io/devtools-protocol/
1576
- * Examples
1577
- devtools = browser_obj1[:devtools]
1578
- puts devtools.public_methods
1579
- puts devtools.instance_variables
1580
- puts devtools.instance_variable_get('@session_id')
1581
-
1582
- websocket = devtools.instance_variable_get('@ws')
1583
- puts websocket.public_methods
1584
- puts websocket.instance_variables
1585
- puts websocket.instance_variable_get('@messages')
1586
-
1587
- * Tracing
1588
- devtools.send_cmd('Tracing.start')
1589
- devtools.send_cmd('Tracing.requestMemoryDump')
1590
- devtools.send_cmd('Tracing.end')
1591
- puts devtools.instance_variable_get('@messages')
1592
-
1593
- * Network
1594
- devtools.send_cmd('Network.enable')
1595
- last_ws_resp = devtools.instance_variable_get('@messages').last if devtools.instance_variable_get('@messages').last['method'] == 'Network.webSocketFrameReceived'
1596
- puts last_ws_resp
1597
- devtools.send_cmd('Network.disable')
1598
-
1599
- * Debugging DOM and Sending JavaScript to Console
1600
- devtools.send_cmd('Runtime.enable')
1601
- devtools.send_cmd('Console.enable')
1602
- devtools.send_cmd('DOM.enable')
1603
- devtools.send_cmd('Page.enable')
1604
- devtools.send_cmd('Log.enable')
1605
- devtools.send_cmd('Debugger.enable')
1606
- devtools.send_cmd('Debugger.pause')
1607
- step = 1
1608
- next_step = 60
1609
- loop do
1610
- devtools.send_cmd('Console.clearMessages')
1611
- devtools.send_cmd('Log.clear')
1612
- console_events = []
1613
- browser.driver.on_log_event(:console) { |event| console_events.push(event) }
1614
-
1615
- devtools.send_cmd('Debugger.stepInto')
1616
- puts \"Step: \#{step}\"
1617
-
1618
- this_document = devtools.send_cmd('DOM.getDocument')
1619
- puts \"This #document:\\n\#{this_document}\\n\\n\\n\"
1620
-
1621
- console_cmd = {
1622
- expression: 'for(var pop_var in window) { if (window.hasOwnProperty(pop_var) && window[pop_var] != null) console.log(pop_var + \" = \" + window[pop_var]); }'
1623
- }
1624
- puts devtools.send_cmd('Runtime.evaluate', **console_cmd)
1625
-
1626
- print '-' * 180
1627
- print \"\\n\"
1628
- console_events.each do |event|
1629
- puts event.args
1630
- end
1631
- puts \"Console Response Length: \#{console_events.length}\"
1632
- console_events_digest = OpenSSL::Digest::SHA256.hexdigest(
1633
- console_events.inspect
1634
- )
1635
- puts \"Console Events Array SHA256 Digest: \#{console_events_digest}\"
1636
- print '-' * 180
1637
- puts \"\\n\\n\\n\"
1638
-
1639
- print \"Next Step in \"
1640
- next_step.downto(1) {|n| print \"\#{n} \"; sleep 1 }
1641
- puts 'READY!'
1642
- step += 1
1643
- end
1644
-
1645
- devtools.send_cmd('Debugger.disable')
1646
- devtools.send_cmd('Log.disable')
1647
- devtools.send_cmd('Page.disable')
1648
- devtools.send_cmd('DOM.disable')
1649
- devtools.send_cmd('Console.disable')
1650
- devtools.send_cmd('Runtime.disable')
1651
- * End of DevTools Examples
1652
- ********************************************************
1653
1570
 
1654
- browser_obj1 = #{self}.dump_links(
1655
- browser_obj: 'required - browser_obj returned from #open method)'
1571
+ # Run dump links and return its result
1572
+ #{self}.dump_links(
1573
+ browser_obj: 'optional - browser object returned from #open'
1656
1574
  )
1657
1575
 
1658
- browser_obj1 = #{self}.find_elements_by_text(
1659
- browser_obj: 'required - browser_obj returned from #open method)',
1576
+ # Run find elements by text and return its result
1577
+ #{self}.find_elements_by_text(
1578
+ browser_obj: 'optional - browser object returned from #open',
1660
1579
  text: 'required - text to search for in the DOM'
1661
1580
  )
1662
1581
 
1582
+ # Run type as human and return its result
1663
1583
  #{self}.type_as_human(
1664
1584
  string: 'required - string to type as human',
1665
1585
  rand_sleep_float: 'optional - float timing in between keypress (defaults to 0.09)'
1666
- ) {|char| browser_obj1.text_field(name: \"search\").send_keys(char) }
1586
+ )
1667
1587
 
1668
- console_resp = #{self}.console(
1669
- browser_obj: 'required - browser_obj returned from #open method)',
1588
+ # Run console and return its result
1589
+ #{self}.console(
1590
+ browser_obj: 'optional - browser object returned from #open',
1670
1591
  js: 'required - JavaScript expression to evaluate',
1671
1592
  return_to: 'optional - return to :console or :stdout (defaults to :console)'
1672
1593
  )
1673
1594
 
1674
- console_resp = #{self}.view_dom_mutations(
1675
- browser_obj: 'required - browser_obj returned from #open method)',
1595
+ # Run view dom mutations and return its result
1596
+ #{self}.view_dom_mutations(
1597
+ browser_obj: 'required - browser_obj returned from #open method',
1676
1598
  index: 'optional - index of tab to switch to (defaults to active tab)',
1677
- target: 'optional - target JavaScript node to observe (defaults to document.body)'
1599
+ target: 'optional - target JavaScript node to observe (defaults to document.body)',
1600
+ observe_clobbering: 'optional - boolean to enable DOM Clobbering detection (defaults to true)',
1601
+ observe_redirects: 'optional - boolean to enable Insecure Redirect detection (defaults to true)',
1602
+ observe_resources: 'optional - boolean to enable resource load monitoring (defaults to true)'
1678
1603
  )
1679
1604
 
1680
- console_resp = #{self}.hide_dom_mutations(
1681
- browser_obj: 'required - browser_obj returned from #open method)',
1605
+ # Run hide dom mutations and return its result
1606
+ #{self}.hide_dom_mutations(
1607
+ browser_obj: 'optional - browser object returned from #open',
1682
1608
  index: 'optional - index of tab to switch to (defaults to active tab)'
1683
1609
  )
1684
1610
 
1611
+ # Run update about config and return its result
1685
1612
  #{self}.update_about_config(
1686
- browser_obj: 'required - browser_obj returned from #open method)',
1613
+ browser_obj: 'optional - browser object returned from #open',
1687
1614
  key: 'required - key to update in about:config',
1688
1615
  value: 'required - value to set for key in about:config'
1689
1616
  )
1690
1617
 
1691
- tabs = #{self}.list_tabs(
1618
+ # Run list tabs and return its result
1619
+ #{self}.list_tabs(
1692
1620
  browser_obj: 'required - browser_obj returned from #open method)'
1693
1621
  )
1694
1622
 
1695
- tab = #{self}.jmp_tab(
1623
+ # Run jmp tab and return its result
1624
+ #{self}.jmp_tab(
1696
1625
  browser_obj: 'required - browser_obj returned from #open method)',
1697
1626
  index: 'optional - index of tab to switch to (defaults to switching to next tab)',
1698
- keyword: 'optional - keyword in title or url used to switch tabs (defaults to switching to next tab)',
1627
+ keyword: 'optional - keyword in title or url used to switch tabs (defaults to switching to next tab)'
1699
1628
  )
1700
1629
 
1701
- tab = #{self}.new_tab(
1630
+ # Run new tab and return its result
1631
+ #{self}.new_tab(
1702
1632
  browser_obj: 'required - browser_obj returned from #open method)',
1703
1633
  url: 'optional - URL to open in new tab'
1704
1634
  )
1705
1635
 
1706
- tab = #{self}.close_tab(
1636
+ # Run close tab and return its result
1637
+ #{self}.close_tab(
1707
1638
  browser_obj: 'required - browser_obj returned from #open method)',
1708
1639
  index: 'optional - index of tab to close (defaults to closing active tab)',
1709
1640
  keyword: 'optional - keyword in title or url used to close tabs (defaults to closing active tab)'
1710
1641
  )
1711
1642
 
1712
- current_dom = #{self}.dom(
1643
+ # Run dom and return its result
1644
+ #{self}.dom(
1645
+ browser_obj: 'required - browser_obj returned from #open method)'
1646
+ )
1647
+
1648
+ # Run get page state and return its result
1649
+ #{self}.get_page_state(
1713
1650
  browser_obj: 'required - browser_obj returned from #open method)'
1714
1651
  )
1715
1652
 
1716
- page_state = #{self}.get_page_state(
1653
+ # Run devtools websocket messages and return its result
1654
+ #{self}.devtools_websocket_messages(
1717
1655
  browser_obj: 'required - browser_obj returned from #open method)'
1718
1656
  )
1719
1657
 
1658
+ # Run debugger and return its result
1720
1659
  #{self}.debugger(
1721
1660
  browser_obj: 'required - browser_obj returned from #open method)',
1722
1661
  action: 'optional - action to take :enable|:pause|:resume|:disable (Defaults to :enable)'
1723
1662
  )
1724
1663
 
1664
+ # Run get targets and return its result
1665
+ #{self}.get_targets(
1666
+ browser_obj: 'required - browser_obj returned from #open method)'
1667
+ )
1668
+
1669
+ # Run breakpoint locations and return its result
1670
+ #{self}.breakpoint_locations(
1671
+ browser_obj: 'required - browser_obj returned from #open method)'
1672
+ )
1673
+
1674
+ # Run step and return its result
1725
1675
  #{self}.step(
1726
1676
  browser_obj: 'required - browser_obj returned from #open method)',
1727
1677
  action: 'optional - action to take :into|:out|:over (Defaults to :into)',
1728
1678
  steps: 'optional - number of steps taken (Defaults to 1)'
1729
1679
  )
1730
1680
 
1681
+ # Run toggle devtools and return its result
1731
1682
  #{self}.toggle_devtools(
1732
1683
  browser_obj: 'required - browser_obj returned from #open method)'
1733
1684
  )
1734
1685
 
1686
+ # Run jmp devtools panel and return its result
1735
1687
  #{self}.jmp_devtools_panel(
1736
1688
  browser_obj: 'required - browser_obj returned from #open method)',
1737
1689
  panel: 'optional - panel to switch to :elements|:inspector|:console|:debugger|:sources|:network'
1738
1690
  )
1739
1691
 
1740
- browser_obj1 = #{self}.close(
1692
+ # Close a session previously returned by #open.
1693
+ #{self}.close(
1741
1694
  browser_obj: 'required - browser_obj returned from #open method)'
1742
1695
  )
1743
1696
 
1697
+ # Print the AUTHOR(S) string for this module.
1744
1698
  #{self}.authors
1745
1699
  "
1700
+ constants.sort
1746
1701
  end
1747
1702
  end
1748
1703
  end
@@ -163,10 +163,24 @@ module PWN
163
163
 
164
164
  public_class_method def self.help
165
165
  puts "USAGE:
166
- spin = #{self}.start
167
- #{self}.stop(spin: spin)
166
+ # Run start and return its result
167
+ #{self}.start(
168
+ format: 'optional - TTY::Spinner format (defaults to :dots)',
169
+ output: 'optional - IO to draw on (defaults to $stderr)'
170
+ )
171
+
172
+ # Run stop and return its result
173
+ #{self}.stop(
174
+ spin: 'optional - TTY::Spinner from #start (no-op if nil)'
175
+ )
176
+
177
+ # Run halt all and return its result
168
178
  #{self}.halt_all!
179
+
180
+ # Print the AUTHOR(S) string for this module.
181
+ #{self}.authors
169
182
  "
183
+ constants.sort
170
184
  end
171
185
  end
172
186
  end
@@ -134,17 +134,21 @@ module PWN
134
134
 
135
135
  public_class_method def self.help
136
136
  puts "USAGE:
137
- bearer_token = #{self}.app_only_login(
137
+ # Run app only login and return its result
138
+ #{self}.app_only_login(
138
139
  consumer_key: 'required - consumer key for app-only authentication',
139
140
  consumer_secret: 'optional - consumer secret (will prompt if nil)'
140
141
  )
141
142
 
143
+ # Run app only logout and return its result
142
144
  #{self}.app_only_logout(
143
- bearer_token: 'required bearer_token returned from #app_only_login method'
145
+ bearer_token: 'required - required bearer_token returned from #app_only_login method'
144
146
  )
145
147
 
148
+ # Print the AUTHOR(S) string for this module.
146
149
  #{self}.authors
147
150
  "
151
+ constants.sort
148
152
  end
149
153
  end
150
154
  end
@@ -318,10 +318,13 @@ module PWN
318
318
 
319
319
  public_class_method def self.help
320
320
  puts "USAGE:
321
- uri_scheme_arr = #{self}.list_all_known
321
+ # Run list all known and return its result
322
+ #{self}.list_all_known
322
323
 
324
+ # Print the AUTHOR(S) string for this module.
323
325
  #{self}.authors
324
326
  "
327
+ constants.sort
325
328
  end
326
329
  end
327
330
  end
@@ -256,49 +256,58 @@ module PWN
256
256
 
257
257
  public_class_method def self.help
258
258
  puts "USAGE:
259
+ # Run refresh encryption secrets and return its result
259
260
  #{self}.refresh_encryption_secrets(
260
261
  file: 'required - file to encrypt with new key and iv',
261
262
  key: 'required - key to decrypt',
262
263
  iv: 'required - iv to decrypt'
263
264
  )
264
265
 
266
+ # Run create and return its result
265
267
  #{self}.create(
266
- file: 'required - file to encrypt',
268
+ file: 'required - encrypted file to create',
267
269
  decryptor_file: 'optional - file to save the key && iv values'
268
270
  )
269
271
 
272
+ # Run decrypt and return its result
270
273
  #{self}.decrypt(
271
274
  file: 'required - file to decrypt',
272
275
  key: 'required - key to decrypt',
273
276
  iv: 'required - iv to decrypt'
274
277
  )
275
278
 
279
+ # Run dump and return its result
276
280
  #{self}.dump(
277
281
  file: 'required - file to dump',
278
282
  key: 'required - key to decrypt',
279
283
  iv: 'required - iv to decrypt',
280
- # search: 'optional - search for a specific string'
284
+ yaml: 'optional - dump as parsed yaml hash (default: true)'
281
285
  )
282
286
 
287
+ # Run edit and return its result
283
288
  #{self}.edit(
284
289
  file: 'required - file to edit',
285
290
  key: 'required - key to decrypt',
286
291
  iv: 'required - iv to decrypt',
287
- editor: 'optional - editor to use (default: \"/usr/bin/vim\")'
292
+ editor: 'optional - editor to use (default: /usr/bin/vim)'
288
293
  )
289
294
 
295
+ # Run encrypt and return its result
290
296
  #{self}.encrypt(
291
297
  file: 'required - file to encrypt',
292
298
  key: 'required - key to decrypt',
293
299
  iv: 'required - iv to decrypt'
294
300
  )
295
301
 
302
+ # Run file encrypted and return its result
296
303
  #{self}.file_encrypted?(
297
304
  file: 'required - file to check if encrypted'
298
305
  )
299
306
 
307
+ # Print the AUTHOR(S) string for this module.
300
308
  #{self}.authors
301
309
  "
310
+ constants.sort
302
311
  end
303
312
  end
304
313
  end
@@ -317,46 +317,58 @@ module PWN
317
317
  # Display Usage for this Module
318
318
  public_class_method def self.help
319
319
  puts "USAGE:
320
- manufacturers = #{self}.get_all_manufacturers
320
+ # Run get all manufacturers and return its result
321
+ #{self}.get_all_manufacturers
321
322
 
322
- makes = #{self}.get_all_makes
323
+ # Run get all makes and return its result
324
+ #{self}.get_all_makes
323
325
 
324
- wmis = #{self}.get_wmis_for_manufacturer(
326
+ # Run get wmis for manufacturer and return its result
327
+ #{self}.get_wmis_for_manufacturer(
325
328
  mfr: 'required - Mfr_CommonName returned from #get_all_manufacturers method'
326
329
  )
327
330
 
328
- models = #{self}.decode_wmi(
329
- wmi: 'required - WMI to decode (e.g. \"1FD\")'
331
+ # Run decode wmi and return its result
332
+ #{self}.decode_wmi(
333
+ wmi: 'required - WMI to decode (e.g. 1FD)'
330
334
  )
331
335
 
332
- models = #{self}.decode_vin(
336
+ # Run decode vin and return its result
337
+ #{self}.decode_vin(
333
338
  vin: 'required - 17 character VIN to decode'
334
339
  )
335
340
 
336
- models = #{self}.get_models_for_make(
341
+ # Run get models for make and return its result
342
+ #{self}.get_models_for_make(
337
343
  make: 'required - Make_Name returned from get_all_makes'
338
344
  )
339
345
 
340
- models = #{self}.get_models_for_make_year(
346
+ # Run get models for make year and return its result
347
+ #{self}.get_models_for_make_year(
341
348
  make: 'required - Make_Name returned from get_all_makes',
342
349
  year: 'optional - e.g. 2023 (defaults to current year)'
343
350
  )
344
351
 
345
- models = #{self}.get_vehicle_types_for_make(
352
+ # Run get vehicle types for make and return its result
353
+ #{self}.get_vehicle_types_for_make(
346
354
  make: 'required - Make_Name returned from get_all_makes'
347
355
  )
348
356
 
349
- details = #{self}.get_manufacturer_details(
357
+ # Run get manufacturer details and return its result
358
+ #{self}.get_manufacturer_details(
350
359
  mfr: 'required - Mfr_Name returned from get_all_manufacturers'
351
360
  )
352
361
 
353
- vin = #{self}.generate_vin(
354
- mfr: 'required - manufacturer name (e.g., Mfr_CommonName from get_all_manufacturers)',
362
+ # Run generate vin and return its result
363
+ #{self}.generate_vin(
364
+ mfr: 'required - manufacturer name (i.e. Mfr_CommonName from #get_all_manufacturers)',
355
365
  year: 'optional - year of the vehicle (defaults to current year)'
356
366
  )
357
367
 
368
+ # Print the AUTHOR(S) string for this module.
358
369
  #{self}.authors
359
370
  "
371
+ constants.sort
360
372
  end
361
373
  end
362
374
  end
@@ -119,26 +119,31 @@ module PWN
119
119
 
120
120
  public_class_method def self.help
121
121
  puts "USAGE:
122
+ # Run mutate and return its result
122
123
  #{self}.mutate(
123
124
  sox_path: 'optional - path to sox application (defaults to /usr/bin/sox)',
124
125
  pitch: 'optional - integer to alter voice input (defaults to -300)'
125
126
  )
126
127
 
127
- response = #{self}.speech_to_text(
128
+ # Run speech to text and return its result
129
+ #{self}.speech_to_text(
128
130
  audio_file_path: 'required - path to audio file',
129
131
  whisper_path: 'optional - path to OpenAI whisper application (defaults to /usr/local/bin/whisper)',
130
132
  model: 'optional - transcribe model to use (defaults to tiny)',
131
133
  output_dir: 'optional - directory to output results (defaults to .)'
132
134
  )
133
135
 
136
+ # Run text to speech and return its result
134
137
  #{self}.text_to_speech(
135
138
  text_path: 'required - path to text file to speak',
136
139
  festival_path: 'optional - path to festival (defaults to /usr/bin/festival)',
137
- voice: 'optional - voice to use (defaults to cmu_us_slt_arctic_hts)',
140
+ voice: 'optional - voice to use (defaults to cmu_us_slt_arctic_hts)'
138
141
  )
139
142
 
143
+ # Print the AUTHOR(S) string for this module.
140
144
  #{self}.authors
141
145
  "
146
+ constants.sort
142
147
  end
143
148
  end
144
149
  end
@@ -0,0 +1,67 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'open3'
4
+
5
+ module PWN
6
+ module Plugins
7
+ # volatility3 wrapper.
8
+ module Volatility
9
+ public_class_method def self.required_bins
10
+ %w[vol]
11
+ end
12
+
13
+ public_class_method def self.run(opts = {})
14
+ bin = %w[vol volatility3 vol3].find { |b| PWN::Plugins::PreflightChecker.bin?(name: b) }
15
+ raise PWN::Plugins::PreflightChecker::MissingBinary, 'ERROR: volatility3 (vol) missing' unless bin
16
+
17
+ memory = opts[:memory] || opts[:file]
18
+ plugin = opts[:plugin] || 'windows.pslist'
19
+ raise 'ERROR: memory is required' if memory.to_s.empty?
20
+
21
+ stdout, stderr, status = Open3.capture3(bin, '-f', memory.to_s, plugin.to_s)
22
+ { stdout: stdout, stderr: stderr, exit: status.exitstatus }
23
+ end
24
+
25
+ public_class_method def self.yara(opts = {})
26
+ PWN::Plugins::PreflightChecker.require_bin!(name: 'yara')
27
+ rules = opts[:rules] || opts[:rule]
28
+ target = opts[:memory] || opts[:file] || opts[:path]
29
+ raise 'ERROR: rules and memory/file are required' if rules.to_s.empty? || target.to_s.empty?
30
+
31
+ stdout, stderr, status = Open3.capture3('yara', rules.to_s, target.to_s)
32
+ { stdout: stdout, stderr: stderr, exit: status.exitstatus }
33
+ end
34
+
35
+ public_class_method def self.authors
36
+ "AUTHOR(S):\n 0day Inc. <support@0dayinc.com>\n"
37
+ end
38
+
39
+ public_class_method def self.help
40
+ puts "USAGE:
41
+ # List host binaries this module expects to be installed.
42
+ #{self}.required_bins
43
+
44
+ # Run run and return its result
45
+ #{self}.run(
46
+ memory: 'required - memory value consumed by #run (defaults to opts[:file])',
47
+ file: 'optional - filesystem path',
48
+ plugin: 'required - plugin value consumed by #run (defaults to windows.pslist)'
49
+ )
50
+
51
+ # Scan a memory image with a yara rules file.
52
+ #{self}.yara(
53
+ rules: 'required - path to a .yar rules file',
54
+ rule: 'optional - alias for rules',
55
+ memory: 'required - memory image path',
56
+ file: 'optional - alias for memory',
57
+ path: 'optional - alias for memory'
58
+ )
59
+
60
+ # Print the AUTHOR(S) string for this module.
61
+ #{self}.authors
62
+ "
63
+ constants.sort
64
+ end
65
+ end
66
+ end
67
+ end
@@ -62,19 +62,23 @@ module PWN
62
62
 
63
63
  public_class_method def self.help
64
64
  puts "USAGE:
65
- vsphere_obj = #{self}.login(
65
+ # Run login and return its result
66
+ #{self}.login(
66
67
  host: 'required - vsphere host or ip',
67
- username: 'required - username',
68
+ username: 'required - username value consumed by #login',
68
69
  password: 'optional - password (will prompt if nil)',
69
- insecure: 'optional - ignore ssl checks (defaults to false)
70
+ insecure: 'optional - ignore ssl checks (defaults to false'
70
71
  )
71
72
 
72
- vsphere_obj = #{self}.logout(
73
- vsphere_obj: 'required vsphere_obj returned from #login method'
73
+ # Run logout and return its result
74
+ #{self}.logout(
75
+ vsphere_obj: 'required - required vsphere_obj returned from #login method'
74
76
  )
75
77
 
78
+ # Print the AUTHOR(S) string for this module.
76
79
  #{self}.authors
77
80
  "
81
+ constants.sort
78
82
  end
79
83
  end
80
84
  end