pwn 0.5.708 → 0.5.709

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 (434) hide show
  1. checksums.yaml +4 -4
  2. data/documentation/Installation.md +1 -0
  3. data/etc/default_skills/pwn/ai/agent/extrospection/osint/bridges/SKILL.md +30 -8
  4. data/etc/default_skills/pwn/ai/agent/extrospection/osint/social/SKILL.md +30 -8
  5. data/etc/default_skills/pwn/ai/agent/extrospection/osint/social/references/urls.md +1 -1
  6. data/etc/default_skills/pwn/ai/agent/extrospection/references/urls.md +0 -1
  7. data/etc/default_skills/pwn/memory_index/SKILL.md +0 -4
  8. data/etc/default_skills/pwn/plugins/aflplusplus/SKILL.md +48 -0
  9. data/etc/default_skills/pwn/plugins/android/SKILL.md +1 -0
  10. data/etc/default_skills/pwn/plugins/artifact_registry/SKILL.md +49 -0
  11. data/etc/default_skills/pwn/plugins/binary_parser/SKILL.md +54 -0
  12. data/etc/default_skills/pwn/plugins/credential_attack/SKILL.md +51 -0
  13. data/etc/default_skills/pwn/plugins/doctor/SKILL.md +57 -0
  14. data/etc/default_skills/pwn/plugins/exploit_dev/SKILL.md +61 -0
  15. data/etc/default_skills/pwn/plugins/frida/SKILL.md +49 -0
  16. data/etc/default_skills/pwn/plugins/gdb/SKILL.md +52 -0
  17. data/etc/default_skills/pwn/plugins/jobs/SKILL.md +51 -0
  18. data/etc/default_skills/pwn/plugins/nuclei/SKILL.md +48 -0
  19. data/etc/default_skills/pwn/plugins/process_tube/SKILL.md +52 -0
  20. data/etc/default_skills/pwn/plugins/radare2/SKILL.md +59 -0
  21. data/etc/default_skills/pwn/plugins/recon/SKILL.md +55 -0
  22. data/etc/default_skills/pwn/plugins/recon/references/urls.md +5 -0
  23. data/etc/default_skills/pwn/plugins/sqlmap/SKILL.md +48 -0
  24. data/etc/default_skills/pwn/plugins/transparent_browser/SKILL.md +0 -4
  25. data/etc/default_skills/pwn/plugins/volatility/SKILL.md +48 -0
  26. data/lib/pwn/ai/agent/assembly.rb +4 -1
  27. data/lib/pwn/ai/agent/btc.rb +4 -1
  28. data/lib/pwn/ai/agent/burp_suite.rb +5 -2
  29. data/lib/pwn/ai/agent/curriculum.rb +89 -30
  30. data/lib/pwn/ai/agent/dispatch.rb +27 -16
  31. data/lib/pwn/ai/agent/extrospection/osint/bridges.rb +9 -18
  32. data/lib/pwn/ai/agent/extrospection/osint/social.rb +9 -18
  33. data/lib/pwn/ai/agent/extrospection.rb +185 -60
  34. data/lib/pwn/ai/agent/gqrx.rb +4 -1
  35. data/lib/pwn/ai/agent/hacker_one.rb +5 -2
  36. data/lib/pwn/ai/agent/learning.rb +142 -25
  37. data/lib/pwn/ai/agent/loop.rb +53 -46
  38. data/lib/pwn/ai/agent/metrics.rb +133 -23
  39. data/lib/pwn/ai/agent/mistakes.rb +126 -17
  40. data/lib/pwn/ai/agent/open_goal.rb +25 -9
  41. data/lib/pwn/ai/agent/policy.rb +158 -18
  42. data/lib/pwn/ai/agent/prompt_builder.rb +21 -11
  43. data/lib/pwn/ai/agent/prompt_cache.rb +44 -13
  44. data/lib/pwn/ai/agent/reflect.rb +9 -5
  45. data/lib/pwn/ai/agent/registry.rb +65 -12
  46. data/lib/pwn/ai/agent/result.rb +19 -10
  47. data/lib/pwn/ai/agent/reward.rb +150 -32
  48. data/lib/pwn/ai/agent/sast.rb +4 -1
  49. data/lib/pwn/ai/agent/swarm.rb +72 -36
  50. data/lib/pwn/ai/agent/task_summarizer.rb +165 -36
  51. data/lib/pwn/ai/agent/tool_guard.rb +105 -6
  52. data/lib/pwn/ai/agent/transparent_browser.rb +4 -1
  53. data/lib/pwn/ai/agent/turn_finalizer.rb +41 -21
  54. data/lib/pwn/ai/agent/vuln_gen.rb +6 -3
  55. data/lib/pwn/ai/agent.rb +4 -0
  56. data/lib/pwn/ai/anthropic.rb +41 -7
  57. data/lib/pwn/ai/gemini.rb +21 -11
  58. data/lib/pwn/ai/grok.rb +44 -6
  59. data/lib/pwn/ai/http_retry.rb +40 -12
  60. data/lib/pwn/ai/ollama.rb +19 -10
  61. data/lib/pwn/ai/open_ai.rb +81 -30
  62. data/lib/pwn/ai/open_web_ui.rb +20 -14
  63. data/lib/pwn/ai/red_team/agent_protocol_abuse.rb +7 -1
  64. data/lib/pwn/ai/red_team/data_and_model_poisoning.rb +7 -1
  65. data/lib/pwn/ai/red_team/excessive_agency.rb +7 -1
  66. data/lib/pwn/ai/red_team/hidden_context_exposure.rb +7 -1
  67. data/lib/pwn/ai/red_team/insecure_output_handling.rb +7 -1
  68. data/lib/pwn/ai/red_team/jailbreak.rb +7 -1
  69. data/lib/pwn/ai/red_team/memory_poisoning.rb +7 -1
  70. data/lib/pwn/ai/red_team/multimodal_injection.rb +7 -1
  71. data/lib/pwn/ai/red_team/overreliance.rb +7 -1
  72. data/lib/pwn/ai/red_team/payload_splitting.rb +7 -1
  73. data/lib/pwn/ai/red_team/prompt_injection.rb +7 -1
  74. data/lib/pwn/ai/red_team/rag_poisoning.rb +7 -1
  75. data/lib/pwn/ai/red_team/sensitive_information_disclosure.rb +7 -1
  76. data/lib/pwn/ai/red_team/supply_chain.rb +7 -1
  77. data/lib/pwn/ai/red_team/system_prompt_extraction.rb +7 -1
  78. data/lib/pwn/ai/red_team/test_case_engine.rb +12 -9
  79. data/lib/pwn/ai/red_team/token_smuggling.rb +7 -1
  80. data/lib/pwn/ai/red_team/unbounded_consumption.rb +7 -1
  81. data/lib/pwn/ai/red_team/vector_and_embedding_weaknesses.rb +7 -1
  82. data/lib/pwn/ai/red_team.rb +4 -0
  83. data/lib/pwn/ai.rb +4 -0
  84. data/lib/pwn/aws/acm.rb +5 -2
  85. data/lib/pwn/aws/api_gateway.rb +10 -7
  86. data/lib/pwn/aws/app_stream.rb +5 -2
  87. data/lib/pwn/aws/application_auto_scaling.rb +5 -2
  88. data/lib/pwn/aws/application_discovery_service.rb +5 -2
  89. data/lib/pwn/aws/auto_scaling.rb +5 -2
  90. data/lib/pwn/aws/batch.rb +5 -2
  91. data/lib/pwn/aws/budgets.rb +5 -2
  92. data/lib/pwn/aws/cloud_formation.rb +5 -2
  93. data/lib/pwn/aws/cloud_front.rb +7 -4
  94. data/lib/pwn/aws/cloud_hsm.rb +5 -2
  95. data/lib/pwn/aws/cloud_search.rb +5 -2
  96. data/lib/pwn/aws/cloud_search_domain.rb +5 -2
  97. data/lib/pwn/aws/cloud_trail.rb +5 -2
  98. data/lib/pwn/aws/cloud_watch.rb +5 -2
  99. data/lib/pwn/aws/cloud_watch_events.rb +5 -2
  100. data/lib/pwn/aws/cloud_watch_logs.rb +5 -2
  101. data/lib/pwn/aws/code_build.rb +5 -2
  102. data/lib/pwn/aws/code_commit.rb +5 -2
  103. data/lib/pwn/aws/code_deploy.rb +5 -2
  104. data/lib/pwn/aws/code_pipeline.rb +5 -2
  105. data/lib/pwn/aws/cognito_identity.rb +5 -2
  106. data/lib/pwn/aws/cognito_identity_provider.rb +5 -2
  107. data/lib/pwn/aws/cognito_sync.rb +5 -2
  108. data/lib/pwn/aws/config_service.rb +5 -2
  109. data/lib/pwn/aws/data_pipleline.rb +5 -2
  110. data/lib/pwn/aws/database_migration_service.rb +5 -2
  111. data/lib/pwn/aws/device_farm.rb +5 -2
  112. data/lib/pwn/aws/direct_connect.rb +5 -2
  113. data/lib/pwn/aws/directory_service.rb +5 -2
  114. data/lib/pwn/aws/dynamo_db.rb +5 -2
  115. data/lib/pwn/aws/dynamo_db_streams.rb +5 -2
  116. data/lib/pwn/aws/ec2.rb +5 -2
  117. data/lib/pwn/aws/ecr.rb +5 -2
  118. data/lib/pwn/aws/ecs.rb +5 -2
  119. data/lib/pwn/aws/efs.rb +5 -2
  120. data/lib/pwn/aws/elasti_cache.rb +5 -2
  121. data/lib/pwn/aws/elastic_beanstalk.rb +8 -5
  122. data/lib/pwn/aws/elastic_load_balancing.rb +5 -2
  123. data/lib/pwn/aws/elastic_load_balancing_v2.rb +6 -3
  124. data/lib/pwn/aws/elastic_transcoder.rb +5 -2
  125. data/lib/pwn/aws/elasticsearch_service.rb +5 -2
  126. data/lib/pwn/aws/emr.rb +5 -2
  127. data/lib/pwn/aws/firehose.rb +5 -2
  128. data/lib/pwn/aws/game_lift.rb +5 -2
  129. data/lib/pwn/aws/glacier.rb +6 -3
  130. data/lib/pwn/aws/health.rb +5 -2
  131. data/lib/pwn/aws/iam.rb +10 -4
  132. data/lib/pwn/aws/import_export.rb +5 -2
  133. data/lib/pwn/aws/inspector.rb +5 -2
  134. data/lib/pwn/aws/iot.rb +5 -2
  135. data/lib/pwn/aws/iot_data_plane.rb +5 -2
  136. data/lib/pwn/aws/kinesis.rb +5 -2
  137. data/lib/pwn/aws/kinesis_analytics.rb +5 -2
  138. data/lib/pwn/aws/kms.rb +5 -2
  139. data/lib/pwn/aws/lambda.rb +5 -2
  140. data/lib/pwn/aws/lambda_preview.rb +5 -2
  141. data/lib/pwn/aws/lex.rb +5 -2
  142. data/lib/pwn/aws/lightsail.rb +5 -2
  143. data/lib/pwn/aws/machine_learning.rb +5 -2
  144. data/lib/pwn/aws/marketplace_commerce_analytics.rb +5 -2
  145. data/lib/pwn/aws/marketplace_metering.rb +5 -2
  146. data/lib/pwn/aws/ops_works.rb +5 -2
  147. data/lib/pwn/aws/ops_works_cm.rb +5 -2
  148. data/lib/pwn/aws/pinpoint.rb +5 -2
  149. data/lib/pwn/aws/polly.rb +5 -2
  150. data/lib/pwn/aws/rds.rb +5 -2
  151. data/lib/pwn/aws/redshift.rb +5 -2
  152. data/lib/pwn/aws/rekognition.rb +5 -2
  153. data/lib/pwn/aws/route53.rb +5 -2
  154. data/lib/pwn/aws/route53_domains.rb +5 -2
  155. data/lib/pwn/aws/s3.rb +5 -2
  156. data/lib/pwn/aws/service_catalog.rb +5 -2
  157. data/lib/pwn/aws/ses.rb +5 -2
  158. data/lib/pwn/aws/shield.rb +5 -2
  159. data/lib/pwn/aws/simple_db.rb +5 -2
  160. data/lib/pwn/aws/sms.rb +5 -2
  161. data/lib/pwn/aws/snowball.rb +5 -2
  162. data/lib/pwn/aws/sns.rb +5 -2
  163. data/lib/pwn/aws/sqs.rb +5 -2
  164. data/lib/pwn/aws/ssm.rb +5 -2
  165. data/lib/pwn/aws/states.rb +5 -2
  166. data/lib/pwn/aws/storage_gateway.rb +5 -2
  167. data/lib/pwn/aws/sts.rb +4 -1
  168. data/lib/pwn/aws/support.rb +5 -2
  169. data/lib/pwn/aws/swf.rb +5 -2
  170. data/lib/pwn/aws/waf.rb +5 -2
  171. data/lib/pwn/aws/waf_regional.rb +5 -2
  172. data/lib/pwn/aws/workspaces.rb +5 -2
  173. data/lib/pwn/aws/x_ray.rb +5 -2
  174. data/lib/pwn/aws.rb +4 -0
  175. data/lib/pwn/banner/anon.rb +3 -0
  176. data/lib/pwn/banner/bubble.rb +3 -0
  177. data/lib/pwn/banner/cheshire.rb +3 -0
  178. data/lib/pwn/banner/code_cave.rb +3 -0
  179. data/lib/pwn/banner/dont_panic.rb +3 -0
  180. data/lib/pwn/banner/f_society.rb +3 -0
  181. data/lib/pwn/banner/fork_bomb.rb +3 -0
  182. data/lib/pwn/banner/jmp_esp.rb +3 -0
  183. data/lib/pwn/banner/matrix.rb +5 -1
  184. data/lib/pwn/banner/ninja.rb +3 -0
  185. data/lib/pwn/banner/off_the_air.rb +3 -0
  186. data/lib/pwn/banner/pirate.rb +3 -0
  187. data/lib/pwn/banner/radare2.rb +3 -0
  188. data/lib/pwn/banner/radare2_ai.rb +3 -0
  189. data/lib/pwn/banner/white_rabbit.rb +3 -0
  190. data/lib/pwn/banner.rb +6 -2
  191. data/lib/pwn/blockchain/btc.rb +8 -3
  192. data/lib/pwn/blockchain/eth.rb +10 -3
  193. data/lib/pwn/blockchain.rb +4 -0
  194. data/lib/pwn/bounty/lifecycle_authz_replay.rb +46 -27
  195. data/lib/pwn/bounty.rb +4 -0
  196. data/lib/pwn/config.rb +79 -13
  197. data/lib/pwn/cron.rb +297 -20
  198. data/lib/pwn/driver.rb +2 -18
  199. data/lib/pwn/ffi/adalm_pluto.rb +65 -11
  200. data/lib/pwn/ffi/fftw.rb +31 -6
  201. data/lib/pwn/ffi/hack_rf.rb +59 -8
  202. data/lib/pwn/ffi/liquid.rb +63 -10
  203. data/lib/pwn/ffi/rtl_sdr.rb +35 -5
  204. data/lib/pwn/ffi/soapy_sdr.rb +60 -10
  205. data/lib/pwn/ffi/stdio.rb +5 -8
  206. data/lib/pwn/ffi/volk.rb +36 -7
  207. data/lib/pwn/ffi.rb +12 -0
  208. data/lib/pwn/memory.rb +136 -16
  209. data/lib/pwn/memory_index.rb +34 -19
  210. data/lib/pwn/migrate.rb +34 -24
  211. data/lib/pwn/module_skills.rb +39 -8
  212. data/lib/pwn/plugins/aflplusplus.rb +52 -0
  213. data/lib/pwn/plugins/android.rb +65 -245
  214. data/lib/pwn/plugins/artifact_registry.rb +71 -0
  215. data/lib/pwn/plugins/assembly.rb +9 -4
  216. data/lib/pwn/plugins/authentication_helper.rb +8 -5
  217. data/lib/pwn/plugins/baresip.rb +59 -12
  218. data/lib/pwn/plugins/basic_auth.rb +9 -3
  219. data/lib/pwn/plugins/beef.rb +28 -18
  220. data/lib/pwn/plugins/binary_parser.rb +133 -0
  221. data/lib/pwn/plugins/black_duck_binary_analysis.rb +63 -39
  222. data/lib/pwn/plugins/burp_suite.rb +98 -68
  223. data/lib/pwn/plugins/bus_pirate.rb +15 -8
  224. data/lib/pwn/plugins/char.rb +33 -3
  225. data/lib/pwn/plugins/credential_attack.rb +99 -0
  226. data/lib/pwn/plugins/credit_card.rb +6 -1
  227. data/lib/pwn/plugins/dao_ldap.rb +19 -13
  228. data/lib/pwn/plugins/dao_mongo.rb +11 -5
  229. data/lib/pwn/plugins/dao_postgres.rb +28 -19
  230. data/lib/pwn/plugins/dao_sqlite3.rb +15 -6
  231. data/lib/pwn/plugins/defect_dojo.rb +38 -22
  232. data/lib/pwn/plugins/detect_os.rb +5 -0
  233. data/lib/pwn/plugins/doctor.rb +149 -0
  234. data/lib/pwn/plugins/ein.rb +3 -0
  235. data/lib/pwn/plugins/exploit_dev.rb +264 -0
  236. data/lib/pwn/plugins/file_fu.rb +11 -8
  237. data/lib/pwn/plugins/frida.rb +61 -0
  238. data/lib/pwn/plugins/fuzz.rb +9 -6
  239. data/lib/pwn/plugins/gdb.rb +95 -0
  240. data/lib/pwn/plugins/git.rb +19 -14
  241. data/lib/pwn/plugins/github.rb +38 -15
  242. data/lib/pwn/plugins/google_workspace.rb +188 -45
  243. data/lib/pwn/plugins/hacker_one.rb +159 -35
  244. data/lib/pwn/plugins/hunter.rb +6 -3
  245. data/lib/pwn/plugins/ip_info.rb +9 -4
  246. data/lib/pwn/plugins/irc.rb +28 -15
  247. data/lib/pwn/plugins/jenkins.rb +65 -57
  248. data/lib/pwn/plugins/jira_data_center.rb +30 -22
  249. data/lib/pwn/plugins/jobs.rb +109 -0
  250. data/lib/pwn/plugins/json_pathify.rb +9 -5
  251. data/lib/pwn/plugins/log.rb +113 -13
  252. data/lib/pwn/plugins/mail_agent.rb +87 -79
  253. data/lib/pwn/plugins/metasploit.rb +11 -6
  254. data/lib/pwn/plugins/monkey_patch.rb +3 -0
  255. data/lib/pwn/plugins/msr206.rb +42 -28
  256. data/lib/pwn/plugins/nessus_cloud.rb +44 -4
  257. data/lib/pwn/plugins/nexpose_vuln_scan.rb +40 -24
  258. data/lib/pwn/plugins/nmap_it.rb +14 -34
  259. data/lib/pwn/plugins/nuclei.rb +57 -0
  260. data/lib/pwn/plugins/oauth2.rb +11 -5
  261. data/lib/pwn/plugins/ocr.rb +3 -0
  262. data/lib/pwn/plugins/open_api.rb +5 -2
  263. data/lib/pwn/plugins/openvas.rb +33 -25
  264. data/lib/pwn/plugins/packet.rb +152 -31
  265. data/lib/pwn/plugins/pdf_parse.rb +5 -2
  266. data/lib/pwn/plugins/pony.rb +86 -1
  267. data/lib/pwn/plugins/process_tube.rb +120 -0
  268. data/lib/pwn/plugins/ps.rb +7 -1
  269. data/lib/pwn/plugins/pwn_logger.rb +6 -2
  270. data/lib/pwn/plugins/rabbit_mq.rb +12 -7
  271. data/lib/pwn/plugins/radare2.rb +253 -0
  272. data/lib/pwn/plugins/recon.rb +161 -0
  273. data/lib/pwn/plugins/repl.rb +122 -1
  274. data/lib/pwn/plugins/scannable_codes.rb +5 -1
  275. data/lib/pwn/plugins/serial.rb +24 -14
  276. data/lib/pwn/plugins/shodan.rb +54 -35
  277. data/lib/pwn/plugins/slack_client.rb +11 -6
  278. data/lib/pwn/plugins/sock.rb +16 -8
  279. data/lib/pwn/plugins/spider.rb +5 -2
  280. data/lib/pwn/plugins/sqlmap.rb +49 -0
  281. data/lib/pwn/plugins/ssn.rb +3 -0
  282. data/lib/pwn/plugins/thread_pool.rb +6 -9
  283. data/lib/pwn/plugins/tor.rb +9 -4
  284. data/lib/pwn/plugins/transparent_browser.rb +62 -107
  285. data/lib/pwn/plugins/tty_spinner.rb +16 -2
  286. data/lib/pwn/plugins/twitter_api.rb +6 -2
  287. data/lib/pwn/plugins/uri_scheme.rb +4 -1
  288. data/lib/pwn/plugins/vault.rb +12 -3
  289. data/lib/pwn/plugins/vin.rb +24 -12
  290. data/lib/pwn/plugins/voice.rb +7 -2
  291. data/lib/pwn/plugins/volatility.rb +48 -0
  292. data/lib/pwn/plugins/vsphere.rb +9 -5
  293. data/lib/pwn/plugins/xxd.rb +12 -43
  294. data/lib/pwn/plugins/zaproxy.rb +30 -16
  295. data/lib/pwn/plugins.rb +19 -0
  296. data/lib/pwn/reports/ai_red_team.rb +6 -2
  297. data/lib/pwn/reports/csv.rb +8 -1
  298. data/lib/pwn/reports/fuzz.rb +5 -2
  299. data/lib/pwn/reports/html.rb +8 -1
  300. data/lib/pwn/reports/html_footer.rb +4 -3
  301. data/lib/pwn/reports/html_header.rb +6 -2
  302. data/lib/pwn/reports/json.rb +8 -1
  303. data/lib/pwn/reports/markdown.rb +8 -1
  304. data/lib/pwn/reports/pdf.rb +8 -1
  305. data/lib/pwn/reports/phone.rb +5 -2
  306. data/lib/pwn/reports/sast.rb +6 -2
  307. data/lib/pwn/reports/uri_buster.rb +5 -2
  308. data/lib/pwn/reports/xml.rb +8 -1
  309. data/lib/pwn/reports.rb +19 -0
  310. data/lib/pwn/sast/amqp_connect_as_guest.rb +9 -3
  311. data/lib/pwn/sast/apache_file_system_util_api.rb +9 -3
  312. data/lib/pwn/sast/aws.rb +9 -3
  313. data/lib/pwn/sast/banned_function_calls_c.rb +9 -3
  314. data/lib/pwn/sast/base64.rb +9 -3
  315. data/lib/pwn/sast/beef_hook.rb +9 -3
  316. data/lib/pwn/sast/cmd_execution_go_lang.rb +9 -3
  317. data/lib/pwn/sast/cmd_execution_java.rb +9 -3
  318. data/lib/pwn/sast/cmd_execution_python.rb +9 -3
  319. data/lib/pwn/sast/cmd_execution_ruby.rb +9 -3
  320. data/lib/pwn/sast/cmd_execution_scala.rb +9 -3
  321. data/lib/pwn/sast/csrf.rb +9 -3
  322. data/lib/pwn/sast/deserial_java.rb +9 -3
  323. data/lib/pwn/sast/emoticon.rb +9 -3
  324. data/lib/pwn/sast/eval.rb +9 -3
  325. data/lib/pwn/sast/factory.rb +9 -3
  326. data/lib/pwn/sast/http_authorization_header.rb +9 -3
  327. data/lib/pwn/sast/inner_html.rb +9 -3
  328. data/lib/pwn/sast/keystore.rb +9 -3
  329. data/lib/pwn/sast/local_storage.rb +9 -3
  330. data/lib/pwn/sast/location_hash.rb +9 -3
  331. data/lib/pwn/sast/log4j.rb +9 -3
  332. data/lib/pwn/sast/logger.rb +9 -3
  333. data/lib/pwn/sast/md5.rb +9 -3
  334. data/lib/pwn/sast/outer_html.rb +9 -3
  335. data/lib/pwn/sast/padding_oracle.rb +9 -3
  336. data/lib/pwn/sast/password.rb +9 -3
  337. data/lib/pwn/sast/php_input_mechanisms.rb +9 -3
  338. data/lib/pwn/sast/php_type_juggling.rb +9 -3
  339. data/lib/pwn/sast/pom_version.rb +9 -3
  340. data/lib/pwn/sast/port.rb +9 -3
  341. data/lib/pwn/sast/post_message.rb +9 -3
  342. data/lib/pwn/sast/private_key.rb +9 -3
  343. data/lib/pwn/sast/redirect.rb +9 -3
  344. data/lib/pwn/sast/redos.rb +9 -3
  345. data/lib/pwn/sast/shell.rb +9 -3
  346. data/lib/pwn/sast/signature.rb +9 -3
  347. data/lib/pwn/sast/sql.rb +9 -3
  348. data/lib/pwn/sast/ssl.rb +9 -3
  349. data/lib/pwn/sast/sudo.rb +9 -3
  350. data/lib/pwn/sast/task_tag.rb +9 -3
  351. data/lib/pwn/sast/test_case_engine.rb +11 -7
  352. data/lib/pwn/sast/throw_errors.rb +9 -3
  353. data/lib/pwn/sast/token.rb +9 -3
  354. data/lib/pwn/sast/type_script_type_juggling.rb +9 -3
  355. data/lib/pwn/sast/use_after_free.rb +9 -3
  356. data/lib/pwn/sast/version.rb +9 -3
  357. data/lib/pwn/sast/window_location_hash.rb +9 -3
  358. data/lib/pwn/sast.rb +4 -0
  359. data/lib/pwn/sdr/decoder/adsb.rb +36 -5
  360. data/lib/pwn/sdr/decoder/apt.rb +9 -6
  361. data/lib/pwn/sdr/decoder/base.rb +74 -22
  362. data/lib/pwn/sdr/decoder/bluetooth.rb +17 -5
  363. data/lib/pwn/sdr/decoder/dect.rb +12 -3
  364. data/lib/pwn/sdr/decoder/dsp.rb +229 -39
  365. data/lib/pwn/sdr/decoder/flex.rb +59 -11
  366. data/lib/pwn/sdr/decoder/gps.rb +12 -3
  367. data/lib/pwn/sdr/decoder/gsm.rb +24 -4
  368. data/lib/pwn/sdr/decoder/iridium.rb +12 -3
  369. data/lib/pwn/sdr/decoder/lora.rb +13 -4
  370. data/lib/pwn/sdr/decoder/lte.rb +27 -3
  371. data/lib/pwn/sdr/decoder/morse.rb +12 -3
  372. data/lib/pwn/sdr/decoder/p25.rb +12 -3
  373. data/lib/pwn/sdr/decoder/pager.rb +8 -5
  374. data/lib/pwn/sdr/decoder/pocsag.rb +29 -9
  375. data/lib/pwn/sdr/decoder/rds.rb +14 -8
  376. data/lib/pwn/sdr/decoder/rfid.rb +12 -3
  377. data/lib/pwn/sdr/decoder/rtl433.rb +12 -3
  378. data/lib/pwn/sdr/decoder/rtty.rb +8 -5
  379. data/lib/pwn/sdr/decoder/wifi.rb +12 -3
  380. data/lib/pwn/sdr/decoder/zigbee.rb +12 -3
  381. data/lib/pwn/sdr/decoder.rb +9 -0
  382. data/lib/pwn/sdr/flipper_zero.rb +17 -10
  383. data/lib/pwn/sdr/frequency_allocation.rb +4 -1
  384. data/lib/pwn/sdr/gqrx.rb +178 -119
  385. data/lib/pwn/sdr/rfidler.rb +4 -1
  386. data/lib/pwn/sdr/son_micro_rfid.rb +37 -24
  387. data/lib/pwn/sdr.rb +14 -0
  388. data/lib/pwn/sessions.rb +86 -16
  389. data/lib/pwn/setup.rb +94 -37
  390. data/lib/pwn/version.rb +1 -1
  391. data/lib/pwn/www/app_cobalt_io.rb +11 -5
  392. data/lib/pwn/www/bing.rb +10 -5
  393. data/lib/pwn/www/bug_crowd.rb +11 -5
  394. data/lib/pwn/www/checkip.rb +8 -4
  395. data/lib/pwn/www/coinbase_pro.rb +11 -5
  396. data/lib/pwn/www/duckduckgo.rb +12 -6
  397. data/lib/pwn/www/facebook.rb +11 -5
  398. data/lib/pwn/www/github.rb +11 -5
  399. data/lib/pwn/www/google.rb +11 -5
  400. data/lib/pwn/www/hacker_one.rb +20 -9
  401. data/lib/pwn/www/linkedin.rb +11 -5
  402. data/lib/pwn/www/pandora.rb +11 -5
  403. data/lib/pwn/www/pastebin.rb +9 -4
  404. data/lib/pwn/www/paypal.rb +19 -11
  405. data/lib/pwn/www/synack.rb +11 -5
  406. data/lib/pwn/www/torch.rb +13 -8
  407. data/lib/pwn/www/trading_view.rb +11 -5
  408. data/lib/pwn/www/twitter.rb +11 -5
  409. data/lib/pwn/www/uber.rb +11 -5
  410. data/lib/pwn/www/upwork.rb +11 -5
  411. data/lib/pwn/www/wayback_machine.rb +12 -6
  412. data/lib/pwn/www/youtube.rb +10 -5
  413. data/lib/pwn/www.rb +4 -0
  414. data/spec/conventions_spec.rb +118 -2
  415. data/spec/lib/pwn/ai/agent/reward_spec.rb +9 -0
  416. data/spec/lib/pwn/plugins/aflplusplus_spec.rb +13 -0
  417. data/spec/lib/pwn/plugins/artifact_registry_spec.rb +13 -0
  418. data/spec/lib/pwn/plugins/binary_parser_spec.rb +21 -0
  419. data/spec/lib/pwn/plugins/credential_attack_spec.rb +13 -0
  420. data/spec/lib/pwn/plugins/doctor_spec.rb +23 -0
  421. data/spec/lib/pwn/plugins/exploit_dev_spec.rb +23 -0
  422. data/spec/lib/pwn/plugins/frida_spec.rb +13 -0
  423. data/spec/lib/pwn/plugins/gdb_spec.rb +13 -0
  424. data/spec/lib/pwn/plugins/jobs_spec.rb +13 -0
  425. data/spec/lib/pwn/plugins/nuclei_spec.rb +13 -0
  426. data/spec/lib/pwn/plugins/process_tube_spec.rb +13 -0
  427. data/spec/lib/pwn/plugins/radare2_spec.rb +13 -0
  428. data/spec/lib/pwn/plugins/recon_spec.rb +26 -0
  429. data/spec/lib/pwn/plugins/sqlmap_spec.rb +13 -0
  430. data/spec/lib/pwn/plugins/volatility_spec.rb +13 -0
  431. data/third_party/pwn_rdoc.jsonl +126 -5
  432. metadata +47 -3
  433. data/etc/default_skills/pwn/memory_index/references/urls.md +0 -4
  434. data/etc/default_skills/pwn/plugins/transparent_browser/references/urls.md +0 -3
