pwn 0.5.708 → 0.5.710

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (450) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +2 -2
  3. data/documentation/Installation.md +1 -0
  4. data/etc/default_skills/exploitdev/SKILL.md +38 -0
  5. data/etc/default_skills/pwn/ai/agent/extrospection/osint/bridges/SKILL.md +30 -8
  6. data/etc/default_skills/pwn/ai/agent/extrospection/osint/social/SKILL.md +30 -8
  7. data/etc/default_skills/pwn/ai/agent/extrospection/osint/social/references/urls.md +1 -1
  8. data/etc/default_skills/pwn/ai/agent/extrospection/references/urls.md +0 -1
  9. data/etc/default_skills/pwn/memory_index/SKILL.md +0 -4
  10. data/etc/default_skills/pwn/plugins/aflplusplus/SKILL.md +49 -0
  11. data/etc/default_skills/pwn/plugins/android/SKILL.md +1 -0
  12. data/etc/default_skills/pwn/plugins/artifact_registry/SKILL.md +49 -0
  13. data/etc/default_skills/pwn/plugins/binary_parser/SKILL.md +54 -0
  14. data/etc/default_skills/pwn/plugins/credential_attack/SKILL.md +58 -0
  15. data/etc/default_skills/pwn/plugins/credential_attack/references/urls.md +3 -0
  16. data/etc/default_skills/pwn/plugins/exploit_db/SKILL.md +49 -0
  17. data/etc/default_skills/pwn/plugins/exploit_dev/SKILL.md +63 -0
  18. data/etc/default_skills/pwn/plugins/frida/SKILL.md +51 -0
  19. data/etc/default_skills/pwn/plugins/fuzz/SKILL.md +2 -0
  20. data/etc/default_skills/pwn/plugins/gdb/SKILL.md +53 -0
  21. data/etc/default_skills/pwn/plugins/jobs/SKILL.md +51 -0
  22. data/etc/default_skills/pwn/plugins/k8s/SKILL.md +51 -0
  23. data/etc/default_skills/pwn/plugins/nuclei/SKILL.md +50 -0
  24. data/etc/default_skills/pwn/plugins/preflight_checker/SKILL.md +59 -0
  25. data/etc/default_skills/pwn/plugins/process_tube/SKILL.md +53 -0
  26. data/etc/default_skills/pwn/plugins/radare2/SKILL.md +59 -0
  27. data/etc/default_skills/pwn/plugins/recon/SKILL.md +57 -0
  28. data/etc/default_skills/pwn/plugins/recon/references/urls.md +6 -0
  29. data/etc/default_skills/pwn/plugins/semgrep/SKILL.md +48 -0
  30. data/etc/default_skills/pwn/plugins/sqlmap/SKILL.md +48 -0
  31. data/etc/default_skills/pwn/plugins/transparent_browser/SKILL.md +0 -4
  32. data/etc/default_skills/pwn/plugins/volatility/SKILL.md +49 -0
  33. data/lib/pwn/ai/agent/assembly.rb +4 -1
  34. data/lib/pwn/ai/agent/btc.rb +4 -1
  35. data/lib/pwn/ai/agent/burp_suite.rb +5 -2
  36. data/lib/pwn/ai/agent/curriculum.rb +89 -30
  37. data/lib/pwn/ai/agent/dispatch.rb +27 -16
  38. data/lib/pwn/ai/agent/extrospection/osint/bridges.rb +9 -18
  39. data/lib/pwn/ai/agent/extrospection/osint/social.rb +9 -18
  40. data/lib/pwn/ai/agent/extrospection.rb +185 -60
  41. data/lib/pwn/ai/agent/gqrx.rb +4 -1
  42. data/lib/pwn/ai/agent/hacker_one.rb +5 -2
  43. data/lib/pwn/ai/agent/learning.rb +142 -25
  44. data/lib/pwn/ai/agent/loop.rb +53 -46
  45. data/lib/pwn/ai/agent/metrics.rb +133 -23
  46. data/lib/pwn/ai/agent/mistakes.rb +126 -17
  47. data/lib/pwn/ai/agent/open_goal.rb +25 -9
  48. data/lib/pwn/ai/agent/policy.rb +158 -18
  49. data/lib/pwn/ai/agent/prompt_builder.rb +21 -11
  50. data/lib/pwn/ai/agent/prompt_cache.rb +44 -13
  51. data/lib/pwn/ai/agent/reflect.rb +9 -5
  52. data/lib/pwn/ai/agent/registry.rb +65 -12
  53. data/lib/pwn/ai/agent/result.rb +19 -10
  54. data/lib/pwn/ai/agent/reward.rb +150 -32
  55. data/lib/pwn/ai/agent/sast.rb +4 -1
  56. data/lib/pwn/ai/agent/swarm.rb +72 -36
  57. data/lib/pwn/ai/agent/task_summarizer.rb +165 -36
  58. data/lib/pwn/ai/agent/tool_guard.rb +105 -6
  59. data/lib/pwn/ai/agent/tools/sessions.rb +8 -1
  60. data/lib/pwn/ai/agent/transparent_browser.rb +4 -1
  61. data/lib/pwn/ai/agent/turn_finalizer.rb +41 -21
  62. data/lib/pwn/ai/agent/vuln_gen.rb +6 -3
  63. data/lib/pwn/ai/agent.rb +4 -0
  64. data/lib/pwn/ai/anthropic.rb +41 -7
  65. data/lib/pwn/ai/gemini.rb +21 -11
  66. data/lib/pwn/ai/grok.rb +44 -6
  67. data/lib/pwn/ai/http_retry.rb +40 -12
  68. data/lib/pwn/ai/ollama.rb +19 -10
  69. data/lib/pwn/ai/open_ai.rb +81 -30
  70. data/lib/pwn/ai/open_web_ui.rb +20 -14
  71. data/lib/pwn/ai/red_team/agent_protocol_abuse.rb +7 -1
  72. data/lib/pwn/ai/red_team/data_and_model_poisoning.rb +7 -1
  73. data/lib/pwn/ai/red_team/excessive_agency.rb +7 -1
  74. data/lib/pwn/ai/red_team/hidden_context_exposure.rb +7 -1
  75. data/lib/pwn/ai/red_team/insecure_output_handling.rb +7 -1
  76. data/lib/pwn/ai/red_team/jailbreak.rb +7 -1
  77. data/lib/pwn/ai/red_team/memory_poisoning.rb +7 -1
  78. data/lib/pwn/ai/red_team/multimodal_injection.rb +7 -1
  79. data/lib/pwn/ai/red_team/overreliance.rb +7 -1
  80. data/lib/pwn/ai/red_team/payload_splitting.rb +7 -1
  81. data/lib/pwn/ai/red_team/prompt_injection.rb +7 -1
  82. data/lib/pwn/ai/red_team/rag_poisoning.rb +7 -1
  83. data/lib/pwn/ai/red_team/sensitive_information_disclosure.rb +7 -1
  84. data/lib/pwn/ai/red_team/supply_chain.rb +7 -1
  85. data/lib/pwn/ai/red_team/system_prompt_extraction.rb +7 -1
  86. data/lib/pwn/ai/red_team/test_case_engine.rb +12 -9
  87. data/lib/pwn/ai/red_team/token_smuggling.rb +7 -1
  88. data/lib/pwn/ai/red_team/unbounded_consumption.rb +7 -1
  89. data/lib/pwn/ai/red_team/vector_and_embedding_weaknesses.rb +7 -1
  90. data/lib/pwn/ai/red_team.rb +4 -0
  91. data/lib/pwn/ai.rb +4 -0
  92. data/lib/pwn/aws/acm.rb +5 -2
  93. data/lib/pwn/aws/api_gateway.rb +10 -7
  94. data/lib/pwn/aws/app_stream.rb +5 -2
  95. data/lib/pwn/aws/application_auto_scaling.rb +5 -2
  96. data/lib/pwn/aws/application_discovery_service.rb +5 -2
  97. data/lib/pwn/aws/auto_scaling.rb +5 -2
  98. data/lib/pwn/aws/batch.rb +5 -2
  99. data/lib/pwn/aws/budgets.rb +5 -2
  100. data/lib/pwn/aws/cloud_formation.rb +5 -2
  101. data/lib/pwn/aws/cloud_front.rb +7 -4
  102. data/lib/pwn/aws/cloud_hsm.rb +5 -2
  103. data/lib/pwn/aws/cloud_search.rb +5 -2
  104. data/lib/pwn/aws/cloud_search_domain.rb +5 -2
  105. data/lib/pwn/aws/cloud_trail.rb +5 -2
  106. data/lib/pwn/aws/cloud_watch.rb +5 -2
  107. data/lib/pwn/aws/cloud_watch_events.rb +5 -2
  108. data/lib/pwn/aws/cloud_watch_logs.rb +5 -2
  109. data/lib/pwn/aws/code_build.rb +5 -2
  110. data/lib/pwn/aws/code_commit.rb +5 -2
  111. data/lib/pwn/aws/code_deploy.rb +5 -2
  112. data/lib/pwn/aws/code_pipeline.rb +5 -2
  113. data/lib/pwn/aws/cognito_identity.rb +5 -2
  114. data/lib/pwn/aws/cognito_identity_provider.rb +5 -2
  115. data/lib/pwn/aws/cognito_sync.rb +5 -2
  116. data/lib/pwn/aws/config_service.rb +5 -2
  117. data/lib/pwn/aws/data_pipleline.rb +5 -2
  118. data/lib/pwn/aws/database_migration_service.rb +5 -2
  119. data/lib/pwn/aws/device_farm.rb +5 -2
  120. data/lib/pwn/aws/direct_connect.rb +5 -2
  121. data/lib/pwn/aws/directory_service.rb +5 -2
  122. data/lib/pwn/aws/dynamo_db.rb +5 -2
  123. data/lib/pwn/aws/dynamo_db_streams.rb +5 -2
  124. data/lib/pwn/aws/ec2.rb +5 -2
  125. data/lib/pwn/aws/ecr.rb +5 -2
  126. data/lib/pwn/aws/ecs.rb +5 -2
  127. data/lib/pwn/aws/efs.rb +5 -2
  128. data/lib/pwn/aws/elasti_cache.rb +5 -2
  129. data/lib/pwn/aws/elastic_beanstalk.rb +8 -5
  130. data/lib/pwn/aws/elastic_load_balancing.rb +5 -2
  131. data/lib/pwn/aws/elastic_load_balancing_v2.rb +6 -3
  132. data/lib/pwn/aws/elastic_transcoder.rb +5 -2
  133. data/lib/pwn/aws/elasticsearch_service.rb +5 -2
  134. data/lib/pwn/aws/emr.rb +5 -2
  135. data/lib/pwn/aws/firehose.rb +5 -2
  136. data/lib/pwn/aws/game_lift.rb +5 -2
  137. data/lib/pwn/aws/glacier.rb +6 -3
  138. data/lib/pwn/aws/health.rb +5 -2
  139. data/lib/pwn/aws/iam.rb +10 -4
  140. data/lib/pwn/aws/import_export.rb +5 -2
  141. data/lib/pwn/aws/inspector.rb +5 -2
  142. data/lib/pwn/aws/iot.rb +5 -2
  143. data/lib/pwn/aws/iot_data_plane.rb +5 -2
  144. data/lib/pwn/aws/kinesis.rb +5 -2
  145. data/lib/pwn/aws/kinesis_analytics.rb +5 -2
  146. data/lib/pwn/aws/kms.rb +5 -2
  147. data/lib/pwn/aws/lambda.rb +5 -2
  148. data/lib/pwn/aws/lambda_preview.rb +5 -2
  149. data/lib/pwn/aws/lex.rb +5 -2
  150. data/lib/pwn/aws/lightsail.rb +5 -2
  151. data/lib/pwn/aws/machine_learning.rb +5 -2
  152. data/lib/pwn/aws/marketplace_commerce_analytics.rb +5 -2
  153. data/lib/pwn/aws/marketplace_metering.rb +5 -2
  154. data/lib/pwn/aws/ops_works.rb +5 -2
  155. data/lib/pwn/aws/ops_works_cm.rb +5 -2
  156. data/lib/pwn/aws/pinpoint.rb +5 -2
  157. data/lib/pwn/aws/polly.rb +5 -2
  158. data/lib/pwn/aws/rds.rb +5 -2
  159. data/lib/pwn/aws/redshift.rb +5 -2
  160. data/lib/pwn/aws/rekognition.rb +5 -2
  161. data/lib/pwn/aws/route53.rb +5 -2
  162. data/lib/pwn/aws/route53_domains.rb +5 -2
  163. data/lib/pwn/aws/s3.rb +5 -2
  164. data/lib/pwn/aws/service_catalog.rb +5 -2
  165. data/lib/pwn/aws/ses.rb +5 -2
  166. data/lib/pwn/aws/shield.rb +5 -2
  167. data/lib/pwn/aws/simple_db.rb +5 -2
  168. data/lib/pwn/aws/sms.rb +5 -2
  169. data/lib/pwn/aws/snowball.rb +5 -2
  170. data/lib/pwn/aws/sns.rb +5 -2
  171. data/lib/pwn/aws/sqs.rb +5 -2
  172. data/lib/pwn/aws/ssm.rb +5 -2
  173. data/lib/pwn/aws/states.rb +5 -2
  174. data/lib/pwn/aws/storage_gateway.rb +5 -2
  175. data/lib/pwn/aws/sts.rb +4 -1
  176. data/lib/pwn/aws/support.rb +5 -2
  177. data/lib/pwn/aws/swf.rb +5 -2
  178. data/lib/pwn/aws/waf.rb +5 -2
  179. data/lib/pwn/aws/waf_regional.rb +5 -2
  180. data/lib/pwn/aws/workspaces.rb +5 -2
  181. data/lib/pwn/aws/x_ray.rb +5 -2
  182. data/lib/pwn/aws.rb +4 -0
  183. data/lib/pwn/banner/anon.rb +3 -0
  184. data/lib/pwn/banner/bubble.rb +3 -0
  185. data/lib/pwn/banner/cheshire.rb +3 -0
  186. data/lib/pwn/banner/code_cave.rb +3 -0
  187. data/lib/pwn/banner/dont_panic.rb +3 -0
  188. data/lib/pwn/banner/f_society.rb +3 -0
  189. data/lib/pwn/banner/fork_bomb.rb +3 -0
  190. data/lib/pwn/banner/jmp_esp.rb +3 -0
  191. data/lib/pwn/banner/matrix.rb +5 -1
  192. data/lib/pwn/banner/ninja.rb +3 -0
  193. data/lib/pwn/banner/off_the_air.rb +3 -0
  194. data/lib/pwn/banner/pirate.rb +3 -0
  195. data/lib/pwn/banner/radare2.rb +3 -0
  196. data/lib/pwn/banner/radare2_ai.rb +3 -0
  197. data/lib/pwn/banner/white_rabbit.rb +3 -0
  198. data/lib/pwn/banner.rb +6 -2
  199. data/lib/pwn/blockchain/btc.rb +8 -3
  200. data/lib/pwn/blockchain/eth.rb +10 -3
  201. data/lib/pwn/blockchain.rb +4 -0
  202. data/lib/pwn/bounty/lifecycle_authz_replay.rb +46 -27
  203. data/lib/pwn/bounty.rb +4 -0
  204. data/lib/pwn/config.rb +79 -13
  205. data/lib/pwn/cron.rb +297 -20
  206. data/lib/pwn/driver.rb +2 -18
  207. data/lib/pwn/ffi/adalm_pluto.rb +65 -11
  208. data/lib/pwn/ffi/fftw.rb +31 -6
  209. data/lib/pwn/ffi/hack_rf.rb +59 -8
  210. data/lib/pwn/ffi/liquid.rb +63 -10
  211. data/lib/pwn/ffi/rtl_sdr.rb +35 -5
  212. data/lib/pwn/ffi/soapy_sdr.rb +60 -10
  213. data/lib/pwn/ffi/stdio.rb +7 -8
  214. data/lib/pwn/ffi/volk.rb +36 -7
  215. data/lib/pwn/ffi.rb +12 -0
  216. data/lib/pwn/memory.rb +136 -16
  217. data/lib/pwn/memory_index.rb +34 -19
  218. data/lib/pwn/migrate.rb +34 -24
  219. data/lib/pwn/module_skills.rb +39 -8
  220. data/lib/pwn/plugins/aflplusplus.rb +72 -0
  221. data/lib/pwn/plugins/android.rb +71 -245
  222. data/lib/pwn/plugins/artifact_registry.rb +71 -0
  223. data/lib/pwn/plugins/assembly.rb +9 -4
  224. data/lib/pwn/plugins/authentication_helper.rb +8 -5
  225. data/lib/pwn/plugins/baresip.rb +59 -12
  226. data/lib/pwn/plugins/basic_auth.rb +9 -3
  227. data/lib/pwn/plugins/beef.rb +28 -18
  228. data/lib/pwn/plugins/binary_parser.rb +133 -0
  229. data/lib/pwn/plugins/black_duck_binary_analysis.rb +63 -39
  230. data/lib/pwn/plugins/burp_suite.rb +98 -68
  231. data/lib/pwn/plugins/bus_pirate.rb +15 -8
  232. data/lib/pwn/plugins/char.rb +33 -3
  233. data/lib/pwn/plugins/credential_attack.rb +158 -0
  234. data/lib/pwn/plugins/credit_card.rb +6 -1
  235. data/lib/pwn/plugins/dao_ldap.rb +19 -13
  236. data/lib/pwn/plugins/dao_mongo.rb +11 -5
  237. data/lib/pwn/plugins/dao_postgres.rb +28 -19
  238. data/lib/pwn/plugins/dao_sqlite3.rb +15 -6
  239. data/lib/pwn/plugins/defect_dojo.rb +38 -22
  240. data/lib/pwn/plugins/detect_os.rb +5 -0
  241. data/lib/pwn/plugins/ein.rb +3 -0
  242. data/lib/pwn/plugins/exploit_db.rb +69 -0
  243. data/lib/pwn/plugins/exploit_dev.rb +330 -0
  244. data/lib/pwn/plugins/file_fu.rb +11 -8
  245. data/lib/pwn/plugins/frida.rb +112 -0
  246. data/lib/pwn/plugins/fuzz.rb +42 -6
  247. data/lib/pwn/plugins/gdb.rb +115 -0
  248. data/lib/pwn/plugins/git.rb +19 -14
  249. data/lib/pwn/plugins/github.rb +38 -15
  250. data/lib/pwn/plugins/google_workspace.rb +188 -45
  251. data/lib/pwn/plugins/hacker_one.rb +159 -35
  252. data/lib/pwn/plugins/hunter.rb +6 -3
  253. data/lib/pwn/plugins/ip_info.rb +9 -4
  254. data/lib/pwn/plugins/irc.rb +28 -15
  255. data/lib/pwn/plugins/jenkins.rb +65 -57
  256. data/lib/pwn/plugins/jira_data_center.rb +30 -22
  257. data/lib/pwn/plugins/jobs.rb +110 -0
  258. data/lib/pwn/plugins/json_pathify.rb +9 -5
  259. data/lib/pwn/plugins/k8s.rb +73 -0
  260. data/lib/pwn/plugins/log.rb +113 -13
  261. data/lib/pwn/plugins/mail_agent.rb +87 -79
  262. data/lib/pwn/plugins/metasploit.rb +11 -6
  263. data/lib/pwn/plugins/monkey_patch.rb +3 -0
  264. data/lib/pwn/plugins/msr206.rb +42 -28
  265. data/lib/pwn/plugins/nessus_cloud.rb +44 -4
  266. data/lib/pwn/plugins/nexpose_vuln_scan.rb +40 -24
  267. data/lib/pwn/plugins/nmap_it.rb +14 -34
  268. data/lib/pwn/plugins/nuclei.rb +90 -0
  269. data/lib/pwn/plugins/oauth2.rb +11 -5
  270. data/lib/pwn/plugins/ocr.rb +3 -0
  271. data/lib/pwn/plugins/open_api.rb +5 -2
  272. data/lib/pwn/plugins/openvas.rb +33 -25
  273. data/lib/pwn/plugins/packet.rb +152 -31
  274. data/lib/pwn/plugins/pdf_parse.rb +5 -2
  275. data/lib/pwn/plugins/pony.rb +86 -1
  276. data/lib/pwn/plugins/preflight_checker.rb +166 -0
  277. data/lib/pwn/plugins/process_tube.rb +139 -0
  278. data/lib/pwn/plugins/ps.rb +7 -1
  279. data/lib/pwn/plugins/pwn_logger.rb +6 -2
  280. data/lib/pwn/plugins/rabbit_mq.rb +12 -7
  281. data/lib/pwn/plugins/radare2.rb +253 -0
  282. data/lib/pwn/plugins/recon.rb +196 -0
  283. data/lib/pwn/plugins/repl.rb +122 -1
  284. data/lib/pwn/plugins/scannable_codes.rb +5 -1
  285. data/lib/pwn/plugins/semgrep.rb +61 -0
  286. data/lib/pwn/plugins/serial.rb +24 -14
  287. data/lib/pwn/plugins/shodan.rb +54 -35
  288. data/lib/pwn/plugins/slack_client.rb +11 -6
  289. data/lib/pwn/plugins/sock.rb +17 -8
  290. data/lib/pwn/plugins/spider.rb +5 -2
  291. data/lib/pwn/plugins/sqlmap.rb +49 -0
  292. data/lib/pwn/plugins/ssn.rb +3 -0
  293. data/lib/pwn/plugins/thread_pool.rb +6 -9
  294. data/lib/pwn/plugins/tor.rb +9 -4
  295. data/lib/pwn/plugins/transparent_browser.rb +62 -107
  296. data/lib/pwn/plugins/tty_spinner.rb +16 -2
  297. data/lib/pwn/plugins/twitter_api.rb +6 -2
  298. data/lib/pwn/plugins/uri_scheme.rb +4 -1
  299. data/lib/pwn/plugins/vault.rb +12 -3
  300. data/lib/pwn/plugins/vin.rb +24 -12
  301. data/lib/pwn/plugins/voice.rb +7 -2
  302. data/lib/pwn/plugins/volatility.rb +67 -0
  303. data/lib/pwn/plugins/vsphere.rb +9 -5
  304. data/lib/pwn/plugins/xxd.rb +12 -43
  305. data/lib/pwn/plugins/zaproxy.rb +30 -16
  306. data/lib/pwn/plugins.rb +22 -0
  307. data/lib/pwn/reports/ai_red_team.rb +6 -2
  308. data/lib/pwn/reports/csv.rb +8 -1
  309. data/lib/pwn/reports/fuzz.rb +5 -2
  310. data/lib/pwn/reports/html.rb +8 -1
  311. data/lib/pwn/reports/html_footer.rb +4 -3
  312. data/lib/pwn/reports/html_header.rb +6 -2
  313. data/lib/pwn/reports/json.rb +8 -1
  314. data/lib/pwn/reports/markdown.rb +8 -1
  315. data/lib/pwn/reports/pdf.rb +8 -1
  316. data/lib/pwn/reports/phone.rb +5 -2
  317. data/lib/pwn/reports/sast.rb +6 -2
  318. data/lib/pwn/reports/uri_buster.rb +5 -2
  319. data/lib/pwn/reports/xml.rb +8 -1
  320. data/lib/pwn/reports.rb +19 -0
  321. data/lib/pwn/sast/amqp_connect_as_guest.rb +9 -3
  322. data/lib/pwn/sast/apache_file_system_util_api.rb +9 -3
  323. data/lib/pwn/sast/aws.rb +9 -3
  324. data/lib/pwn/sast/banned_function_calls_c.rb +9 -3
  325. data/lib/pwn/sast/base64.rb +9 -3
  326. data/lib/pwn/sast/beef_hook.rb +9 -3
  327. data/lib/pwn/sast/cmd_execution_go_lang.rb +9 -3
  328. data/lib/pwn/sast/cmd_execution_java.rb +9 -3
  329. data/lib/pwn/sast/cmd_execution_python.rb +9 -3
  330. data/lib/pwn/sast/cmd_execution_ruby.rb +9 -3
  331. data/lib/pwn/sast/cmd_execution_scala.rb +9 -3
  332. data/lib/pwn/sast/csrf.rb +9 -3
  333. data/lib/pwn/sast/deserial_java.rb +9 -3
  334. data/lib/pwn/sast/emoticon.rb +9 -3
  335. data/lib/pwn/sast/eval.rb +9 -3
  336. data/lib/pwn/sast/factory.rb +9 -3
  337. data/lib/pwn/sast/http_authorization_header.rb +9 -3
  338. data/lib/pwn/sast/inner_html.rb +9 -3
  339. data/lib/pwn/sast/keystore.rb +9 -3
  340. data/lib/pwn/sast/local_storage.rb +9 -3
  341. data/lib/pwn/sast/location_hash.rb +9 -3
  342. data/lib/pwn/sast/log4j.rb +9 -3
  343. data/lib/pwn/sast/logger.rb +9 -3
  344. data/lib/pwn/sast/md5.rb +9 -3
  345. data/lib/pwn/sast/outer_html.rb +9 -3
  346. data/lib/pwn/sast/padding_oracle.rb +9 -3
  347. data/lib/pwn/sast/password.rb +9 -3
  348. data/lib/pwn/sast/php_input_mechanisms.rb +9 -3
  349. data/lib/pwn/sast/php_type_juggling.rb +9 -3
  350. data/lib/pwn/sast/pom_version.rb +9 -3
  351. data/lib/pwn/sast/port.rb +9 -3
  352. data/lib/pwn/sast/post_message.rb +9 -3
  353. data/lib/pwn/sast/private_key.rb +9 -3
  354. data/lib/pwn/sast/redirect.rb +9 -3
  355. data/lib/pwn/sast/redos.rb +9 -3
  356. data/lib/pwn/sast/shell.rb +9 -3
  357. data/lib/pwn/sast/signature.rb +9 -3
  358. data/lib/pwn/sast/sql.rb +9 -3
  359. data/lib/pwn/sast/ssl.rb +9 -3
  360. data/lib/pwn/sast/sudo.rb +9 -3
  361. data/lib/pwn/sast/task_tag.rb +9 -3
  362. data/lib/pwn/sast/test_case_engine.rb +11 -7
  363. data/lib/pwn/sast/throw_errors.rb +9 -3
  364. data/lib/pwn/sast/token.rb +9 -3
  365. data/lib/pwn/sast/type_script_type_juggling.rb +9 -3
  366. data/lib/pwn/sast/use_after_free.rb +9 -3
  367. data/lib/pwn/sast/version.rb +9 -3
  368. data/lib/pwn/sast/window_location_hash.rb +9 -3
  369. data/lib/pwn/sast.rb +4 -0
  370. data/lib/pwn/sdr/decoder/adsb.rb +36 -5
  371. data/lib/pwn/sdr/decoder/apt.rb +9 -6
  372. data/lib/pwn/sdr/decoder/base.rb +74 -22
  373. data/lib/pwn/sdr/decoder/bluetooth.rb +17 -5
  374. data/lib/pwn/sdr/decoder/dect.rb +12 -3
  375. data/lib/pwn/sdr/decoder/dsp.rb +229 -39
  376. data/lib/pwn/sdr/decoder/flex.rb +59 -11
  377. data/lib/pwn/sdr/decoder/gps.rb +12 -3
  378. data/lib/pwn/sdr/decoder/gsm.rb +24 -4
  379. data/lib/pwn/sdr/decoder/iridium.rb +12 -3
  380. data/lib/pwn/sdr/decoder/lora.rb +13 -4
  381. data/lib/pwn/sdr/decoder/lte.rb +27 -3
  382. data/lib/pwn/sdr/decoder/morse.rb +12 -3
  383. data/lib/pwn/sdr/decoder/p25.rb +12 -3
  384. data/lib/pwn/sdr/decoder/pager.rb +8 -5
  385. data/lib/pwn/sdr/decoder/pocsag.rb +29 -9
  386. data/lib/pwn/sdr/decoder/rds.rb +14 -8
  387. data/lib/pwn/sdr/decoder/rfid.rb +12 -3
  388. data/lib/pwn/sdr/decoder/rtl433.rb +12 -3
  389. data/lib/pwn/sdr/decoder/rtty.rb +8 -5
  390. data/lib/pwn/sdr/decoder/wifi.rb +12 -3
  391. data/lib/pwn/sdr/decoder/zigbee.rb +12 -3
  392. data/lib/pwn/sdr/decoder.rb +9 -0
  393. data/lib/pwn/sdr/flipper_zero.rb +17 -10
  394. data/lib/pwn/sdr/frequency_allocation.rb +4 -1
  395. data/lib/pwn/sdr/gqrx.rb +178 -119
  396. data/lib/pwn/sdr/rfidler.rb +4 -1
  397. data/lib/pwn/sdr/son_micro_rfid.rb +37 -24
  398. data/lib/pwn/sdr.rb +14 -0
  399. data/lib/pwn/sessions.rb +86 -16
  400. data/lib/pwn/setup.rb +106 -37
  401. data/lib/pwn/version.rb +1 -1
  402. data/lib/pwn/www/app_cobalt_io.rb +11 -5
  403. data/lib/pwn/www/bing.rb +10 -5
  404. data/lib/pwn/www/bug_crowd.rb +11 -5
  405. data/lib/pwn/www/checkip.rb +8 -4
  406. data/lib/pwn/www/coinbase_pro.rb +11 -5
  407. data/lib/pwn/www/duckduckgo.rb +12 -6
  408. data/lib/pwn/www/facebook.rb +11 -5
  409. data/lib/pwn/www/github.rb +11 -5
  410. data/lib/pwn/www/google.rb +11 -5
  411. data/lib/pwn/www/hacker_one.rb +20 -9
  412. data/lib/pwn/www/linkedin.rb +11 -5
  413. data/lib/pwn/www/pandora.rb +11 -5
  414. data/lib/pwn/www/pastebin.rb +9 -4
  415. data/lib/pwn/www/paypal.rb +19 -11
  416. data/lib/pwn/www/synack.rb +11 -5
  417. data/lib/pwn/www/torch.rb +13 -8
  418. data/lib/pwn/www/trading_view.rb +11 -5
  419. data/lib/pwn/www/twitter.rb +11 -5
  420. data/lib/pwn/www/uber.rb +11 -5
  421. data/lib/pwn/www/upwork.rb +11 -5
  422. data/lib/pwn/www/wayback_machine.rb +12 -6
  423. data/lib/pwn/www/youtube.rb +10 -5
  424. data/lib/pwn/www.rb +4 -0
  425. data/spec/conventions_spec.rb +118 -2
  426. data/spec/integration/help_contract_spec.rb +2 -0
  427. data/spec/lib/pwn/ai/agent/reward_spec.rb +9 -0
  428. data/spec/lib/pwn/plugins/aflplusplus_spec.rb +13 -0
  429. data/spec/lib/pwn/plugins/artifact_registry_spec.rb +13 -0
  430. data/spec/lib/pwn/plugins/binary_parser_spec.rb +21 -0
  431. data/spec/lib/pwn/plugins/credential_attack_spec.rb +13 -0
  432. data/spec/lib/pwn/plugins/exploit_db_spec.rb +13 -0
  433. data/spec/lib/pwn/plugins/exploit_dev_spec.rb +23 -0
  434. data/spec/lib/pwn/plugins/frida_spec.rb +13 -0
  435. data/spec/lib/pwn/plugins/gdb_spec.rb +13 -0
  436. data/spec/lib/pwn/plugins/jobs_spec.rb +13 -0
  437. data/spec/lib/pwn/plugins/k8s_spec.rb +13 -0
  438. data/spec/lib/pwn/plugins/nuclei_spec.rb +13 -0
  439. data/spec/lib/pwn/plugins/preflight_checker_spec.rb +23 -0
  440. data/spec/lib/pwn/plugins/process_tube_spec.rb +13 -0
  441. data/spec/lib/pwn/plugins/radare2_spec.rb +13 -0
  442. data/spec/lib/pwn/plugins/recon_spec.rb +26 -0
  443. data/spec/lib/pwn/plugins/semgrep_spec.rb +13 -0
  444. data/spec/lib/pwn/plugins/sqlmap_spec.rb +13 -0
  445. data/spec/lib/pwn/plugins/volatility_spec.rb +13 -0
  446. data/spec/lib/pwn/req_queue_spec.rb +168 -0
  447. data/third_party/pwn_rdoc.jsonl +160 -5
  448. metadata +63 -7
  449. data/etc/default_skills/pwn/memory_index/references/urls.md +0 -4
  450. data/etc/default_skills/pwn/plugins/transparent_browser/references/urls.md +0 -3
