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
@@ -1085,6 +1085,7 @@ module PWN
1085
1085
  # )
1086
1086
 
1087
1087
  public_class_method def self.send(opts = {})
1088
+ PWN::Plugins::Doctor.require_cap_net_raw! if defined?(PWN::Plugins::Doctor)
1088
1089
  pkt = opts[:pkt]
1089
1090
 
1090
1091
  if opts[:iface]
@@ -1205,108 +1206,228 @@ module PWN
1205
1206
 
1206
1207
  public_class_method def self.help
1207
1208
  puts "USAGE:
1208
- pcap = #{self}.open_pcap_file(
1209
+ # Run open pcap file and return its result
1210
+ #{self}.open_pcap_file(
1209
1211
  path: 'required - path to packet capture file'
1210
1212
  )
1211
- pcap[0].public_methods
1212
- pcap.each do |p|
1213
- print \"IP ID: \#{p.ip_id_readable} \"
1214
- print \"IP Sum: \#{p.ip_sum_readable} \"
1215
- print \"SRC IP: \#{p.ip_src_readable} \"
1216
- print \"SRC MAC: (\#{p.eth_src_readable}) \"
1217
- print \"TCP SRC PORT: \#{p.tcp_sport} => \"
1218
- print \"DST IP: \#{p.ip_dst_readable} \"
1219
- print \"DST MAC: (\#{p.eth_dst_readable}) \"
1220
- print \"TCP DST PORT: \#{p.tcp_dport} \"
1221
- print \"ETH PROTO: \#{p.eth_proto_readable} \"
1222
- print \"TCP FLAGS: \#{p.tcp_flags_readable} \"
1223
- print \"TCP ACK: \#{p.tcp_ack_readable} \"
1224
- print \"TCP SEQ: \#{p.tcp_seq_readable} \"
1225
- print \"TCP SUM: \#{p.tcp_sum_readable} \"
1226
- print \"TCP OPTS: \#{p.tcp_opts_readable} \"
1227
- puts \"BODY: \#{p.hexify(p.payload)}\"
1228
- puts \"\\n\\n\\n\"
1229
- end
1230
1213
 
1231
- pkt = #{self}.construct_arp(
1214
+ # Run construct arp and return its result
1215
+ #{self}.construct_arp(
1232
1216
  ip_saddr: 'required - source ip of packet',
1233
1217
  ip_daddr: 'required - destination ip to send packet',
1234
1218
  payload: 'optional - packet payload defaults to empty string',
1235
1219
  ip_id: 'optional - defaults to 0xfeed',
1236
1220
  iface: 'optional - interface to send packet (defaults to eth0)',
1221
+ eth_src: 'optional - eth src value consumed by #construct_arp',
1222
+ eth_dst: 'optional - eth dst value consumed by #construct_arp',
1223
+ eth_proto: 'optional - eth proto value consumed by #construct_arp',
1224
+ arp_hw: 'optional - arp hw value consumed by #construct_arp',
1225
+ arp_proto: 'optional - arp proto value consumed by #construct_arp',
1226
+ arp_hw_len: 'optional - arp hw len value consumed by #construct_arp',
1227
+ arp_proto_len: 'optional - arp proto len value consumed by #construct_arp',
1228
+ arp_opcode: 'optional - arp opcode value consumed by #construct_arp',
1229
+ arp_src_mac: 'optional - arp src mac value consumed by #construct_arp',
1230
+ arp_dst_mac: 'optional - arp dst mac value consumed by #construct_arp'
1237
1231
  )
1238
1232
 
1239
- pkt = #{self}.construct_eth(
1233
+ # Run construct eth and return its result
1234
+ #{self}.construct_eth(
1240
1235
  ip_saddr: 'required - source ip of packet',
1241
1236
  ip_daddr: 'required - destination ip to send packet',
1242
1237
  payload: 'optional - packet payload defaults to empty string',
1243
1238
  ip_id: 'optional - defaults to 0xfeed',
1244
1239
  iface: 'optional - interface to send packet (defaults to eth0)',
1240
+ eth_src: 'optional - eth src value consumed by #construct_eth',
1241
+ eth_dst: 'optional - eth dst value consumed by #construct_eth',
1242
+ eth_proto: 'optional - eth proto value consumed by #construct_eth'
1245
1243
  )