@@ -0,0 +1,109 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'json'
4
+ require 'fileutils'
5
+ require 'securerandom'
6
+ require 'open3'
7
+
8
+ module PWN
9
+ module Plugins
10
+ # Background jobs that survive a pwn-ai turn (scans, fuzz campaigns).
11
+ module Jobs
12
+ JOBS_DIR = File.join(Dir.home, '.pwn', 'jobs')
13
+
14
+ public_class_method def self.required_bins
15
+ []
16
+ end
17
+
18
+ public_class_method def self.start(opts = {})
19
+ cmd = opts[:command] || opts[:cmd]
20
+ raise 'ERROR: command is required' if cmd.to_s.empty?
21
+
22
+ FileUtils.mkdir_p(JOBS_DIR)
23
+ id = SecureRandom.hex(6)
24
+ log = File.join(JOBS_DIR, "#{id}.log")
25
+ meta = File.join(JOBS_DIR, "#{id}.json")
26
+ pid = spawn(cmd.to_s, %i[out err] => [log, 'a'])
27
+ Process.detach(pid)
28
+ row = {
29
+ id: id,
30
+ pid: pid,
31
+ command: cmd.to_s,
32
+ log: log,
33
+ session_id: opts[:session_id],
34
+ started_at: Time.now.utc.iso8601
35
+ }
36
+ File.write(meta, JSON.generate(row))
37
+ row
38
+ end
39
+
40
+ public_class_method def self.status(opts = {})
41
+ row = load_job(opts)
42
+ alive = begin
43
+ Process.kill(0, row[:pid].to_i)
44
+ true
45
+ rescue Errno::ESRCH, Errno::EPERM
46
+ false
47
+ end
48
+ row.merge(alive: alive)
49
+ end
50
+
51
+ public_class_method def self.tail(opts = {})
52
+ row = load_job(opts)
53
+ n = (opts[:lines] || 40).to_i
54
+ return '' unless File.file?(row[:log])
55
+
56
+ File.readlines(row[:log]).last(n).join
57
+ end
58
+
59
+ public_class_method def self.stop(opts = {})
60
+ row = load_job(opts)
61
+ Process.kill('TERM', row[:pid].to_i)
62
+ true
63
+ rescue Errno::ESRCH
64
+ false
65
+ end
66
+
67
+ public_class_method def self.authors
68
+ "AUTHOR(S):\n 0day Inc. <support@0dayinc.com>\n"
69
+ end
70
+
71
+ public_class_method def self.help
72
+ puts "USAGE:
73
+ # List host binaries this module expects to be installed.
74
+ #{self}.required_bins
75
+
76
+ # Run start and return its result
77
+ #{self}.start(
78
+ command: 'required - command value consumed by #start (defaults to opts[:cmd])',
79
+ cmd: 'required - command string to run',
80
+ session_id: 'optional - session id value consumed by #start'
81
+ )
82
+
83
+ # Run status and return its result
84
+ #{self}.status
85
+
86
+ # Run tail and return its result
87
+ #{self}.tail(
88
+ lines: 'optional - lines value consumed by #tail'
89
+ )
90
+
91
+ # Run stop and return its result
92
+ #{self}.stop
93
+
94
+ # Print the AUTHOR(S) string for this module.
95
+ #{self}.authors
96
+ "
97
+ constants.sort
98
+ end
99
+
100
+ private_class_method def self.load_job(opts = {})
101
+ id = opts[:id].to_s
102
+ path = File.join(JOBS_DIR, "#{id}.json")
103
+ raise "ERROR: unknown job #{id}" unless File.file?(path)
104
+
105
+ JSON.parse(File.read(path), symbolize_names: true)
106
+ end
107
+ end
108
+ end
109
+ end
@@ -33,13 +33,17 @@ module PWN
33
33
  # Display Usage for this Module