@@ -2131,18 +2131,139 @@ module PWN
2131
2131
 
2132
2132
  public_class_method def self.help
2133
2133
  puts "USAGE:
2134
+ # Restore the TTY after a spinner / agent turn so Pry/Reline prints
2135
+ #{self}.ready_tty!(
2136
+ skip: 'optional - skip value consumed by #ready_tty!',
2137
+ io: 'optional - io value consumed by #ready_tty!'
2138
+ )
2139
+
2140
+ # Compact token-count formatter for the pwn.ai PS1 (e.g. 0, 843, 12K, 250K, 1M)
2141
+ #{self}.compact_context_tokens(
2142
+ tokens: 'optional - tokens value consumed by #compact_context_tokens'
2143
+ )
2144
+
2145
+ # Run refresh ps1 proc and return its result
2134
2146
  #{self}.refresh_ps1_proc(
2135
- mode: 'required - :splat or nil'
2147
+ mode: 'optional - mode value consumed by #refresh_ps1_proc'
2136
2148
  )
2137
2149
 
2150
+ # Run add commands and return its result
2138
2151
  #{self}.add_commands
2139
2152
 
2153
+ # Run add hooks and return its result
2140
2154
  #{self}.add_hooks
2141
2155
 
2156
+ # Run pwn ai complete kind and return its result
2157
+ #{self}.pwn_ai_complete_kind(
2158
+ line: 'optional - line value consumed by #pwn_ai_complete_kind'
2159
+ )
2160
+
2161
+ # Run pwn ai complete and return its result
2162
+ #{self}.pwn_ai_complete(
2163
+ target: 'required - token Reline is completing',
2164
+ line: 'optional - full line buffer',
2165
+ pry: 'optional - Pry instance for Ruby completion'
2166
+ )
2167
+
2168
+ # Run pwn ai complete command and return its result
2169
+ #{self}.pwn_ai_complete_command(
2170
+ line: 'optional - line value consumed by #pwn_ai_complete_command',
2171
+ target: 'required - hostname, IP, or CIDR to scan'
2172
+ )
2173
+
2174
+ # Run pwn ai complete path and return its result
2175
+ #{self}.pwn_ai_complete_path(
2176
+ target: 'required - hostname, IP, or CIDR to scan',
2177
+ line: 'optional - line value consumed by #pwn_ai_complete_path'
2178
+ )
2179
+
2180
+ # Run pwn ai complete ruby and return its result
2181
+ #{self}.pwn_ai_complete_ruby(
2182
+ target: 'optional - hostname, IP, or CIDR to scan',
2183
+ pry: 'optional - pry value consumed by #pwn_ai_complete_ruby (defaults to Thread.current[:pwn_ai_completer_pry])'
2184
+ )
2185
+
2186
+ # Install Reline dropdown for pwn-ai (commands / paths / Ruby)
2187
+ #{self}.install_pwn_ai_completer!(
2188
+ pry: 'optional - pry value consumed by #install_pwn_ai_completer!'
2189
+ )
2190
+
2191
+ # Run restore pwn ai completer and return its result
2192
+ #{self}.restore_pwn_ai_completer!
2193
+
2194
+ # Run a leading-slash pwn-ai command locally. Returns true when handled
2195
+ #{self}.pwn_ai_dispatch_slash!(
2196
+ request: 'optional - request value consumed by #pwn_ai_dispatch_slash!',
2197
+ pry: 'optional - pry value consumed by #pwn_ai_dispatch_slash!'
2198
+ )
2199
+
2200
+ # Run pwn ai engines and return its result
2201
+ #{self}.pwn_ai_engines
2202
+
2203
+ # Run pwn ai provider class and return its result
2204
+ #{self}.pwn_ai_provider_class(
2205
+ engine: 'optional - engine value consumed by #pwn_ai_provider_class'
2206
+ )
2207
+
2208
+ # Run pwn ai model ids and return its result
2209
+ #{self}.pwn_ai_model_ids(
2210
+ models: 'optional - models value consumed by #pwn_ai_model_ids'
2211
+ )
2212
+
2213
+ # Run pwn ai list llms and return its result
2214
+ #{self}.pwn_ai_list_llms(
2215
+ engine: 'required - engine value consumed by #pwn_ai_list_llms'
2216
+ )
2217
+
2218
+ # Run pwn ai engine model and return its result
2219
+ #{self}.pwn_ai_engine_model(
2220
+ engine: 'required - engine value consumed by #pwn_ai_engine_model'
2221
+ )
2222
+
2223
+ # Run pwn ai run model and return its result
2224
+ #{self}.pwn_ai_run_model(
2225
+ args: 'optional - Array args value consumed by #pwn_ai_run_model'
2226
+ )
2227
+
2228
+ # Run persist ai selection and return its result
2229
+ #{self}.persist_ai_selection(
2230
+ engine: 'required - engine value consumed by #persist_ai_selection',
2231
+ model: 'required - model value consumed by #persist_ai_selection'
2232
+ )
2233
+
2234
+ # Run pwn ai run cron and return its result
2235
+ #{self}.pwn_ai_run_cron(
2236
+ args: 'optional - Array args value consumed by #pwn_ai_run_cron'
2237
+ )
2238
+
2239
+ # Run pwn ai run sessions and return its result
2240
+ #{self}.pwn_ai_run_sessions(
2241
+ args: 'optional - Array args value consumed by #pwn_ai_run_sessions'
2242
+ )
2243
+
2244
+ # Run pwn ai run memory and return its result
2245
+ #{self}.pwn_ai_run_memory(
2246
+ args: 'optional - Array args value consumed by #pwn_ai_run_memory'
2247
+ )
2248
+
2249
+ # Run pwn ai run skills and return its result
2250
+ #{self}.pwn_ai_run_skills(
2251
+ args: 'optional - Array args value consumed by #pwn_ai_run_skills'
2252
+ )
2253
+
2254
+ # IRB-style suggest-as-you-type for the pwn REPL
2255
+ #{self}.enable_autocomplete(
2256
+ enabled: 'optional - Boolean (default true). false reverts to single-line cycling.',
2257
+ graph: 'optional - constants (PWN::Plugins::Nm<TAB>), instance methods'
2258
+ )
2259
+
2260
+ # Run start and return its result
2142
2261
  #{self}.start
