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
@@ -1704,6 +1704,7 @@ module PWN
1704
1704
  uri: json_uri
1705
1705
  )
1706
1706
 
1707
+ # Run help and return its result
1707
1708
  puts "Skipping #{json_uri} - not in scope. Check out #{self}.help >> #add_to_scope method" unless uri_in_scope
1708
1709
  next unless uri_in_scope
1709
1710
 
@@ -2066,188 +2067,217 @@ module PWN
2066
2067
 
2067
2068
  public_class_method def self.help
2068
2069
  puts "USAGE:
2069
- burp_obj1 = #{self}.start(
2070
+ # Run start and return its result
2071
+ #{self}.start(
2070
2072
  burp_jar_path: 'optional - path of burp suite pro jar file (defaults to /opt/burpsuite/burpsuite_pro.jar)',
2071
- headless: 'optional - run headless if set to true',
2072
- browser_type: 'optional - defaults to :firefox. See PWN::Plugins::TransparentBrowser.help for a list of types'
2073
+ headless: 'optional - run burp headless if set to true (defaults to false)',
2074
+ browser_type: 'optional - defaults to :firefox. See PWN::Plugins::TransparentBrowser.help for a list of types',
2075
+ burp_ip: 'optional - IP address for the Burp proxy (defaults to 127.0.0.1)',
2076
+ burp_port: 'optional - port for the Burp proxy (defaults to a random unused port)',
2077
+ pwn_burp_ip: 'optional - IP address for the PWN Burp API (defaults to 127.0.0.1)',
2078
+ pwn_burp_port: 'optional - port for the PWN Burp API (defaults to a random unused port)'
2073
2079
  )
2074
2080
 
2075
- uri_in_scope = #{self}.in_scope(
2081
+ # Run in scope and return its result
2082
+ #{self}.in_scope(
2076
2083
  burp_obj: 'required - burp_obj returned by #start method',
2077
2084
  uri: 'required - URI to determine if in scope'
2078
2085
  )
2079
2086
 
2080
- json_in_scope = #{self}.add_to_scope(
2087
+ # Run add to scope and return its result
2088
+ #{self}.add_to_scope(
2081
2089
  burp_obj: 'required - burp_obj returned by #start method',
2082
2090
  target_url: 'required - target url to add to scope'
2083
2091
  )
2084
2092
 
2085
- json_spider = #{self}.spider(
2093
+ # Run spider and return its result
2094
+ #{self}.spider(
2086
2095
  burp_obj: 'required - burp_obj returned by #start method',
2087
- target_url: 'required - target url to spider in scope'
2096
+ target_url: 'required - target url to add to crawl / spider'
2088
2097
  )
2089
2098
 
2099
+ # Run enable proxy and return its result
2090
2100
  #{self}.enable_proxy(
2091
2101
  burp_obj: 'required - burp_obj returned by #start method'
2092
2102
  )
2093
2103
 
2104
+ # Run disable proxy and return its result
2094
2105
  #{self}.disable_proxy(
2095
2106
  burp_obj: 'required - burp_obj returned by #start method'
2096
2107
  )
2097
2108
 
2109
+ # Run get proxy listeners and return its result
2098
2110
  #{self}.get_proxy_listeners(
2099
2111
  burp_obj: 'required - burp_obj returned by #start method'
2100
2112
  )
2101
2113
 
2102
- json_proxy_listener = #{self}.add_proxy_listener(
2114
+ # Run add proxy listener and return its result
2115
+ #{self}.add_proxy_listener(
2103
2116
  burp_obj: 'required - burp_obj returned by #start method',
2104
- bindAddress: 'required - bind address for the proxy listener (e.g., \"127.0.0.1\")',
2105
2117
  port: 'required - port for the proxy listener (e.g., 8081)',
2106
- enabled: 'optional - enable the listener (defaults to true)'
2118
+ enabled: 'optional - enable the listener (defaults to true)',
2119
+ bindAddress: 'required - bindAddress value consumed by #add_proxy_listener'
2107
2120
  )
2108
2121
 
2109
- json_proxy_listener = #{self}.update_proxy_listener(
2122
+ # Run update proxy listener and return its result
2123
+ #{self}.update_proxy_listener(
2110
2124
  burp_obj: 'required - burp_obj returned by #start method',
2111
2125
  id: 'optional - ID of the proxy listener (defaults to 0)',