34
34
 
35
35
  public_class_method def self.help
36
- puts %{USAGE:
37
- json_path_arr = #{self}.search_key(
38
- json_data_struct: "required JSON data structure",
39
- key: "required key to find in JSON data structure. returns key values"
36
+ puts "USAGE:
37
+ # Run search key and return its result
38
+ #{self}.search_key(
39
+ json_data_struct: 'required - required JSON data structure',
40
+ key: 'required - required key to find in JSON data structure. returns key values'
40
41
  )
42
+
43
+ # Print the AUTHOR(S) string for this module.
41
44
  #{self}.authors
42
- }
45
+ "
46
+ constants.sort
43
47
  end
44
48
  end
45
49
  end
@@ -751,23 +751,123 @@ module PWN
751
751
 
752
752
  public_class_method def self.help
753
753
  puts "USAGE:
754
- logger = #{self}.append(
755
- level: 'required - log verbosity :debug|:error|:fatal|:info|:learning|:unknown|:warn',
756
- msg: 'required - message to log',
757
- which_self: 'required - pass in self object from module calling #{self}'
754
+ # Run append and return its result
755
+ #{self}.append(
756
+ level: 'required - level value consumed by #append',
757
+ msg: 'optional - msg value consumed by #append',
758
+ which_self: 'optional - which self value consumed by #append'
758
759
  )