1246
1244
 
1247
- pkt = #{self}.construct_hsrp(
1245
+ # Run construct hsrp and return its result
1246
+ #{self}.construct_hsrp(
1248
1247
  ip_saddr: 'required - source ip of packet',
1249
1248
  ip_daddr: 'required - destination ip to send packet',
1250
1249
  payload: 'optional - packet payload defaults to empty string',
1251
1250
  ip_id: 'optional - defaults to 0xfeed',
1252
1251
  iface: 'optional - interface to send packet (defaults to eth0)',
1252
+ eth_src: 'optional - eth src value consumed by #construct_hsrp',
1253
+ eth_dst: 'optional - eth dst value consumed by #construct_hsrp',
1254
+ eth_proto: 'optional - eth proto value consumed by #construct_hsrp',
1255
+ ip_v: 'optional - ip v value consumed by #construct_hsrp',
1256
+ ip_hl: 'optional - ip hl value consumed by #construct_hsrp',
1257
+ ip_tos: 'optional - ip tos value consumed by #construct_hsrp',
1258
+ ip_len: 'optional - ip len value consumed by #construct_hsrp',
1259
+ ip_frag: 'optional - ip frag value consumed by #construct_hsrp',
1260
+ ip_ttl: 'optional - ip ttl value consumed by #construct_hsrp',
1261
+ ip_proto: 'optional - ip proto value consumed by #construct_hsrp',
1262
+ ip_sum: 'optional - ip sum value consumed by #construct_hsrp',
1263
+ udp_src_port: 'optional - udp src port value consumed by #construct_hsrp',
1264
+ udp_dst_port: 'optional - udp dst port value consumed by #construct_hsrp',
1265
+ udp_len: 'optional - udp len value consumed by #construct_hsrp',
1266
+ udp_sum: 'optional - udp sum value consumed by #construct_hsrp',
1267
+ hsrp_version: 'optional - hsrp version value consumed by #construct_hsrp',
1268
+ hsrp_opcode: 'optional - hsrp opcode value consumed by #construct_hsrp',
1269
+ hsrp_state: 'optional - hsrp state value consumed by #construct_hsrp',
1270
+ hsrp_hellotime: 'optional - hsrp hellotime value consumed by #construct_hsrp',
1271
+ hsrp_holdtime: 'optional - hsrp holdtime value consumed by #construct_hsrp',
1272
+ hsrp_priority: 'optional - hsrp priority value consumed by #construct_hsrp',
1273
+ hsrp_group: 'optional - hsrp group value consumed by #construct_hsrp',
1274
+ hsrp_reserved: 'optional - hsrp reserved value consumed by #construct_hsrp',
1275
+ hsrp_password: 'optional - hsrp password value consumed by #construct_hsrp',
1276
+ hsrp_addr: 'optional - hsrp addr value consumed by #construct_hsrp'
1253
1277
  )
1254
1278
 
1255
- pkt = #{self}.construct_icmp(
1279
+ # Run construct icmp and return its result
1280
+ #{self}.construct_icmp(
1256
1281
  ip_saddr: 'required - source ip of packet',
1257
1282
  ip_daddr: 'required - destination ip to send packet',
1258
- payload: 'optional - packet payload defaults to \"*ping*\"',
1283
+ payload: 'optional - packet payload defaults to *ping*',
1259
1284
  ip_id: 'optional - defaults to 0xfeed',
1260
1285
  iface: 'optional - interface to send packet (defaults to eth0)',
1286
+ eth_src: 'optional - eth src value consumed by #construct_icmp',
1287
+ eth_dst: 'optional - eth dst value consumed by #construct_icmp',
1288
+ eth_proto: 'optional - eth proto value consumed by #construct_icmp',
1289
+ ip_v: 'optional - ip v value consumed by #construct_icmp',
1290
+ ip_hl: 'optional - ip hl value consumed by #construct_icmp',
1291
+ ip_tos: 'optional - ip tos value consumed by #construct_icmp',
1292
+ ip_len: 'optional - ip len value consumed by #construct_icmp',
1293
+ ip_frag: 'optional - ip frag value consumed by #construct_icmp',
1294
+ ip_ttl: 'optional - ip ttl value consumed by #construct_icmp',
1295
+ ip_proto: 'optional - ip proto value consumed by #construct_icmp',
1296
+ ip_sum: 'optional - ip sum value consumed by #construct_icmp',
1297
+ icmp_type: 'optional - icmp type value consumed by #construct_icmp',
1298
+ icmp_code: 'optional - icmp code value consumed by #construct_icmp',
1299
+ icmp_sum: 'optional - icmp sum value consumed by #construct_icmp'
1261
1300
  )