2143
2262
 
2263
+ # Print the AUTHOR(S) string for this module.
2144
2264
  #{self}.authors
2145
2265
  "
2266
+ constants.sort
2146
2267
  end
2147
2268
  end
2148
2269
  end
@@ -72,15 +72,19 @@ module PWN
72
72
 
73
73
  public_class_method def self.help
74
74
  puts "USAGE:
75
+ # Run generate and return its result
75
76
  #{self}.generate(
76
77
  data: 'required - data to encode',
77
78
  type: 'optional - :barcode || :qrcode (defaults to :qrcode)',
78
79
  size: 'optional - size of the image when type is :qrcode (defaults to 200)',
79
- path: 'optional - path to save image (defaults to \"./\#{data}.png\")'
80
+ path: 'optional - path to save image (defaults to ./\#{data}.png)',
81
+ return_type: 'optional - :base64 || :file (defaults to :file)'
80
82
  )
81
83
 
84
+ # Print the AUTHOR(S) string for this module.
82
85
  #{self}.authors
83
86
  "
87
+ constants.sort
84
88
  end
85
89
  end
86
90
  end
@@ -0,0 +1,61 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'json'
4
+ require 'open3'
5
+
6
+ module PWN
7
+ module Plugins
8
+ # semgrep wrapper feeding SAST-shaped findings.
9
+ module Semgrep
10
+ public_class_method def self.required_bins
11
+ %w[semgrep]
12
+ end
13
+
14
+ public_class_method def self.scan(opts = {})
15
+ PWN::Plugins::PreflightChecker.require_bin!(name: 'semgrep')
16
+ target = opts[:path] || opts[:target] || '.'
17
+ cmd = ['semgrep', '--json', '--quiet']
18
+ cmd += ['--config', opts[:config].to_s] if opts[:config]
19
+ cmd << target.to_s
20
+ stdout, stderr, status = Open3.capture3(*cmd)
21
+ parsed = begin
22
+ JSON.parse(stdout)
23
+ rescue JSON::ParserError
24
+ {}
25
+ end
26
+ findings = Array(parsed['results']).map do |r|
27
+ {
28
+ title: r['check_id'],
29
+ severity: r.dig('extra', 'severity'),
30
+ path: r['path'],
31
+ line: r.dig('start', 'line'),
32
+ message: r.dig('extra', 'message')
33
+ }
34
+ end
35
+ { findings: findings, stderr: stderr, exit: status.exitstatus }
36
+ end
37
+
38
+ public_class_method def self.authors
39
+ "AUTHOR(S):\n 0day Inc. <support@0dayinc.com>\n"
40
+ end
41
+
42
+ public_class_method def self.help
43
+ puts "USAGE:
44
+ # List host binaries this module expects to be installed.
45
+ #{self}.required_bins
46
+
47
+ # Run semgrep --json and map results into finding hashes.
48
+ #{self}.scan(
49
+ path: 'optional - directory or file to scan (defaults to .)',
50
+ target: 'optional - alias for path',
51
+ config: 'optional - semgrep --config value (e.g. auto or p/owasp-top-ten)'
52
+ )
53
+
54
+ # Print the AUTHOR(S) string for this module.
55
+ #{self}.authors
56
+ "
57
+ constants.sort
58
+ end
59
+ end
60
+ end
61
+ end
@@ -232,41 +232,51 @@ module PWN
232
232
 