2112
- bindAddress: 'optional - bind address for the proxy listener (defaults to value of existing listener)',
2113
2126
  port: 'optional - port for the proxy listener (defaults to value of existing listener)',
2114
- enabled: 'optional - enable the listener (defaults to value of existing listener)'
2127
+ enabled: 'optional - enable or disable the listener (defaults to value of existing listener)',
2128
+ bindAddress: 'optional - bindAddress value consumed by #update_proxy_listener'
2115
2129
  )
2116
2130
 
2131
+ # Run delete proxy listener and return its result
2117
2132
  #{self}.delete_proxy_listener(
2118
2133
  burp_obj: 'required - burp_obj returned by #start method',
2119
2134
  id: 'optional - ID of the proxy listener (defaults to 0)'
2120
2135
  )
2121
2136
 
2122
- json_proxy_history = #{self}.get_proxy_history(
2137
+ # Run get proxy history and return its result
2138
+ #{self}.get_proxy_history(
2123
2139
  burp_obj: 'required - burp_obj returned by #start method',
2124
- limit: 'optional - integer to limit number of proxy history entries returned (default: 200)',
2125
- offset: 'optional - integer to offset proxy history results (default: 0)',
2126
- uri: 'optional - URI to filter proxy history results (default: nil)',
2127
- highlight: 'optional - highlight color to filter proxy history results (default: \"NONE\")',
2128
- keyword: 'optional - keyword to filter proxy history results (default: nil)',
2140
+ limit: 'optional - number of proxy history entries to return (default: 200)',
2141
+ offset: 'optional - offset for pagination of proxy history entries (default: 0)',
2142
+ uri: 'optional - filter proxy history entries by URI (default: nil)',
2143
+ highlight: 'optional - highlight color to filter proxy history results (default: NONE)',
2144
+ keyword: 'optional - keyword to filter proxy history entries (default: nil)',
2129
2145
  return_as: 'optional - :base64 or :har (defaults to :base64)'
2130
2146
  )
2131
2147
 
2132
- json_proxy_history = #{self}.update_proxy_history(
2148
+ # Run update proxy history and return its result
2149
+ #{self}.update_proxy_history(
2133
2150
  burp_obj: 'required - burp_obj returned by #start method',
2134
- entry: 'required - proxy history entry hash to update'
2151
+ entry: 'required - hash of the proxy history entry to update'
2135
2152
  )
2136
2153
 
2137
- json_proxy_history = #{self}.get_websocket_history(
2154
+ # Run get websocket history and return its result
2155
+ #{self}.get_websocket_history(
2138
2156
  burp_obj: 'required - burp_obj returned by #start method',
2139
- limit: 'optional - integer to limit number of websocket history entries returned (default: 200)',
2140
- offset: 'optional - integer to offset websocket history results (default: 0)',
2141
- highlight: 'optional - highlight color to filter proxy history results (default: \"NONE\")',
2142
- keyword: 'optional - keyword to filter websocket history results (default: nil)'
2157
+ limit: 'optional - number of websocket history entries to return (default: 200)',
2158
+ offset: 'optional - offset for pagination of websocket history entries (default: 0)',
2159
+ highlight: 'optional - highlight color to filter websocket history results (default: NONE)',
2160
+ keyword: 'optional - keyword to filter websocket history entries (default: nil)'
2143
2161
  )
2144
2162
 
2145
- json_proxy_history = #{self}.update_websocket_history(
2163
+ # Run update websocket history and return its result
2164
+ #{self}.update_websocket_history(
2146
2165
  burp_obj: 'required - burp_obj returned by #start method',
2147
- entry: 'required - websocket history entry hash to update'
2166
+ entry: 'required - hash of the websocket history entry to update'
2148
2167
  )
2149
2168
 
2150
- json_sitemap = #{self}.get_sitemap(
2169
+ # Run get sitemap and return its result
2170
+ #{self}.get_sitemap(
2151
2171
  burp_obj: 'required - burp_obj returned by #start method',
2152
- limit: 'optional - integer to limit number of sitemap entries returned (default: 200)',
2153
- offset: 'optional - integer to offset sitemap results (default: 0)',
2154
- uri: 'optional - URI to filter sitemap results (default: nil)',
2155
- highlight: 'optional - highlight color to filter proxy history results (default: \"NONE\")',
2156
- keyword: 'optional - keyword to filter sitemap results (default: nil)',
2172
+ limit: 'optional - number of sitemap entries to return (default: 200)',
2173
+ offset: 'optional - offset for pagination of sitemap entries (default: 0)',
2174
+ uri: 'optional - URI to filter sitemap entries (default: nil)',
2175
+ highlight: 'optional - highlight color to filter proxy history results (default: NONE)',
2176
+ keyword: 'optional - keyword to filter sitemap entries (default: nil)',
2157
2177
  return_as: 'optional - :base64 or :har (defaults to :base64)'