759
760
 
760
- path = #{self}.start_debug(
761
- tee: $stdout,
762
- session_id: 'optional - pwn-ai session id'
761
+ # Run debug enabled and return its result
762
+ #{self}.debug_enabled?
763
+
764
+ # Run debug log path and return its result
765
+ #{self}.debug_log_path
766
+
767
+ # Open a debug session. Request traces go to
768
+ #{self}.start_debug(
769
+ trace: 'optional - trace value consumed by #start_debug',
770
+ path: 'required - filesystem path to read or write',
771
+ tee: 'optional - tee value consumed by #start_debug',
772
+ session_id: 'optional - session id value consumed by #start_debug',
773
+ step_io: 'optional - step io value consumed by #start_debug',
774
+ prefixes: 'optional - prefixes value consumed by #start_debug'
775
+ )
776
+
777
+ # Run trace enabled and return its result
778
+ #{self}.trace_enabled?
779
+
780
+ # Run next request log and return its result
781
+ #{self}.next_request_log!(
782
+ force: 'optional - force value consumed by #next_request_log!',
783
+ session_id: 'optional - session id value consumed by #next_request_log!'
784
+ )
785
+
786
+ # Run finish request log and return its result
787
+ #{self}.finish_request_log!(
788
+ force: 'optional - force value consumed by #finish_request_log!',
789
+ iter: 'optional - iter value consumed by #finish_request_log!',
790
+ tools_called: 'optional - tools called value consumed by #finish_request_log!',
791
+ engine_s: 'optional - engine s value consumed by #finish_request_log!',
792
+ final_chars: 'optional - final chars value consumed by #finish_request_log!',
793
+ nested: 'optional - nested value consumed by #finish_request_log!'
794
+ )
795
+
796
+ # Run stop debug and return its result
797
+ #{self}.stop_debug(
798
+ reason: 'required - reason value consumed by #stop_debug'
763
799
  )