233
233
  public_class_method def self.help
234
234
  puts "USAGE:
235
- serial_obj = #{self}.connect(
236
- block_dev: 'optional serial block device path (defaults to /dev/ttyUSB0)',
237
- baud: 'optional (defaults to 9600)',
238
- data_bits: 'optional (defaults to 8)',
239
- stop_bits: 'optional (defaults to 1)',
235
+ # Run connect and return its result
236
+ #{self}.connect(
237
+ block_dev: 'optional - serial block device path (defaults to /dev/ttyUSB0)',
238
+ baud: 'optional - (defaults to 9600)',
239
+ data_bits: 'optional - (defaults to 8)',
240
+ stop_bits: 'optional - (defaults to 1)',
240
241
  parity: 'optional - :even|:mark|:odd|:space|:none (defaults to :none)'
241
242
  )
242
243
 
243
- line_state = #{self}.get_line_state(
244
- serial_obj: 'required serial_obj returned from #connect method'
244
+ # Run get line state and return its result
245
+ #{self}.get_line_state(
246
+ serial_obj: 'required - required serial_obj returned from #connect method'
245
247
  )
246
248
 
247
- modem_params = #{self}.get_modem_params(
248
- serial_obj: 'required serial_obj returned from #connect method'
249
+ # Run get modem params and return its result
250
+ #{self}.get_modem_params(
251
+ serial_obj: 'required - serial_obj returned from #connect method'
249
252
  )