2158
2178
  )
2159
2179
 
2160
- json_sitemap = #{self}.add_to_sitemap(
2180
+ # Run add to sitemap and return its result
2181
+ #{self}.add_to_sitemap(
2161
2182
  burp_obj: 'required - burp_obj returned by #start method',
2162
2183
  sitemap: 'required - sitemap hash to add',
2163
- debug: 'optional - boolean to enable sitemap debugging (default: false)'
2184
+ debug: 'optional - boolean to enable sitemap debugging (default: false)',
2185
+ request: 'optional - base64_encoded_request_string',
2186
+ response: 'optional - base64_encoded_response_string',
2187
+ highlight: 'optional - NONE||RED||ORANGE||YELLOW||GREEN||CYAN||BLUE||PINK||MAGENTA||GRAY',
2188
+ comment: 'optional - optional comment for the sitemap entry',
2189
+ http_service: 'optional - http service value consumed by #add_to_sitemap',
2190
+ host: 'optional - hostname or IP address',
2191
+ port: 'optional - TCP/UDP port number',
2192
+ protocol: 'optional - protocol value consumed by #add_to_sitemap'
2164
2193
  )
2165
2194
 
2166
- Example:
2167
- json_sitemap = #{self}.add_to_sitemap(
2195
+ # Run update sitemap and return its result
2196
+ #{self}.update_sitemap(
2168
2197
  burp_obj: 'required - burp_obj returned by #start method',
2169
- sitemap: {
2170
- request: 'base64_encoded_request_string',
2171
- response: 'base64_encoded_response_string',
2172
- highlight: 'NONE'||'RED'||'ORANGE'||'YELLOW'||'GREEN'||'CYAN'||'BLUE'||'PINK'||'MAGENTA'||'GRAY',
2173
- comment: 'optional comment for the sitemap entry',
2174
- http_service: {
2175
- host: 'example.com',
2176
- port: 80,
2177
- protocol: 'http'
2178
- }
2179
- }
2198
+ entry: 'required - hash of the sitemap entry to update'
2180
2199
  )
2181
2200
 
2182
- json_sitemap = #{self}.update_sitemap(
2183
- burp_obj: 'required - burp_obj returned by #start method',
2184
- entry: 'required - sitemap entry hash to update'
2185
- )
2186
-
2187
- json_sitemap = #{self}.import_openapi_to_sitemap(
2201
+ # Run import openapi to sitemap and return its result
2202
+ #{self}.import_openapi_to_sitemap(
2188
2203
  burp_obj: 'required - burp_obj returned by #start method',
2189
2204
  openapi_spec: 'required - path to OpenAPI JSON or YAML specification file',
2190
2205
  additional_http_headers: 'optional - hash of additional HTTP headers to include in requests (default: {})',
2191
- debug: 'optional - boolean to enable debug logging (default: false)',
2192
- highlight: 'optional - highlight color for the sitemap entry (default: \"NONE\")',
2193
- comment: 'optional - comment for the sitemap entry (default: \"\")',
2206
+ highlight: 'optional - highlight color for the sitemap entry (default: NONE)',
2207
+ comment: 'optional - comment for the sitemap entry (default: )',
2208
+ debug: 'optional - boolean to enable debug logging (default: false)'
2194
2209
  )
2195
2210
 
2196
- active_scan_url_arr = #{self}.active_scan(
2211
+ # Run active scan and return its result
2212
+ #{self}.active_scan(
2197
2213
  burp_obj: 'required - burp_obj returned by #start method',
2198
2214
  target_url: 'required - target url to scan in sitemap (should be loaded & authenticated w/ burp_obj[:mitm_browser])',
2199
2215
  exclude_paths: 'optional - array of paths to exclude from active scan (default: [])'
2200
2216
  )
2201
2217
 
2202
- json_scan_issues = #{self}.get_scan_issues(
2218
+ # Run get scan issues and return its result
2219
+ #{self}.get_scan_issues(
2203
2220
  burp_obj: 'required - burp_obj returned by #start method'