1262
1301
 
1263
- pkt = #{self}.construct_icmpv6(
1302
+ # Run construct icmpv6 and return its result
1303
+ #{self}.construct_icmpv6(
1264
1304
  ip_saddr: 'required - source ip of packet',
1265
1305
  ip_daddr: 'required - destination ip to send packet',
1266
1306
  payload: 'optional - packet payload defaults to empty string',
1267
1307
  ip_id: 'optional - defaults to 0xfeed',
1268
1308
  iface: 'optional - interface to send packet (defaults to eth0)',
1309
+ eth_src: 'optional - eth src value consumed by #construct_icmpv6',
1310
+ eth_dst: 'optional - eth dst value consumed by #construct_icmpv6',
1311
+ eth_proto: 'optional - eth proto value consumed by #construct_icmpv6',
1312
+ ipv6_v: 'optional - ipv6 v value consumed by #construct_icmpv6',
1313
+ ipv6_class: 'optional - ipv6 class value consumed by #construct_icmpv6',
1314
+ ipv6_label: 'optional - ipv6 label value consumed by #construct_icmpv6',
1315
+ ipv6_len: 'optional - ipv6 len value consumed by #construct_icmpv6',
1316
+ ipv6_next: 'optional - ipv6 next value consumed by #construct_icmpv6',
1317
+ ipv6_hop: 'optional - ipv6 hop value consumed by #construct_icmpv6',
1318
+ ipv6_saddr: 'optional - ipv6 saddr value consumed by #construct_icmpv6',
1319
+ ipv6_daddr: 'optional - ipv6 daddr value consumed by #construct_icmpv6',
1320
+ icmpv6_type: 'optional - icmpv6 type value consumed by #construct_icmpv6',
1321
+ icmpv6_code: 'optional - icmpv6 code value consumed by #construct_icmpv6',
1322
+ icmpv6_sum: 'optional - icmpv6 sum value consumed by #construct_icmpv6'
1269
1323
  )
1270
1324
 
1271
- pkt = #{self}.construct_ip(
1325
+ # Run construct ip and return its result
1326
+ #{self}.construct_ip(
1272
1327
  ip_saddr: 'required - source ip of packet',
1273
1328
  ip_daddr: 'required - destination ip to send packet',
1274
1329
  payload: 'optional - packet payload defaults to empty string',
1275
1330
  ip_id: 'optional - defaults to 0xfeed',
1276
1331
  iface: 'optional - interface to send packet (defaults to eth0)',
1332
+ eth_src: 'optional - eth src value consumed by #construct_ip',
1333
+ eth_dst: 'optional - eth dst value consumed by #construct_ip',
1334
+ eth_proto: 'optional - eth proto value consumed by #construct_ip',
1335
+ ip_v: 'optional - ip v value consumed by #construct_ip',
1336
+ ip_hl: 'optional - ip hl value consumed by #construct_ip',
1337
+ ip_tos: 'optional - ip tos value consumed by #construct_ip',
1338
+ ip_len: 'optional - ip len value consumed by #construct_ip',
1339
+ ip_frag: 'optional - ip frag value consumed by #construct_ip',
1340
+ ip_ttl: 'optional - ip ttl value consumed by #construct_ip',
1341
+ ip_proto: 'optional - ip proto value consumed by #construct_ip',
1342
+ ip_sum: 'optional - ip sum value consumed by #construct_ip'
1277
1343
  )
1278
1344
 
1279
- pkt = #{self}.construct_ipv6(
1345
+ # Run construct ipv6 and return its result
1346
+ #{self}.construct_ipv6(
1280
1347
  ip_saddr: 'required - source ip of packet',
1281
1348
  ip_daddr: 'required - destination ip to send packet',
1282
1349
  payload: 'optional - packet payload defaults to empty string',
1283
1350
  ip_id: 'optional - defaults to 0xfeed',