250
253
 
254
+ # Run request and return its result
251
255
  #{self}.request(
252
- serial_obj: 'required serial_obj returned from #connect method',
253
- payload: 'required - array of bytes OR string to write to serial device (e.g. [0x00, 0x41, 0x90, 0x00] OR \"ATDT+15555555\r\n\"'
256
+ serial_obj: 'required - required serial_obj returned from #connect method',
257
+ payload: 'required - array of bytes OR string to write to serial device (e.g. [0x00, 0x41, 0x90, 0x00] OR ATDT+15555555\\r\\n'
254
258
  )
255
259
 
260
+ # Run response and return its result
256
261
  #{self}.response(
257
- serial_obj: 'required serial_obj returned from #connect method'
262
+ serial_obj: 'required - serial_obj returned from #connect method'
258
263
  )
259
264
 
260
- session_data_arr = #{self}.dump_session_data
265
+ # Run dump session data and return its result
266
+ #{self}.dump_session_data
261
267
 
268
+ # Run flush session data and return its result
262
269
  #{self}.flush_session_data
263
270
 
271
+ # Run disconnect and return its result
264
272
  #{self}.disconnect(
265
- serial_obj: 'required serial_obj returned from #connect method'
273
+ serial_obj: 'required - serial_obj returned from #connect method'
266
274
  )