764
- #{self}.next_request_log!(session_id: 'optional')
765
- #{self}.progress(msg: 'stage', which_self: self)
766
- #{self}.finish_request_log!(iter: 1, tools_called: 0, engine_s: 0.2, final_chars: 12)
767
- #{self}.stop_debug
768
- # start_debug(trace: true) enables TracePoint + ENTER after each Loop step
769
- # (toggle-trace). Stored on Pry.config.pwn_ai_trace, not Env.
800
+
801
+ # Run capture stderr and return its result
802
+ #{self}.capture_stderr!(
803
+ text: 'required - text value consumed by #capture_stderr!'
804
+ )
805
+
806
+ # Spinner frames stay on the TTY; never persist them in the RN log
807
+ #{self}.spinner_frame?(
808
+ text: 'optional - text value consumed by #spinner_frame?'
809
+ )
810
+
811
+ # Run raw stderr and return its result
812
+ #{self}.raw_stderr
813
+
814
+ # Run quiet tui and return its result
815
+ #{self}.quiet_tui!(
816
+ skip: 'optional - skip value consumed by #quiet_tui!'
817
+ )
818
+
819
+ # Run loud tui and return its result
820
+ #{self}.loud_tui!(
821
+ skip: 'optional - skip value consumed by #loud_tui!'
822
+ )
823
+
824
+ # One progress line to the debug file and the TUI tee (same payload)
825
+ #{self}.progress(
826
+ msg: 'optional - msg value consumed by #progress',
827
+ which_self: 'optional - which self value consumed by #progress (defaults to self)',
828
+ keep_newlines: 'optional - keep newlines value consumed by #progress',
829
+ cap: 'optional - cap value consumed by #progress',
830
+ tee: 'optional - tee value consumed by #progress'
831
+ )
832
+
833
+ # Run note interrupt and return its result
834
+ #{self}.note_interrupt!(
835
+ where: 'required - where value consumed by #note_interrupt!',
836
+ which_self: 'optional - which self value consumed by #note_interrupt! (defaults to self)'
837
+ )
838
+
839
+ # Run note exception and return its result
840
+ #{self}.note_exception!(
841
+ error: 'optional - error value consumed by #note_exception!',
842
+ where: 'required - where value consumed by #note_exception!',
843
+ which_self: 'optional - which self value consumed by #note_exception! (defaults to self)'
844
+ )
845
+
846
+ # Clone operator-visible TUI rows into the open RN request log (no ANSI)
847
+ #{self}.mirror_tui!(
848
+ msg: 'optional - msg value consumed by #mirror_tui!'
849
+ )
850
+
851
+ # Run start trace and return its result
852
+ #{self}.start_trace!(
853
+ prefixes: 'optional - prefixes value consumed by #start_trace!'
854
+ )
855
+
856
+ # Run stop trace and return its result
857
+ #{self}.stop_trace!(
858
+ skip: 'optional - skip value consumed by #stop_trace!'
859
+ )
860
+
861
+ # Run wait trace step and return its result
862
+ #{self}.wait_trace_step!(
863
+ nested: 'optional - nested value consumed by #wait_trace_step!',
864
+ label: 'required - label value consumed by #wait_trace_step!'
865
+ )
866
+
867
+ # Print the AUTHOR(S) string for this module.
868
+ #{self}.authors
770
869
  "