1284
1351
  iface: 'optional - interface to send packet (defaults to eth0)',
1352
+ eth_src: 'optional - eth src value consumed by #construct_ipv6',
1353
+ eth_dst: 'optional - eth dst value consumed by #construct_ipv6',
1354
+ eth_proto: 'optional - eth proto value consumed by #construct_ipv6',
1355
+ ipv6_v: 'optional - ipv6 v value consumed by #construct_ipv6',
1356
+ ipv6_class: 'optional - ipv6 class value consumed by #construct_ipv6',
1357
+ ipv6_label: 'optional - ipv6 label value consumed by #construct_ipv6',
1358
+ ipv6_len: 'optional - ipv6 len value consumed by #construct_ipv6',
1359
+ ipv6_next: 'optional - ipv6 next value consumed by #construct_ipv6',
1360
+ ipv6_hop: 'optional - ipv6 hop value consumed by #construct_ipv6',
1361
+ ipv6_saddr: 'optional - ipv6 saddr value consumed by #construct_ipv6',
1362
+ ipv6_daddr: 'optional - ipv6 daddr value consumed by #construct_ipv6'
1285
1363
  )
1286
1364
 
1287
- pkt = #{self}.construct_tcp(
1365
+ # Run construct tcp and return its result
1366
+ #{self}.construct_tcp(
1288
1367
  ip_saddr: 'required - source ip of packet',
1289
1368
  ip_daddr: 'required - destination ip to send packet',
1290
1369
  payload: 'optional - packet payload defaults to empty string',
1291
1370
  ip_id: 'optional - defaults to 0xfeed',
1292
1371
  iface: 'optional - interface to send packet (defaults to eth0)',
1372
+ eth_src: 'optional - eth src value consumed by #construct_tcp',
1373
+ eth_dst: 'optional - eth dst value consumed by #construct_tcp',
1374
+ eth_proto: 'optional - eth proto value consumed by #construct_tcp',
1375
+ ip_v: 'optional - ip v value consumed by #construct_tcp',
1376
+ ip_hl: 'optional - ip hl value consumed by #construct_tcp',
1377
+ ip_tos: 'optional - ip tos value consumed by #construct_tcp',
1378
+ ip_len: 'optional - ip len value consumed by #construct_tcp',
1379
+ ip_frag: 'optional - ip frag value consumed by #construct_tcp',
1380
+ ip_ttl: 'optional - ip ttl value consumed by #construct_tcp',
1381
+ ip_proto: 'optional - ip proto value consumed by #construct_tcp',
1382
+ ip_sum: 'optional - ip sum value consumed by #construct_tcp',
1383
+ tcp_src_port: 'optional - tcp src port value consumed by #construct_tcp',
1384
+ tcp_dst_port: 'optional - tcp dst port value consumed by #construct_tcp',
1385
+ tcp_seq: 'optional - tcp seq value consumed by #construct_tcp',
1386
+ tcp_ack: 'optional - tcp ack value consumed by #construct_tcp',
1387
+ tcp_hlen: 'optional - tcp hlen value consumed by #construct_tcp',
1388
+ tcp_reserved: 'optional - tcp reserved value consumed by #construct_tcp',
1389
+ tcp_ecn: 'optional - tcp ecn value consumed by #construct_tcp',
1390
+ tcp_flags: 'optional - tcp flags value consumed by #construct_tcp',
1391
+ tcp_win: 'optional - tcp win value consumed by #construct_tcp',
1392
+ tcp_sum: 'optional - tcp sum value consumed by #construct_tcp',
1393
+ tcp_urg: 'optional - tcp urg value consumed by #construct_tcp',
1394
+ tcp_opts: 'optional - tcp opts value consumed by #construct_tcp'
1293
1395
  )
1294
1396
 
1295
- pkt = #{self}.construct_udp(
1397
+ # Run construct udp and return its result
1398
+ #{self}.construct_udp(
1296
1399
  ip_saddr: 'required - source ip of packet',
1297
1400
  ip_daddr: 'required - destination ip to send packet',
1298
1401
  payload: 'optional - packet payload defaults to empty string',
1299
1402
  ip_id: 'optional - defaults to 0xfeed',
1300
1403
  iface: 'optional - interface to send packet (defaults to eth0)',