267
275
 
276
+ # Print the AUTHOR(S) string for this module.
268
277
  #{self}.authors
269
278
  "
279
+ constants.sort
270
280
  end
271
281
  end
272
282
  end
@@ -538,91 +538,110 @@ module PWN
538
538
 
539
539
  public_class_method def self.help
540
540
  puts "USAGE:
541
- services_by_ips = #{self}.services_by_ips(
542
- api_key: 'required - shodan api key',
541
+ # Run services by ips and return its result
542
+ #{self}.services_by_ips(
543
+ api_key: 'required - required shodan api key',
543
544
  target_ips: 'required - comma-delimited list of ip addresses to target'
544
545
  )
545
546
 
546
- query_result_totals = PWN::Plugins::Shodan.query_result_totals(
547
- api_key: 'required shodan api key',
547
+ # Run query result totals and return its result
548
+ #{self}.query_result_totals(
549
+ api_key: 'required - required shodan api key',
548
550
  query: 'required - shodan search query',
549
551
  facets: 'optional - comma-separated list of properties to get summary information'
550
552
  )
551
553
 
552
- search_results = #{self}.search(
553
- api_key: 'required shodan api key',
554
+ # Run a search using the open session.
555
+ #{self}.search(
556
+ api_key: 'required - required shodan api key',
554
557
  query: 'required - shodan search query',