2204
- ).to_json
2221
+ )
2205
2222
 
2206
- repeater_id = #{self}.add_repeater_tab(
2223
+ # Run add repeater tab and return its result
2224
+ #{self}.add_repeater_tab(
2207
2225
  burp_obj: 'required - burp_obj returned by #start method',
2208
2226
  name: 'required - name of the repeater tab (max 30 characters)',
2209
2227
  request: 'optional - base64 encoded HTTP request string'
2210
2228
  )
2211
2229
 
2212
- repeater_tabs = #{self}.get_all_repeater_tabs(
2230
+ # Run get all repeater tabs and return its result
2231
+ #{self}.get_all_repeater_tabs(
2213
2232
  burp_obj: 'required - burp_obj returned by #start method'
2214
2233
  )
2215
2234
 
2216
- repeater_tab = #{self}.get_repeater_tab(
2235
+ # Run get repeater tab and return its result
2236
+ #{self}.get_repeater_tab(
2217
2237
  burp_obj: 'required - burp_obj returned by #start method',
2218
2238
  id: 'required - id of the repeater tab to get'
2219
2239
  )
2220
2240
 
2221
- repeater_resp = #{self}.send_repeater_request(
2241
+ # Run send repeater request and return its result
2242
+ #{self}.send_repeater_request(
2222
2243
  burp_obj: 'required - burp_obj returned by #start method',
2223
2244
  id: 'required - id of the repeater tab to send'
2224
2245
  )
2225
2246
 
2226
- repeater_obj = #{self}.update_repeater_tab(
2247
+ # Run update repeater tab and return its result
2248
+ #{self}.update_repeater_tab(
2227
2249
  burp_obj: 'required - burp_obj returned by #start method',
2228
2250
  id: 'required - id of the repeater tab to update',
2229
2251
  name: 'required - name of the repeater tab (max 30 characters)',
2230
2252
  request: 'required - base64 encoded HTTP request string'
2231
2253
  )
2232
2254
 
2233
- repeater_obj = #{self}.delete_repeater_tab(
2255
+ # Run delete repeater tab and return its result
2256
+ #{self}.delete_repeater_tab(
2234
2257
  burp_obj: 'required - burp_obj returned by #start method',
2235
2258
  id: 'required - id of the repeater tab to delete'
2236
2259
  )
2237
2260
 
2261
+ # Run generate scan report and return its result
2238
2262
  #{self}.generate_scan_report(
2239
2263
  burp_obj: 'required - burp_obj returned by #start method',
2240
2264
  target_url: 'required - target_url passed to #active_scan method',
2241
2265
  output_dir: 'required - directory to save the report',
2242
- report_type: 'required - <:html|:xml>'
2266
+ report_type: 'required - report type value consumed by #generate_scan_report'
2243
2267
  )
2244
2268
 
2269
+ # Run update burp jar and return its result
2270
+ #{self}.update_burp_jar
2271
+
2272
+ # Run stop and return its result
2245
2273
  #{self}.stop(
2246
2274
  burp_obj: 'required - burp_obj returned by #start method'
2247
2275
  )
2248
2276
 
2277
+ # Print the AUTHOR(S) string for this module.
2249
2278
  #{self}.authors
2250
2279
  "
2280
+ constants.sort
2251
2281
  end
2252
2282
  end
2253
2283
  end
@@ -118,29 +118,36 @@ module PWN
118
118
 
119
119
  public_class_method def self.help
120
120
  puts "USAGE:
121
+ # Run connect via screen and return its result
121
122
  #{self}.connect_via_screen(
122
- block_dev: 'optional serial block device path (defaults to /dev/ttyUSB0)'
123
+ block_dev: 'optional - serial block device path (defaults to /dev/ttyUSB0)'
123
124
  )
124
125
 
125
- bus_pirate_obj = #{self}.connect(
126
- block_dev: 'optional serial block device path (defaults to /dev/ttyUSB0)',
127
- baud: 'optional (defaults to 9600)',
128
- data_bits: 'optional (defaults to 8)',
129
- stop_bits: 'optional (defaults to 1)',
130
- parity: 'optional - :even||:odd|:none (defaults to :none)'
126
+ # Run connect and return its result
127
+ #{self}.connect(
128
+ block_dev: 'optional - optional serial block device path (defaults to /dev/ttyUSB0)',
129
+ baud: 'optional - optional (defaults to 9600)',
130
+ data_bits: 'optional - optional (defaults to 8)',
131
+ stop_bits: 'optional - optional (defaults to 1)',
132
+ parity: 'optional - optional (defaults to SerialPort::NONE)',
133
+ flow_control: 'optional - optional (defaults to SerialPort::HARD) SerialPort::NONE|SerialPort::SOFT|SerialPort::HARD'
131
134
  )