870
+ constants.sort
771
871
  end
772
872
  end
773
873
  end
@@ -242,102 +242,110 @@ module PWN
242
242
 
243
243
  public_class_method def self.help
244
244
  puts "USAGE:
245
+ # attachment_name1.doc: attachment file path 1,
245
246
  #{self}.office365(
246
- from: 'required',
247
- to: 'required',
248
- cc: 'optional',
249
- bcc: 'optional',
250
- reply_to: 'optional',
251
- subject: 'optional',
252
- html_body: 'optional',
253
- txt_body: 'optional alternative to :html_body',
254
- attachments_hash: {
255
- 'attachment_name1.doc': 'attachment file path 1',
256
- 'attachment_name2.xls': 'attachment file path 2'
257
- },
258
- username: 'required domain\\username',
259
- password: 'optional (but will be prompted if not submitted)',
260
- debug: true|false
247
+ from: 'required - sender account or address to bind as operator',
248
+ to: 'required - to value consumed by #office365',
249
+ cc: 'optional - cc value consumed by #office365',
250
+ bcc: 'optional - bcc value consumed by #office365',
251
+ reply_to: 'optional - reply to value consumed by #office365',
252
+ subject: 'optional - subject value consumed by #office365',
253
+ html_body: 'optional - html body value consumed by #office365',
254
+ txt_body: 'optional - optional alternative to :html_body',
255
+ attachments_hash: 'optional - attachments hash value consumed by #office365',
256
+ username: 'required - required username',
257
+ password: 'optional - optional (but will be prompted if not submitted)',
258
+ debug: 'optional - debug value consumed by #office365',
259
+ address: 'optional - address value consumed by #office365',
260
+ port: 'optional - TCP/UDP port number',
261
+ tls_auto: 'optional - tls auto value consumed by #office365',
262
+ authentication: 'optional - authentication value consumed by #office365'
261
263
  )