555
558
  facets: 'optional - comma-separated list of properties to get summary information'
556
559
  )
557
560
 
558
- tokens_result = #{self}.tokens(
559
- api_key: 'required shodan api key',
560
- query: 'required - shodan search query',
561
+ # Run tokens and return its result
562
+ #{self}.tokens(
563
+ api_key: 'required - required shodan api key',
564
+ query: 'required - shodan search query'
561
565
  )
562
566
 
563
- ports_shodan_crawls = #{self}.ports_shodan_crawls(
564
- api_key: 'required shodan api key'
567
+ # Run ports shodan crawls and return its result
568
+ #{self}.ports_shodan_crawls(
569
+ api_key: 'required - required shodan api key'
565
570
  )
566
571
 
567
- protocols = #{self}.list_on_demand_scan_protocols(
568
- api_key: 'required shodan api key'
572
+ # Run list on demand scan protocols and return its result
573
+ #{self}.list_on_demand_scan_protocols(
574
+ api_key: 'required - required shodan api key'
569
575
  )
570
576
 
571
- scan_network_response = #{self}.scan_network(
572
- api_key: 'required shodan api key',
577
+ # Run scan network and return its result
578
+ #{self}.scan_network(
579
+ api_key: 'required - required shodan api key',
573
580
  target_ips: 'required - comma-delimited list of ip addresses to target'
574
581
  )
575
582
 
576
- scan_internet_response = #{self}.scan_internet(
577
- api_key: 'required shodan api key',
583
+ # Run scan internet and return its result
584
+ #{self}.scan_internet(
585
+ api_key: 'required - required shodan api key',
578
586
  port: 'required - port to scan (see #ports_shodan_crawls for list)',
579
587
  protocol: 'required - supported shodan protocol (see #list_on_demand_scan_protocols for list)'
580
588
  )
581
589
 
582
- scan_status_result = #{self}.scan_status(
583
- api_key: 'required shodan api key',
584
- scan_id: 'required - unique ID returned by #scan_network',
590
+ # Run scan status and return its result
591
+ #{self}.scan_status(
592
+ api_key: 'required - required shodan api key',
593
+ scan_id: 'required - unique ID returned by #scan_network'
585
594
  )
586
595
 
587
- services_shodan_crawls = #{self}.services_shodan_crawls(
588
- api_key: 'required shodan api key'
596
+ # Run services shodan crawls and return its result
597
+ #{self}.services_shodan_crawls(
598
+ api_key: 'required - required shodan api key'
589
599
  )
590
600
 
591
- saved_search_queries_result = #{self}.saved_search_queries(
592
- api_key: 'required shodan api key',
601
+ # Run saved search queries and return its result
602
+ #{self}.saved_search_queries(
603
+ api_key: 'required - required shodan api key',
593
604
  page: 'optional - page number to iterate over results (each page contains 10 items)',
594
605
  sort: 'optional - sort results by available parameters :votes|:timestamp',
595
606
  order: 'optional - sort :asc|:desc (ascending or descending)'
596
607
  )
597
608
 
598
- most_popular_tags_result = #{self}.most_popular_tags(
599
- api_key: 'required shodan api key',
609
+ # Run most popular tags and return its result
610
+ #{self}.most_popular_tags(
611
+ api_key: 'required - required shodan api key',
600
612
  result_count: 'optional - number of results to return (defaults to 10)'
601
613
  )
602
614
 
603
- my_profile = #{self}.my_profile(
604
- api_key: 'required shodan api key'
615
+ # Run my profile and return its result
616
+ #{self}.my_profile(
617
+ api_key: 'required - required shodan api key'
605
618
  )
606
619
 
607
- my_pub_ip = #{self}.my_pub_ip(
608
- api_key: 'required shodan api key'
620
+ # Run my pub ip and return its result
621
+ #{self}.my_pub_ip(
622
+ api_key: 'required - required shodan api key'
609
623
  )
610
624
 
611
- api_info = #{self}.api_info(
612
- api_key: 'required shodan api key'
625
+ # Run api info and return its result
626
+ #{self}.api_info(
627
+ api_key: 'required - required shodan api key'
613
628
  )
614
629
 
615
- honeypot_probability_scores = #{self}.honeypot_probability_scores(
616
- api_key: 'required shodan api key',
630
+ # Run honeypot probability scores and return its result
631
+ #{self}.honeypot_probability_scores(
632
+ api_key: 'required - required shodan api key',
617
633
  target_ips: 'required - comma-delimited list of ip addresses to target'
618
634
  )
619
635
 
620
- uri_arr = #{self}.get_uris(
636
+ # Run get uris and return its result
637
+ #{self}.get_uris(
621
638
  search_results: 'required - search_results object returned from #search method'
622
639
  )
623
640
 
641
+ # Print the AUTHOR(S) string for this module.
624
642
  #{self}.authors
625
643
  "
644
+ constants.sort
626
645
  end
627
646
  end
628
647
  end
@@ -82,22 +82,27 @@ module PWN
82
82
 
83
83
  public_class_method def self.help
84
84
  puts "USAGE:
85
- slack_obj = #{self}.login(
86
- api_token: 'optional slack api token (will prompt if blank)'
85
+ # Run login and return its result
86
+ #{self}.login(
87
+ api_token: 'required - required slack api token'
87
88
  )
88
89
 
90
+ # Run post message and return its result
89
91
  #{self}.post_message(
90
- slack_obj: 'required slack_obj returned from login method',
91
- channel: 'required #channel to post message',
92
- message: 'required message to post'
92
+ slack_obj: 'required - required slack_obj returned from login method',
93
+ channel: 'required - required #channel to post message',
94
+ message: 'required - required message to post'
93
95
  )