132
135
 
136
+ # Run init mode and return its result
133
137
  #{self}.init_mode(
134
- bus_pirate_obj: 'required - bus_pirate_obj returned from #connect method'
138
+ bus_pirate_obj: 'required - bus_pirate_obj returned from #connect method',
135
139
  mode: 'required - bus pirate mode to invoke'
136
140
  )
137
141
 
142
+ # Run disconnect and return its result
138
143
  #{self}.disconnect(
139
144
  bus_pirate_obj: 'required - bus_pirate_obj returned from #connect method'
140
145
  )
141
146
 
147
+ # Print the AUTHOR(S) string for this module.
142
148
  #{self}.authors
143
149
  "
150
+ constants.sort
144
151
  end
145
152
  end
146
153
  end
@@ -412,63 +412,93 @@ module PWN
412
412
 
413
413
  public_class_method def self.help
414
414
  puts "USAGE:
415
- char_arr = #{self}.generate_by_range(
415
+ # Run force utf8 and return its result
416
+ #{self}.force_utf8(
417
+ obj: 'required - object to force to UTF-8'
418
+ )
419
+
420
+ # Run generate by range and return its result
421
+ #{self}.generate_by_range(
416
422
  from: 'required - integer to start from',
417
- to: 'required - integer to end char generation'
423
+ to: 'required - integer to end UTF-8 generation'
418
424
  )
419
425
 
426
+ # Run c0 controls latin basic and return its result
420
427
  #{self}.c0_controls_latin_basic
421
428
 
429
+ # Run c1 controls latin supplement and return its result
422
430
  #{self}.c1_controls_latin_supplement
423
431
 
432
+ # Run latin extended a and return its result
424
433
  #{self}.latin_extended_a
425
434
 
435
+ # Run latin extended b and return its result
426
436
  #{self}.latin_extended_b
427
437
 
438
+ # Run spacing modifiers and return its result
428
439
  #{self}.spacing_modifiers
429
440
 
441
+ # Run diacritical marks and return its result
430
442
  #{self}.diacritical_marks
431
443
 
444
+ # Run greek coptic and return its result
432
445
  #{self}.greek_coptic
433
446
 
447
+ # Run cyrillic basic and return its result
434
448
  #{self}.cyrillic_basic
435
449
 
450
+ # Run cyrillic supplement and return its result
436
451
  #{self}.cyrillic_supplement
437
452
 
453
+ # Run punctuation and return its result
438
454
  #{self}.punctuation
439
455
 
456
+ # Run currency symbols and return its result
440
457
  #{self}.currency_symbols
441
458
 
459
+ # Run letterlike symbols and return its result
442
460
  #{self}.letterlike_symbols
443
461
 
462
+ # Run arrows and return its result
444
463
  #{self}.arrows
445
464
 
465
+ # Run math operators and return its result
446
466
  #{self}.math_operators
447
467
 
468
+ # Run box drawings and return its result
448
469
  #{self}.box_drawings
449
470
 
471
+ # Run block elements and return its result
450
472
  #{self}.block_elements
451
473
 
474
+ # Run geometric shapes and return its result
452
475
  #{self}.geometric_shapes
453
476
 
477
+ # Run misc symbols and return its result
454
478
  #{self}.misc_symbols
455
479
 
480
+ # Run dingbats and return its result
456
481
  #{self}.dingbats
457
482
 
483
+ # Run bubble ip and return its result
458
484
  #{self}.bubble_ip(
459
485
  ip: 'required - ip address to transform'
460
486
  )
461
487
 
462
- encoder_arr = #{self}.list_encoders
488
+ # Run list encoders and return its result
489
+ #{self}.list_encoders
463
490
 
491
+ # Run generate encoded files and return its result
464
492
  #{self}.generate_encoded_files(
465
493
  from: 'required - integer to start from',
466
494
  to: 'required - integer to end UTF-8 generation',
467
495
  output_dir: 'required - folder to create files'
468
496
  )
469
497
 