262
264
 
265
+ # attachment_name1.doc: attachment file path 1,
263
266
  #{self}.gmail(
264
- from: 'required',
265
- to: 'required',
266
- cc: 'optional',
267
- bcc: 'optional',
268
- reply_to: 'optional',
269
- subject: 'optional',
270
- html_body: 'optional',
271
- txt_body: 'optional alternative to :html_body',
272
- attachments_hash: {
273
- 'attachment_name1.doc': 'attachment file path 1',
274
- 'attachment_name2.xls': 'attachment file path 2'
275
- },
276
- username: 'required',
277
- password: 'optional (but will be prompted if not submitted)'
278
- debug: true|false
267
+ from: 'required - sender account or address to bind as operator',
268
+ to: 'required - to value consumed by #gmail',
269
+ cc: 'optional - cc value consumed by #gmail',
270
+ bcc: 'optional - bcc value consumed by #gmail',
271
+ reply_to: 'optional - reply to value consumed by #gmail',
272
+ subject: 'optional - subject value consumed by #gmail',
273
+ html_body: 'optional - html body value consumed by #gmail',
274
+ txt_body: 'optional - optional alternative to :html_body',
275
+ attachments_hash: 'optional - attachments hash value consumed by #gmail',
276
+ username: 'required - username value consumed by #gmail',
277
+ password: 'optional - optional (but will be prompted if not submitted)',
278
+ debug: 'optional - debug value consumed by #gmail',
279
+ address: 'optional - address value consumed by #gmail',
280
+ port: 'optional - TCP/UDP port number',
281
+ tls_auto: 'optional - tls auto value consumed by #gmail',
282
+ authentication: 'optional - authentication value consumed by #gmail'
279
283
  )
280
284
 
285
+ # attachment_name1.doc: attachment file path 1,
281
286
  #{self}.hotmail_n_live(
282
- from: 'required',
283
- to: 'required',
284
- cc: 'optional',
285
- bcc: 'optional',
286
- reply_to: 'optional',
287
- subject: 'optional',
288
- html_body: 'optional',
289
- txt_body: 'optional alternative to :html_body',
290
- attachments_hash: {
291
- 'attachment_name1.doc': 'attachment file path 1',
292
- 'attachment_name2.xls': 'attachment file path 2'
293
- },
294
- username: 'required',
295
- password: 'optional (but will be prompted if not submitted)'
296
- debug: true|false
287
+ from: 'required - sender account or address to bind as operator',
288
+ to: 'required - to value consumed by #hotmail_n_live',
289
+ cc: 'optional - cc value consumed by #hotmail_n_live',
290
+ bcc: 'optional - bcc value consumed by #hotmail_n_live',
291
+ reply_to: 'optional - reply to value consumed by #hotmail_n_live',
292
+ subject: 'optional - subject value consumed by #hotmail_n_live',
293
+ html_body: 'optional - html body value consumed by #hotmail_n_live',
294
+ txt_body: 'optional - optional alternative to :html_body',
295
+ attachments_hash: 'optional - attachments hash value consumed by #hotmail_n_live',
296
+ username: 'required - username value consumed by #hotmail_n_live',
297
+ password: 'optional - optional (but will be prompted if not submitted)',
298
+ debug: 'optional - debug value consumed by #hotmail_n_live',
299
+ address: 'optional - address value consumed by #hotmail_n_live',
300
+ port: 'optional - TCP/UDP port number',
301
+ tls_auto: 'optional - tls auto value consumed by #hotmail_n_live',
302
+ authentication: 'optional - authentication value consumed by #hotmail_n_live'
297
303
  )
298
304
 
305
+ # attachment_name1.doc: attachment file path 1,
299
306
  #{self}.yahoo(
300
- from: 'required',
301
- to: 'required',
302
- cc: 'optional',
303
- bcc: 'optional',
304
- reply_to: 'optional',
305
- subject: 'optional',
306
- html_body: 'optional',
307
- txt_body: 'optional alternative to :html_body',
308
- attachments_hash: {
309
- 'attachment_name1.doc': 'attachment file path 1',
310
- 'attachment_name2.xls': 'attachment file path 2'
311
- },
312
- username: 'required',
313
- password: 'optional (but will be prompted if not submitted)'
314
- debug: true|false
307
+ from: 'required - sender account or address to bind as operator',
308
+ to: 'required - to value consumed by #yahoo',
309
+ cc: 'optional - cc value consumed by #yahoo',
310
+ bcc: 'optional - bcc value consumed by #yahoo',
311
+ reply_to: 'optional - reply to value consumed by #yahoo',
312
+ subject: 'optional - subject value consumed by #yahoo',
313
+ html_body: 'optional - html body value consumed by #yahoo',
314
+ txt_body: 'optional - optional alternative to :html_body',
315
+ attachments_hash: 'optional - attachments hash value consumed by #yahoo',
316
+ username: 'required - username value consumed by #yahoo',
317
+ password: 'optional - optional (but will be prompted if not submitted)',
318
+ debug: 'optional - debug value consumed by #yahoo',
319
+ address: 'optional - address value consumed by #yahoo',
320
+ port: 'optional - TCP/UDP port number',
321
+ tls_auto: 'optional - tls auto value consumed by #yahoo',
322
+ authentication: 'optional - authentication value consumed by #yahoo'
315
323
  )
316
324
 
325
+ # attachment_name1.doc: attachment file path 1,
317
326
  #{self}.manual(
318
- from: 'required',
319
- to: 'required',
320
- cc: 'optional',
321
- bcc: 'optional',
322
- reply_to: 'optional',
323
- subject: 'optional',
324
- html_body: 'optional',
325
- txt_body: 'optional alternative to :html_body',
326
- attachments_hash: {
327
- 'attachment_name1.doc': 'attachment file path 1',
328
- 'attachment_name2.xls': 'attachment file path 2'
329
- },
330
- address: 'smtp server ip or domain',
331
- port: 'smtp port',
332
- tls_auto: true|false,
333
- authentication: 'optional defaults to :plain - available :login, :plain, or :cram_md5',
334
- username: 'optional',
335
- password: 'optional',
336
- debug: true|false
327
+ from: 'required - sender account or address to bind as operator',
328
+ to: 'required - to value consumed by #manual',
329
+ cc: 'optional - cc value consumed by #manual',
330
+ bcc: 'optional - bcc value consumed by #manual',
331
+ reply_to: 'optional - reply to value consumed by #manual',
332
+ subject: 'optional - subject value consumed by #manual',
333
+ html_body: 'optional - html body value consumed by #manual',
334
+ txt_body: 'optional - optional alternative to :html_body',
335
+ attachments_hash: 'optional - attachments hash value consumed by #manual',
336
+ address: 'optional - smtp server ip or domain',
337
+ port: 'optional - smtp port',
338
+ tls_auto: 'optional - tls auto value consumed by #manual',
339
+ username: 'optional - username value consumed by #manual',
340
+ password: 'optional - password value consumed by #manual',
341
+ debug: 'optional - debug value consumed by #manual',
342
+ authentication: 'optional - authentication value consumed by #manual'
337
343
  )