1404
+ eth_src: 'optional - eth src value consumed by #construct_udp',
1405
+ eth_dst: 'optional - eth dst value consumed by #construct_udp',
1406
+ eth_proto: 'optional - eth proto value consumed by #construct_udp',
1407
+ ip_v: 'optional - ip v value consumed by #construct_udp',
1408
+ ip_hl: 'optional - ip hl value consumed by #construct_udp',
1409
+ ip_tos: 'optional - ip tos value consumed by #construct_udp',
1410
+ ip_len: 'optional - ip len value consumed by #construct_udp',
1411
+ ip_frag: 'optional - ip frag value consumed by #construct_udp',
1412
+ ip_ttl: 'optional - ip ttl value consumed by #construct_udp',
1413
+ ip_proto: 'optional - ip proto value consumed by #construct_udp',
1414
+ ip_sum: 'optional - ip sum value consumed by #construct_udp',
1415
+ udp_src_port: 'optional - udp src port value consumed by #construct_udp',
1416
+ udp_dst_port: 'optional - udp dst port value consumed by #construct_udp',
1417
+ udp_len: 'optional - udp len value consumed by #construct_udp',
1418
+ udp_sum: 'optional - udp sum value consumed by #construct_udp'
1301
1419
  )
1302
1420
 
1421
+ # Run send and return its result
1303
1422
  #{self}.send(
1304
1423
  pkt: 'required - pkt returned from other #construct_<type> methods',
1305
- iface: 'optional - interface to send packet (defaults to eth0)',
1424
+ iface: 'optional - interface to send packet (defaults to eth0)'
1306
1425
  )
1307
1426
 
1427
+ # Print the AUTHOR(S) string for this module.
1308
1428
  #{self}.authors
1309
1429
  "
1430
+ constants.sort
1310
1431
  end
1311
1432
  end
1312
1433
  end
@@ -41,12 +41,15 @@ module PWN
41
41
 
42
42
  public_class_method def self.help
43
43
  puts "USAGE:
44
- pdf_pages_hash = #{self}.read_text(
45
- pdf_path: 'required path to pdf file'
44
+ # Run read text and return its result
45
+ #{self}.read_text(
46
+ pdf_path: 'optional - optional path to dir defaults to .'
46
47
  )
47
48
 
49
+ # Print the AUTHOR(S) string for this module.
48
50
  #{self}.authors
49
51
  "
52
+ constants.sort
50
53
  end
51
54
  end
52
55
  end
@@ -276,9 +276,94 @@ module PWN
276
276
 
277
277
  public_class_method def self.help
278
278
  puts "USAGE:
279
- This module is deprecated. Please Use PWN::Plugins::MailAgent instead.
279
+ # Default options can be set so that they dont have to be repeated
280
+ #{self}.options
281
+
282
+ # Method usage N/A
283
+ #{self}.options
284
+
285
+ # Method usage N/A
286
+ #{self}.override_options
287
+
288
+ # Method usage N/A
289
+ #{self}.override_options
290
+
291
+ # Method usage N/A
292
+ #{self}.subject_prefix(
293
+ value: 'optional - integer or string to pack/encode'
294
+ )
295
+
296
+ # Method usage N/A
297
+ #{self}.append_inputs
298
+
299
+ # Send an email
300
+ #{self}.mail(
301
+ body: 'optional - body value consumed by #mail',
302
+ subject: 'optional - subject value consumed by #mail',
303
+ to: 'required - to value consumed by #mail',
304
+ via: 'optional - via value consumed by #mail',
305
+ via_options: 'optional - via options value consumed by #mail'
306
+ )
307
+
308
+ # Method usage N/A
309
+ #{self}.permissable_options
310
+
311
+ # Method usage N/A
312
+ #{self}.default_delivery_method
313
+
314
+ # Method usage N/A
315
+ #{self}.standard_options
316
+
317
+ # Method usage N/A
318
+ #{self}.non_standard_options
319
+
320
+ # Method usage N/A
321
+ #{self}.build_mail(
322
+ date: 'optional - date value consumed by #build_mail',
323
+ from: 'optional - sender account or address to bind as operator',
324
+ via_options: 'optional - via options value consumed by #build_mail',
325
+ attachments: 'optional - attachments value consumed by #build_mail',
326
+ html_body: 'optional - html body value consumed by #build_mail (defaults to opts[:attachments])',
327
+ body: 'optional - body value consumed by #build_mail',
328
+ via: 'optional - via value consumed by #build_mail',
329
+ headers: 'optional - headers value consumed by #build_mail',
330
+ charset: 'optional - charset value consumed by #build_mail',
331
+ text_part_charset: 'optional - text part charset value consumed by #build_mail',
332
+ content_type: 'optional - content type value consumed by #build_mail'
333
+ )
334
+
335
+ # Method usage N/A
336
+ #{self}.build_html_part(
337
+ html_body: 'optional - html body value consumed by #build_html_part',
338
+ html_body_part_header: 'optional - html body part header value consumed by #build_html_part'
339
+ )
340
+
341
+ # Method usage N/A
342
+ #{self}.build_text_part(
343
+ charset: 'optional - charset value consumed by #build_text_part',
344
+ body: 'optional - body value consumed by #build_text_part',
345
+ body_part_header: 'optional - body part header value consumed by #build_text_part'
346
+ )
347
+
348
+ # Method usage N/A
349
+ #{self}.set_content_type(
350
+ mail: 'optional - mail value consumed by #set_content_type',
351
+ user_content_type: 'optional - user content type value consumed by #set_content_type'
352
+ )
353
+
354
+ # Method usage N/A
355
+ #{self}.add_attachments(
356
+ mail: 'optional - mail value consumed by #add_attachments',
357
+ attachments: 'optional - attachments value consumed by #add_attachments'
358
+ )
359
+
360
+ # Method usage N/A
361
+ #{self}.sendmail_binary
362
+
363
+ # Print the AUTHOR(S) string for this module.
280
364
  #{self}.authors
281
365
  "
366
+ constants.sort
282
367
  end
283
368
  end
284
369
  end
@@ -0,0 +1,120 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'pty'
4
+ require 'timeout'
5
+
6
+ module PWN
7
+ module Plugins
8
+ # PTY.spawn tube: sendline/recvuntil/recvline, persisted across pwn_eval.
9
+ module ProcessTube
10
+ @tubes = {}
11
+
12
+ public_class_method def self.required_bins
13
+ []
14
+ end
15
+
16
+ public_class_method def self.spawn(opts = {})
17
+ cmd = opts[:cmd] || opts[:command]
18
+ raise 'ERROR: cmd is required' if cmd.to_s.empty?
19
+
20
+ argv = cmd.is_a?(Array) ? cmd.map(&:to_s) : ['bash', '-lc', cmd.to_s]
21
+ r, w, pid = PTY.spawn(*argv)
22
+ id = "tube_#{pid}"
23
+ @tubes[id] = { r: r, w: w, pid: pid, buf: +'' }
24
+ { id: id, pid: pid }
25
+ end
26
+
27
+ public_class_method def self.write_line(opts = {})
28
+ t = tube!(opts)
29
+ line = opts[:line] || opts[:data] || ''
30
+ t[:w].write("#{line}\n")
31
+ t[:w].flush
32
+ line.to_s
33
+ end
34
+
35
+ public_class_method def self.recvuntil(opts = {})
36
+ t = tube!(opts)
37
+ needle = opts[:until].to_s
38
+ raise 'ERROR: until is required' if needle.empty?
39
+
40
+ timeout = (opts[:timeout] || 5).to_f
41
+ Timeout.timeout(timeout) do
42
+ loop do
43
+ return t[:buf] if t[:buf].include?(needle)
44
+
45
+ ch = t[:r].read_nonblock(4_096)
46
+ t[:buf] << ch
47
+ rescue IO::WaitReadable
48
+ t[:r].wait_readable(0.2)
49
+ retry
50
+ end
51
+ end
52
+ end
53
+
54
+ public_class_method def self.recvline(opts = {})
55
+ recvuntil(opts.merge(until: "\n"))
56
+ end
57
+
58
+ public_class_method def self.close(opts = {})
59
+ t = tube!(opts)
60
+ t[:w].close
61
+ t[:r].close
62
+ Process.kill('TERM', t[:pid])
63
+ @tubes.delete(opts[:id].to_s)
64
+ true
65
+ rescue StandardError
66
+ @tubes.delete(opts[:id].to_s)
67
+ false
68
+ end
69
+
70
+ public_class_method def self.authors
71
+ "AUTHOR(S):\n 0day Inc. <support@0dayinc.com>\n"
72
+ end
73
+
74
+ public_class_method def self.help
75
+ puts "USAGE:
76
+ # List host binaries this module expects to be installed.
77
+ #{self}.required_bins
78
+
79
+ # Run spawn and return its result
80
+ #{self}.spawn(
81
+ cmd: 'required - command string to run (defaults to opts[:command])',
82
+ command: 'optional - command value consumed by #spawn'
83
+ )
84
+
85
+ # Run write line and return its result
86
+ #{self}.write_line(
87
+ line: 'optional - line value consumed by #write_line',
88
+ data: 'optional - data value consumed by #write_line'
89
+ )
90
+
91
+ # Run recvuntil and return its result
92
+ #{self}.recvuntil(
93
+ until: 'required - until value consumed by #recvuntil',
94
+ timeout: 'optional - seconds to wait before giving up'
95
+ )
96
+
97
+ # Run recvline and return its result
98
+ #{self}.recvline
99
+
100
+ # Close a session previously returned by #open.
101
+ #{self}.close(
102
+ id: 'optional - id value consumed by #close'
103
+ )
104
+
105
+ # Print the AUTHOR(S) string for this module.
106
+ #{self}.authors
107
+ "
108
+ constants.sort
109
+ end
110
+
111
+ private_class_method def self.tube!(opts = {})
112
+ id = opts[:id].to_s
113
+ t = @tubes[id]
114
+ raise 'ERROR: id is required / unknown tube' unless t
115
+
116
+ t
117
+ end
118
+ end
119
+ end
120
+ end
@@ -76,14 +76,20 @@ module PWN
76
76
 