498
+ # Print the AUTHOR(S) string for this module.
470
499
  #{self}.authors
471
500
  "
501
+ constants.sort
472
502
  end
473
503
  end
474
504
  end
@@ -0,0 +1,99 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'fileutils'
4
+ require 'open3'
5
+
6
+ module PWN
7
+ module Plugins
8
+ # hydra/john/hashcat wrappers and ~/.pwn/wordlists convention.
9
+ module CredentialAttack
10
+ WORDLISTS = File.join(Dir.home, '.pwn', 'wordlists')
11
+
12
+ public_class_method def self.required_bins
13
+ []
14
+ end
15
+
16
+ public_class_method def self.wordlist_dir(opts = {})
17
+ FileUtils.mkdir_p(WORDLISTS) if opts[:ensure] != false
18
+ WORDLISTS
19
+ end
20
+
21
+ public_class_method def self.hydra(opts = {})
22
+ PWN::Plugins::Doctor.require_bin!(name: 'hydra')
23
+ target = opts[:target].to_s
24
+ service = (opts[:service] || 'ssh').to_s
25
+ user = opts[:user] || opts[:login]
26
+ wordlist = opts[:wordlist] || File.join(WORDLISTS, 'rockyou.txt')
27
+ extra = Array(opts[:extra])
28
+ cmd = ['hydra', '-l', user.to_s, '-P', wordlist, '-t', (opts[:tasks] || 4).to_s]
29
+ cmd += extra
30
+ cmd += [target, service]
31
+ stdout, stderr, status = Open3.capture3(*cmd)
32
+ { stdout: stdout, stderr: stderr, exit: status.exitstatus }
33
+ end
34
+
35
+ public_class_method def self.john(opts = {})
36
+ PWN::Plugins::Doctor.require_bin!(name: 'john')
37
+ hashfile = opts[:hashfile] || opts[:file]
38
+ raise 'ERROR: hashfile is required' if hashfile.to_s.empty?
39
+
40
+ stdout, stderr, status = Open3.capture3('john', hashfile.to_s)
41
+ { stdout: stdout, stderr: stderr, exit: status.exitstatus }
42
+ end
43
+
44
+ public_class_method def self.hashcat(opts = {})
45
+ PWN::Plugins::Doctor.require_bin!(name: 'hashcat')
46
+ hashfile = opts[:hashfile] || opts[:file]
47
+ mode = (opts[:mode] || 0).to_i
48
+ wordlist = opts[:wordlist] || File.join(WORDLISTS, 'rockyou.txt')
49
+ stdout, stderr, status = Open3.capture3('hashcat', '-m', mode.to_s, hashfile.to_s, wordlist)
50
+ { stdout: stdout, stderr: stderr, exit: status.exitstatus }
51
+ end
52
+
53
+ public_class_method def self.authors
54
+ "AUTHOR(S):\n 0day Inc. <support@0dayinc.com>\n"
55
+ end
56
+
57
+ public_class_method def self.help
58
+ puts "USAGE:
59
+ # List host binaries this module expects to be installed.
60
+ #{self}.required_bins
61
+
62
+ # Run wordlist dir and return its result
63
+ #{self}.wordlist_dir(
64
+ ensure: 'optional - ensure value consumed by #wordlist_dir'
65
+ )
66
+
67
+ # Run hydra and return its result
68
+ #{self}.hydra(
69
+ target: 'optional - hostname, IP, or CIDR to scan',
70
+ service: 'optional - service value consumed by #hydra',
71
+ user: 'optional - user value consumed by #hydra (defaults to opts[:login])',
72
+ login: 'optional - login value consumed by #hydra',
73
+ wordlist: 'optional - wordlist value consumed by #hydra',
74
+ extra: 'optional - Array extra value consumed by #hydra',
75
+ tasks: 'optional - tasks value consumed by #hydra'
76
+ )
77
+
78
+ # Run john and return its result
79
+ #{self}.john(
80
+ hashfile: 'required - hashfile value consumed by #john (defaults to opts[:file])',
81
+ file: 'required - filesystem path'
82
+ )
83
+
84
+ # Run hashcat and return its result
85
+ #{self}.hashcat(
86
+ hashfile: 'optional - hashfile value consumed by #hashcat (defaults to opts[:file])',
87
+ file: 'optional - filesystem path',
88
+ mode: 'optional - mode value consumed by #hashcat',
89
+ wordlist: 'optional - wordlist value consumed by #hashcat'
90
+ )
91
+
92
+ # Print the AUTHOR(S) string for this module.
93
+ #{self}.authors
94
+ "
95
+ constants.sort
96
+ end
97
+ end
98
+ end
99
+ end
@@ -86,19 +86,24 @@ module PWN
86
86
 