94
96
 
97
+ # Run logout and return its result
95
98
  #{self}.logout(
96
- slack_obj: 'required slack_obj returned from login method'
99
+ slack_obj: 'required - required slack_obj returned from login method'
97
100
  )
98
101
 
102
+ # Print the AUTHOR(S) string for this module.
99
103
  #{self}.authors
100
104
  "
105
+ constants.sort
101
106
  end
102
107
  end
103
108
  end
@@ -23,6 +23,7 @@ module PWN
23
23
 
24
24
  protocol = opts[:protocol]
25
25
  protocol ||= :tcp
26
+ PWN::Plugins::PreflightChecker.require_cap_net_raw! if protocol.to_s.to_sym == :raw
26
27
 
27
28
  # TODO: Add proxy support
28
29
 
@@ -319,43 +320,51 @@ module PWN
319
320
 
320
321
  public_class_method def self.help
321
322
  puts "USAGE:
322
- sock_obj = #{self}.connect(
323
+ # Run connect and return its result
324
+ #{self}.connect(
323
325
  target: 'required - target host or ip',
324
326
  port: 'required - target port',
325
- protocol: 'optional - :tcp || :udp (defaults to tcp)',
327
+ protocol: 'optional - :tcp || :udp (defaults to :tcp)',
326
328
  tls: 'optional - boolean connect to target socket using TLS (defaults to false)'
327
329
  )
328
330
 
329
- port = #{self}.get_random_unused_port(
331
+ # Run get random unused port and return its result
332
+ #{self}.get_random_unused_port(
330
333
  server_ip: 'optional - target host or ip to check (Defaults to 127.0.0.1)',
331
334
  protocol: 'optional - :tcp || :udp (defaults to tcp)'
332
335
  )
333
336
 
337
+ # Run check port in use and return its result
334
338
  #{self}.check_port_in_use(
335
- server_ip: 'optional - target host or ip to check (Defaults to 127.0.0.1)',
336
339
  port: 'required - target port',
340
+ server_ip: 'optional - target host or ip to check (Defaults to 127.0.0.1)',
337
341
  protocol: 'optional - :tcp || :udp (defaults to tcp)'
338
342
  )
339
343
 
340
- listen_obj = #{self}.listen(
344
+ # Run listen and return its result
345
+ #{self}.listen(
341
346
  port: 'required - target port',
342
- server_ip: 'optional - target host or ip to listen (Defaults to 127.0.0.1')',
347
+ server_ip: 'optional - target host or ip to listen (Defaults to 127.0.0.1)',
343
348
  protocol: 'optional - :tcp || :udp (defaults to tcp)',
344
349
  tls: 'optional - boolean listen on TLS-enabled socket (defaults to false)',
345
350
  detach: 'optional - boolean to detach listener to background (defaults to false)'
346
351
  )
347
352
 
348
- cert_obj = #{self}.get_tls_cert(
353
+ # Run get tls cert and return its result
354
+ #{self}.get_tls_cert(
349
355
  target: 'required - target host or ip',
350
356
  port: 'optional - target port (defaults to 443)'
351
357
  )
352
358
 
353
- sock_obj = #{self}.disconnect(
359
+ # Run disconnect and return its result
360
+ #{self}.disconnect(
354
361
  sock_obj: 'required - sock_obj returned from #connect method'
355
362
  )
356
363
 
364
+ # Print the AUTHOR(S) string for this module.
357
365
  #{self}.authors
358
366
  "
367
+ constants.sort
359
368
  end
360
369
  end
361
370
  end
@@ -63,15 +63,18 @@ module PWN
63
63
  # Display Usage for this Module
64
64
 
65
65
  public_class_method def self.help
66
- puts %{USAGE:
66
+ puts "USAGE:
67
+ # Run crawl and return its result
67
68
  #{self}.crawl(
68
69
  target_fqdn: 'required - target fqdn to spider',
69
70
  results_path: 'required - path to save spider results',
70
71
  proxy: 'optional - proxy to spider through e.g. http://127.0.0.1:8080'
71
72
  )
72
73
 
74
+ # Print the AUTHOR(S) string for this module.
73
75
  #{self}.authors
74
- }
76
+ "
77
+ constants.sort
75
78
  end
76
79
  end
77
80
  end
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'open3'
4
+
5
+ module PWN
6
+ module Plugins
7
+ # sqlmap wrapper to pair with SAST SQL detection.
8
+ module Sqlmap
9
+ public_class_method def self.required_bins
10
+ %w[sqlmap]
11
+ end
12
+
13
+ public_class_method def self.run(opts = {})
14
+ PWN::Plugins::PreflightChecker.require_bin!(name: 'sqlmap')
15
+ url = opts[:url].to_s
16
+ raise 'ERROR: url is required' if url.empty?
17
+
18
+ cmd = ['sqlmap', '-u', url, '--batch', '--level', (opts[:level] || 1).to_s]
19
+ cmd += ['--data', opts[:data].to_s] if opts[:data]
20
+ cmd << '--dbs' if opts[:dbs]
21
+ stdout, stderr, status = Open3.capture3(*cmd)
22
+ { stdout: stdout, stderr: stderr, exit: status.exitstatus }
23
+ end
24
+
25
+ public_class_method def self.authors
26
+ "AUTHOR(S):\n 0day Inc. <support@0dayinc.com>\n"
27
+ end
28
+
29
+ public_class_method def self.help
30
+ puts "USAGE:
31
+ # List host binaries this module expects to be installed.
32
+ #{self}.required_bins
33
+
34
+ # Run run and return its result
35
+ #{self}.run(
36
+ url: 'required - HTTP(S) URL',
37
+ level: 'optional - level value consumed by #run',
38
+ data: 'optional - data value consumed by #run',
39
+ dbs: 'optional - dbs value consumed by #run'
40
+ )
41
+
42
+ # Print the AUTHOR(S) string for this module.
43
+ #{self}.authors
44
+ "
45
+ constants.sort
46
+ end
47
+ end
48
+ end
49
+ end
@@ -40,12 +40,15 @@ module PWN
40
40
 
41
41
  public_class_method def self.help
42
42
  puts "USAGE:
43
+ # Run generate and return its result
43
44
  #{self}.generate(
44
45
  count: 'required - number of SSN numbers to generate'
45
46
  )
46
47
 
48
+ # Print the AUTHOR(S) string for this module.
47
49
  #{self}.authors
48
50
  "
51
+ constants.sort
49
52
  end
50
53
  end
51
54
  end
@@ -60,20 +60,17 @@ module PWN
60
60
 
61
61
  public_class_method def self.help
62
62
  puts "USAGE:
63
+ # arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]
63
64
  #{self}.fill(
64
- enumerable_array. => 'required array for proper thread pool assignment',
65
- max_threads: 'optional number of threads in the thread pool (defaults to 9)',
66
- detach: 'optional boolean to detach threads (defaults to false)'
65
+ enumerable_array: 'required - required array for proper thread pool assignment',
66
+ max_threads: 'optional - optional number of threads in the thread pool (defaults to 9)',
67
+ detach: 'optional - optional boolean to detach threads (defaults to false)'
67
68
  )
68
69
 
69
- Example:
70
- arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]
71
- #{self}.fill(enumerable_array: arr, max_threads: 9) do |integer|
72
- puts integer
73
- end
74
-
70
+ # Print the AUTHOR(S) string for this module.
75
71
  #{self}.authors
76
72
  "
73
+ constants.sort
77
74
  end
78
75
  end
79
76
  end