77
77
  public_class_method def self.help
78
78
  puts "USAGE:
79
- proc_list_arr = #{self}.list
79
+ # Run list and return its result
80
+ #{self}.list(
81
+ pid: 'optional - pid value consumed by #list'
82
+ )
80
83
 
84
+ # Run cleanup pids and return its result
81
85
  #{self}.cleanup_pids(
82
86
  pids_arr: 'required - array of pids to kill'
83
87
  )
84
88
 
89
+ # Print the AUTHOR(S) string for this module.
85
90
  #{self}.authors
86
91
  "
92
+ constants.sort
87
93
  end
88
94
  end
89
95
  end
@@ -53,11 +53,15 @@ module PWN
53
53
 
54
54
  public_class_method def self.help
55
55
  puts "USAGE:
56
- logger = #{self}.create(
57
- level: 'optional - logging verbosity :debug|:error|:fatal|:info|:unknown|:warn (Defaults to :info)'
56
+ # Run create and return its result
57
+ #{self}.create(
58
+ level: 'optional - level value consumed by #create'
58
59
  )
60
+
61
+ # Print the AUTHOR(S) string for this module.
59
62
  #{self}.authors
60
63
  "
64
+ constants.sort
61
65
  end
62
66
  end
63
67
  end
@@ -50,20 +50,25 @@ module PWN
50
50
  # Display Usage for this Module
51
51
 
52
52
  public_class_method def self.help
53
- puts %{USAGE:
54
- amqp_conn1 = #{self}.open(
55
- hostname: 'required',
53
+ puts "USAGE:
54
+ # Open a session or connection and return a handle.
55
+ #{self}.open(
56
+ hostname: 'required - hostname value consumed by #open',
56
57
  port: 'optional - defaults to 5672',
57
- username: 'optional',
58
- password: 'optional'
58
+ username: 'optional - username value consumed by #open',
59
+ password: 'optional - password value consumed by #open'
59
60
  )
60
61
 
62
+ # Close a session previously returned by #open.
61
63
  #{self}.close(
62
- amqp_oject: amqp_conn1
64
+ amqp_oject: 'optional - amqp oject value consumed by #close',
65
+ amqp_obj: 'optional - amqp obj value consumed by #close'
63
66
  )
64
67
 
68
+ # Print the AUTHOR(S) string for this module.
65
69
  #{self}.authors
66
- }
70
+ "
71
+ constants.sort
67
72
  end
68
73
  end
69
74
  end