87
87
  public_class_method def self.help
88
88
  puts "USAGE:
89
+ # Run list types and return its result
89
90
  #{self}.list_types
90
91
 
92
+ # Run generate and return its result
91
93
  #{self}.generate(
92
- type: 'required - card to generate from #list_types method to generate',
94
+ type: 'optional - card type from #list_types method to generate (defaults to :random)',
93
95
  count: 'optional - number of numbers to generate (defaults to 1)'
94
96
  )
95
97
 
98
+ # Run type and return its result
96
99
  #{self}.type(
97
100
  cc: 'required - e.g. XXXX XXXX XXXX XXXX'
98
101
  )
99
102
 
103
+ # Print the AUTHOR(S) string for this module.
100
104
  #{self}.authors
101
105
  "
106
+ constants.sort
102
107
  end
103
108
  end
104
109
  end
@@ -105,26 +105,32 @@ module PWN
105
105
 
106
106
  public_class_method def self.help
107
107
  puts "USAGE:
108
- ldap_obj = #{self}.connect(
109
- host: 'required host or IP',
110
- port: 'required port',
111
- base: 'required ldap base to search from (e.g. dc=domain,dc=com)',
112
- encryption: 'optional parameter to protect communication in transit, :simple_tls OR :start_tls',
113
- auth_method: 'required ldap auth bind method, :simple, :sasl, OR :gss_spnego'
114
- username: 'required username',
115
- password: 'optional (prompts if left blank)',
108
+ # Run connect and return its result
109
+ #{self}.connect(
110
+ host: 'required - required host or IP',
111
+ port: 'optional - optional port (defaults to 636)',
112
+ base: 'required - required ldap base to search from (e.g. dc=domain,dc=com)',
113
+ encryption: 'optional - optional parameter to protect communication in transit, :simple_tls OR :start_tls',
114
+ auth_method: 'required - required ldap auth bind method, :simple, :sasl, OR :gss_spnego',
115
+ username: 'required - required username (e.g. support@0dayinc.com)',
116
+ password: 'optional - optional (prompts if left blank)'
116
117
  )
117
118
 
118
- employee = #{self}.get_employee_by_username(
119
- ldap_obj: 'required ldap_obj returned from #connect method',
120
- username: 'required username of employee to retrieve from LDAP server'
119
+ # Run get employee by username and return its result
120
+ #{self}.get_employee_by_username(
121
+ ldap_obj: 'required - required ldap_obj returned from #connect method',
122
+ username: 'required - required username of employee to retrieve from LDAP server'
121
123
  )
122
- puts employee[0][:dn]
123
124
 
124
- #{self}.disconnect(:ldap_obj => ldap_obj)
125
+ # Run disconnect and return its result
126
+ #{self}.disconnect(
127
+ ldap_obj: 'optional - ldap obj value consumed by #disconnect'
128
+ )
125
129
 
130
+ # Print the AUTHOR(S) string for this module.
126
131
  #{self}.authors
127
132
  "
133
+ constants.sort
128
134
  end
129
135
  end
130
136
  end
@@ -80,16 +80,22 @@ module PWN
80
80
 
81
81
  public_class_method def self.help
82
82
  puts "USAGE:
83
- mongo_conn = #{self}.connect(
84
- host: 'optional host or IP defaults to 127.0.0.1',
85
- port: 'optional port defaults to 27017',
86
- database: 'optional database name'
83
+ # Run connect and return its result
84
+ #{self}.connect(
85
+ host: 'optional - optional host or IP defaults to 127.0.0.1',
86
+ port: 'optional - optional port defaults to 27017',
87
+ database: 'optional - optional database name'
87
88
  )
88
89
 
89
- #{self}.disconnect(mongo_conn: mongo_conn)
90
+ # Run disconnect and return its result
91
+ #{self}.disconnect(
92
+ mongo_conn: 'optional - mongo conn value consumed by #disconnect'
93
+ )
90
94
 
95
+ # Print the AUTHOR(S) string for this module.
91
96
  #{self}.authors
92
97
  "
98
+ constants.sort
93
99
  end
94
100
  end
95
101
  end