338
344
 
345
+ # Print the AUTHOR(S) string for this module.
339
346
  #{self}.authors
340
347
  "
348
+ constants.sort
341
349
  end
342
350
  end
343
351
  end
@@ -130,21 +130,26 @@ module PWN
130
130
 
131
131
  public_class_method def self.help
132
132
  puts "USAGE:
133
- console_obj = #{self}.connect(
134
- yaml_conf: 'optional - path to userland yaml (defaults to $PWN_ROOT/etc/userland/$PWN_PROVIDER/metasploit/vagrant.yaml)'
133
+ # Run connect and return its result
134
+ #{self}.connect(
135
+ yaml_conf: 'optional - path to userland yaml (defaults to /pwn/etc/userland/PWN_PROVIDEDR/metasploit/vagrant.yaml)'
135
136
  )
136
137
 
137
- console_obj = #{self}.console_exec(
138
- console_obj: 'required - msfrpcd_conn object returned from #connect method',
138
+ # Run console exec and return its result
139
+ #{self}.console_exec(
140
+ console_obj: 'required - console_obj object returned from #connect method',
139
141
  cmd: 'required - msfconsole command string or array of strings'
140
142
  )
141
143
 
142
- console_obj = #{self}.disconnect(
143
- console_obj: 'required - msfrpcd_conn object returned from #connect method'
144
+ # Run disconnect and return its result
145
+ #{self}.disconnect(
146
+ console_obj: 'required - console_obj returned from #console_exec method to terminate'
144
147
  )
145
148
 
149
+ # Print the AUTHOR(S) string for this module.
146
150
  #{self}.authors
147
151
  "
152
+ constants.sort
148
153
  end
149
154
  end
150
155
  end
@@ -172,10 +172,13 @@ module PWN
172
172
 
173
173
  public_class_method def self.help
174
174
  puts "USAGE:
175
+ # Run pry and return its result
175
176
  #{self}.pry
176
177
 
178
+ # Print the AUTHOR(S) string for this module.
177
179
  #{self}.authors
178
180
  "
181
+ constants.sort
179
182
  end
180
183
  end
181
184
  end
@@ -1193,64 +1193,78 @@ module PWN
1193
1193
 
1194
1194
  public_class_method def self.help
1195
1195
  puts "USAGE:
1196
- msr206_obj = #{self}.connect(
1197
- block_dev: 'optional serial block device path (defaults to /dev/ttyUSB0)',
1198
- baud: 'optional (defaults to 19200)',
1199
- data_bits: 'optional (defaults to 8)',
1200
- stop_bits: 'optional (defaults to 1)',
1201
- parity: 'optional - :even||:odd|:none (defaults to :none)',
1202
- flow_control: 'optional - :none||:hard||:soft (defaults to :soft)'
1196
+ # Run connect and return its result
1197
+ #{self}.connect(
1198
+ block_dev: 'optional - serial block device path (defaults to /dev/ttyUSB0)',
1199
+ baud: 'optional - (defaults to 19200)',
1200
+ data_bits: 'optional - (defaults to 8)',
1201
+ stop_bits: 'optional - (defaults to 1)',
1202
+ parity: 'optional - :even|:mark|:odd|:space|:none (defaults to :none),',
1203
+ flow_control: 'optional - :none|:hard|:soft (defaults to :soft)'
1203
1204
  )
1204
1205
 
1206
+ # Run list cmds and return its result
1207
+ #{self}.list_cmds
1208
+
1209
+ # Run set protocol and return its result
1205
1210
  #{self}.set_protocol(
1206
1211
  msr206_obj: 'required - msr206_obj returned from #connect method',
1207
1212
  protocol: 'optional - :usi0 or :usi1 (defaults to :usi0)'
1208
1213
  )
1209
1214
 
1210
- cmds = #{self}.list_cmds
1211
-
1212
- parsed_cmd_resp_arr = #{self}.exec(
1213
- msr206_obj: 'required msr206_obj returned from #connect method',
1215
+ # Run exec and return its result
1216
+ #{self}.exec(
1217
+ msr206_obj: 'required - msr206_obj returned from #connect method',
1214
1218
  cmd: 'required - cmd returned from #list_cmds method',
1215
- params: 'optional - parameters for specific command'
1219
+ params: 'optional - parameters for specific command returned from #list_params method'
1216
1220
  )
1217
1221
 
1218
- track_data = #{self}.read_card(
1219
- msr206_obj: 'required msr206_obj returned from #connect method'
1222
+ # Run read card and return its result
1223
+ #{self}.read_card(
1224
+ msr206_obj: 'required - msr206_obj returned from #connect method'
1220
1225
  )
1221
1226
 
1222
- track_data = #{self}.backup_card(
1223
- msr206_obj: 'required msr206_obj returned from #connect method'
1227
+ # Run backup card and return its result
1228
+ #{self}.backup_card(
1229
+ msr206_obj: 'required - msr206_obj returned from #connect method'
1224
1230
  )
1225
1231
 
1226
- track_data = #{self}.write_card(
1227
- msr206_obj: 'required msr206_obj returned from #connect method',
1232
+ # Run write card and return its result
1233
+ #{self}.write_card(
1234
+ msr206_obj: 'required - msr206_obj returned from #connect method',
1228
1235
  encoding: 'required - :iso || :iso_alt || :raw',
1229
- track_data: 'required - track data to write'
1236
+ track_data: 'required - track data to write (see #backup_card for structure)'
1230
1237
  )
1231
1238
 
1232
- track_data = #{self}.clone_card(
1233
- msr206_obj: 'required msr206_obj returned from #connect method'
1239
+ # Run clone card and return its result
1240
+ #{self}.clone_card(
1241
+ msr206_obj: 'required - msr206_obj returned from #connect method'
1234
1242
  )
1235
1243
 
1236
- track_data = #{self}.load_card_from_file(
1237
- msr206_obj: 'required msr206_obj returned from #connect method'
1244
+ # Run load card from file and return its result
1245
+ #{self}.load_card_from_file(
1246
+ msr206_obj: 'required - msr206_obj returned from #connect method'
1238
1247
  )
1239
1248
 
1240
- track_data = #{self}.update_card(
1241
- msr206_obj: 'required msr206_obj returned from #connect method'
1249
+ # Run update card and return its result
1250
+ #{self}.update_card(
1251
+ msr206_obj: 'required - msr206_obj returned from #connect method'
1242
1252
  )
1243
1253
 
1244
- config = #{self}.get_config(
1245
- msr206_obj: 'required msr206_obj returned from #connect method'
1254
+ # Run get config and return its result
1255
+ #{self}.get_config(
1256
+ msr206_obj: 'required - msr206_obj returned from #connect method'
1246
1257
  )
1247
1258
 
1259
+ # Run disconnect and return its result
1248
1260
  #{self}.disconnect(
1249
- msr206_obj: 'required msr206_obj returned from #connect method'
1261
+ msr206_obj: 'required - msr206_obj returned from #connect method'
1250
1262
  )
1251
1263
 
1264
+ # Print the AUTHOR(S) string for this module.
1252
1265
  #{self}.authors
1253
1266
  "
1267
+ constants.sort
1254
1268
  end
1255
1269
  end
1256
1270
  end