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.
- checksums.yaml +4 -4
- data/Gemfile +2 -2
- data/documentation/Installation.md +1 -0
- data/etc/default_skills/exploitdev/SKILL.md +38 -0
- data/etc/default_skills/pwn/ai/agent/extrospection/osint/bridges/SKILL.md +30 -8
- data/etc/default_skills/pwn/ai/agent/extrospection/osint/social/SKILL.md +30 -8
- data/etc/default_skills/pwn/ai/agent/extrospection/osint/social/references/urls.md +1 -1
- data/etc/default_skills/pwn/ai/agent/extrospection/references/urls.md +0 -1
- data/etc/default_skills/pwn/memory_index/SKILL.md +0 -4
- data/etc/default_skills/pwn/plugins/aflplusplus/SKILL.md +49 -0
- data/etc/default_skills/pwn/plugins/android/SKILL.md +1 -0
- data/etc/default_skills/pwn/plugins/artifact_registry/SKILL.md +49 -0
- data/etc/default_skills/pwn/plugins/binary_parser/SKILL.md +54 -0
- data/etc/default_skills/pwn/plugins/credential_attack/SKILL.md +58 -0
- data/etc/default_skills/pwn/plugins/credential_attack/references/urls.md +3 -0
- data/etc/default_skills/pwn/plugins/exploit_db/SKILL.md +49 -0
- data/etc/default_skills/pwn/plugins/exploit_dev/SKILL.md +63 -0
- data/etc/default_skills/pwn/plugins/frida/SKILL.md +51 -0
- data/etc/default_skills/pwn/plugins/fuzz/SKILL.md +2 -0
- data/etc/default_skills/pwn/plugins/gdb/SKILL.md +53 -0
- data/etc/default_skills/pwn/plugins/jobs/SKILL.md +51 -0
- data/etc/default_skills/pwn/plugins/k8s/SKILL.md +51 -0
- data/etc/default_skills/pwn/plugins/nuclei/SKILL.md +50 -0
- data/etc/default_skills/pwn/plugins/preflight_checker/SKILL.md +59 -0
- data/etc/default_skills/pwn/plugins/process_tube/SKILL.md +53 -0
- data/etc/default_skills/pwn/plugins/radare2/SKILL.md +59 -0
- data/etc/default_skills/pwn/plugins/recon/SKILL.md +57 -0
- data/etc/default_skills/pwn/plugins/recon/references/urls.md +6 -0
- data/etc/default_skills/pwn/plugins/semgrep/SKILL.md +48 -0
- data/etc/default_skills/pwn/plugins/sqlmap/SKILL.md +48 -0
- data/etc/default_skills/pwn/plugins/transparent_browser/SKILL.md +0 -4
- data/etc/default_skills/pwn/plugins/volatility/SKILL.md +49 -0
- data/lib/pwn/ai/agent/assembly.rb +4 -1
- data/lib/pwn/ai/agent/btc.rb +4 -1
- data/lib/pwn/ai/agent/burp_suite.rb +5 -2
- data/lib/pwn/ai/agent/curriculum.rb +89 -30
- data/lib/pwn/ai/agent/dispatch.rb +27 -16
- data/lib/pwn/ai/agent/extrospection/osint/bridges.rb +9 -18
- data/lib/pwn/ai/agent/extrospection/osint/social.rb +9 -18
- data/lib/pwn/ai/agent/extrospection.rb +185 -60
- data/lib/pwn/ai/agent/gqrx.rb +4 -1
- data/lib/pwn/ai/agent/hacker_one.rb +5 -2
- data/lib/pwn/ai/agent/learning.rb +142 -25
- data/lib/pwn/ai/agent/loop.rb +53 -46
- data/lib/pwn/ai/agent/metrics.rb +133 -23
- data/lib/pwn/ai/agent/mistakes.rb +126 -17
- data/lib/pwn/ai/agent/open_goal.rb +25 -9
- data/lib/pwn/ai/agent/policy.rb +158 -18
- data/lib/pwn/ai/agent/prompt_builder.rb +21 -11
- data/lib/pwn/ai/agent/prompt_cache.rb +44 -13
- data/lib/pwn/ai/agent/reflect.rb +9 -5
- data/lib/pwn/ai/agent/registry.rb +65 -12
- data/lib/pwn/ai/agent/result.rb +19 -10
- data/lib/pwn/ai/agent/reward.rb +150 -32
- data/lib/pwn/ai/agent/sast.rb +4 -1
- data/lib/pwn/ai/agent/swarm.rb +72 -36
- data/lib/pwn/ai/agent/task_summarizer.rb +165 -36
- data/lib/pwn/ai/agent/tool_guard.rb +105 -6
- data/lib/pwn/ai/agent/tools/sessions.rb +8 -1
- data/lib/pwn/ai/agent/transparent_browser.rb +4 -1
- data/lib/pwn/ai/agent/turn_finalizer.rb +41 -21
- data/lib/pwn/ai/agent/vuln_gen.rb +6 -3
- data/lib/pwn/ai/agent.rb +4 -0
- data/lib/pwn/ai/anthropic.rb +41 -7
- data/lib/pwn/ai/gemini.rb +21 -11
- data/lib/pwn/ai/grok.rb +44 -6
- data/lib/pwn/ai/http_retry.rb +40 -12
- data/lib/pwn/ai/ollama.rb +19 -10
- data/lib/pwn/ai/open_ai.rb +81 -30
- data/lib/pwn/ai/open_web_ui.rb +20 -14
- data/lib/pwn/ai/red_team/agent_protocol_abuse.rb +7 -1
- data/lib/pwn/ai/red_team/data_and_model_poisoning.rb +7 -1
- data/lib/pwn/ai/red_team/excessive_agency.rb +7 -1
- data/lib/pwn/ai/red_team/hidden_context_exposure.rb +7 -1
- data/lib/pwn/ai/red_team/insecure_output_handling.rb +7 -1
- data/lib/pwn/ai/red_team/jailbreak.rb +7 -1
- data/lib/pwn/ai/red_team/memory_poisoning.rb +7 -1
- data/lib/pwn/ai/red_team/multimodal_injection.rb +7 -1
- data/lib/pwn/ai/red_team/overreliance.rb +7 -1
- data/lib/pwn/ai/red_team/payload_splitting.rb +7 -1
- data/lib/pwn/ai/red_team/prompt_injection.rb +7 -1
- data/lib/pwn/ai/red_team/rag_poisoning.rb +7 -1
- data/lib/pwn/ai/red_team/sensitive_information_disclosure.rb +7 -1
- data/lib/pwn/ai/red_team/supply_chain.rb +7 -1
- data/lib/pwn/ai/red_team/system_prompt_extraction.rb +7 -1
- data/lib/pwn/ai/red_team/test_case_engine.rb +12 -9
- data/lib/pwn/ai/red_team/token_smuggling.rb +7 -1
- data/lib/pwn/ai/red_team/unbounded_consumption.rb +7 -1
- data/lib/pwn/ai/red_team/vector_and_embedding_weaknesses.rb +7 -1
- data/lib/pwn/ai/red_team.rb +4 -0
- data/lib/pwn/ai.rb +4 -0
- data/lib/pwn/aws/acm.rb +5 -2
- data/lib/pwn/aws/api_gateway.rb +10 -7
- data/lib/pwn/aws/app_stream.rb +5 -2
- data/lib/pwn/aws/application_auto_scaling.rb +5 -2
- data/lib/pwn/aws/application_discovery_service.rb +5 -2
- data/lib/pwn/aws/auto_scaling.rb +5 -2
- data/lib/pwn/aws/batch.rb +5 -2
- data/lib/pwn/aws/budgets.rb +5 -2
- data/lib/pwn/aws/cloud_formation.rb +5 -2
- data/lib/pwn/aws/cloud_front.rb +7 -4
- data/lib/pwn/aws/cloud_hsm.rb +5 -2
- data/lib/pwn/aws/cloud_search.rb +5 -2
- data/lib/pwn/aws/cloud_search_domain.rb +5 -2
- data/lib/pwn/aws/cloud_trail.rb +5 -2
- data/lib/pwn/aws/cloud_watch.rb +5 -2
- data/lib/pwn/aws/cloud_watch_events.rb +5 -2
- data/lib/pwn/aws/cloud_watch_logs.rb +5 -2
- data/lib/pwn/aws/code_build.rb +5 -2
- data/lib/pwn/aws/code_commit.rb +5 -2
- data/lib/pwn/aws/code_deploy.rb +5 -2
- data/lib/pwn/aws/code_pipeline.rb +5 -2
- data/lib/pwn/aws/cognito_identity.rb +5 -2
- data/lib/pwn/aws/cognito_identity_provider.rb +5 -2
- data/lib/pwn/aws/cognito_sync.rb +5 -2
- data/lib/pwn/aws/config_service.rb +5 -2
- data/lib/pwn/aws/data_pipleline.rb +5 -2
- data/lib/pwn/aws/database_migration_service.rb +5 -2
- data/lib/pwn/aws/device_farm.rb +5 -2
- data/lib/pwn/aws/direct_connect.rb +5 -2
- data/lib/pwn/aws/directory_service.rb +5 -2
- data/lib/pwn/aws/dynamo_db.rb +5 -2
- data/lib/pwn/aws/dynamo_db_streams.rb +5 -2
- data/lib/pwn/aws/ec2.rb +5 -2
- data/lib/pwn/aws/ecr.rb +5 -2
- data/lib/pwn/aws/ecs.rb +5 -2
- data/lib/pwn/aws/efs.rb +5 -2
- data/lib/pwn/aws/elasti_cache.rb +5 -2
- data/lib/pwn/aws/elastic_beanstalk.rb +8 -5
- data/lib/pwn/aws/elastic_load_balancing.rb +5 -2
- data/lib/pwn/aws/elastic_load_balancing_v2.rb +6 -3
- data/lib/pwn/aws/elastic_transcoder.rb +5 -2
- data/lib/pwn/aws/elasticsearch_service.rb +5 -2
- data/lib/pwn/aws/emr.rb +5 -2
- data/lib/pwn/aws/firehose.rb +5 -2
- data/lib/pwn/aws/game_lift.rb +5 -2
- data/lib/pwn/aws/glacier.rb +6 -3
- data/lib/pwn/aws/health.rb +5 -2
- data/lib/pwn/aws/iam.rb +10 -4
- data/lib/pwn/aws/import_export.rb +5 -2
- data/lib/pwn/aws/inspector.rb +5 -2
- data/lib/pwn/aws/iot.rb +5 -2
- data/lib/pwn/aws/iot_data_plane.rb +5 -2
- data/lib/pwn/aws/kinesis.rb +5 -2
- data/lib/pwn/aws/kinesis_analytics.rb +5 -2
- data/lib/pwn/aws/kms.rb +5 -2
- data/lib/pwn/aws/lambda.rb +5 -2
- data/lib/pwn/aws/lambda_preview.rb +5 -2
- data/lib/pwn/aws/lex.rb +5 -2
- data/lib/pwn/aws/lightsail.rb +5 -2
- data/lib/pwn/aws/machine_learning.rb +5 -2
- data/lib/pwn/aws/marketplace_commerce_analytics.rb +5 -2
- data/lib/pwn/aws/marketplace_metering.rb +5 -2
- data/lib/pwn/aws/ops_works.rb +5 -2
- data/lib/pwn/aws/ops_works_cm.rb +5 -2
- data/lib/pwn/aws/pinpoint.rb +5 -2
- data/lib/pwn/aws/polly.rb +5 -2
- data/lib/pwn/aws/rds.rb +5 -2
- data/lib/pwn/aws/redshift.rb +5 -2
- data/lib/pwn/aws/rekognition.rb +5 -2
- data/lib/pwn/aws/route53.rb +5 -2
- data/lib/pwn/aws/route53_domains.rb +5 -2
- data/lib/pwn/aws/s3.rb +5 -2
- data/lib/pwn/aws/service_catalog.rb +5 -2
- data/lib/pwn/aws/ses.rb +5 -2
- data/lib/pwn/aws/shield.rb +5 -2
- data/lib/pwn/aws/simple_db.rb +5 -2
- data/lib/pwn/aws/sms.rb +5 -2
- data/lib/pwn/aws/snowball.rb +5 -2
- data/lib/pwn/aws/sns.rb +5 -2
- data/lib/pwn/aws/sqs.rb +5 -2
- data/lib/pwn/aws/ssm.rb +5 -2
- data/lib/pwn/aws/states.rb +5 -2
- data/lib/pwn/aws/storage_gateway.rb +5 -2
- data/lib/pwn/aws/sts.rb +4 -1
- data/lib/pwn/aws/support.rb +5 -2
- data/lib/pwn/aws/swf.rb +5 -2
- data/lib/pwn/aws/waf.rb +5 -2
- data/lib/pwn/aws/waf_regional.rb +5 -2
- data/lib/pwn/aws/workspaces.rb +5 -2
- data/lib/pwn/aws/x_ray.rb +5 -2
- data/lib/pwn/aws.rb +4 -0
- data/lib/pwn/banner/anon.rb +3 -0
- data/lib/pwn/banner/bubble.rb +3 -0
- data/lib/pwn/banner/cheshire.rb +3 -0
- data/lib/pwn/banner/code_cave.rb +3 -0
- data/lib/pwn/banner/dont_panic.rb +3 -0
- data/lib/pwn/banner/f_society.rb +3 -0
- data/lib/pwn/banner/fork_bomb.rb +3 -0
- data/lib/pwn/banner/jmp_esp.rb +3 -0
- data/lib/pwn/banner/matrix.rb +5 -1
- data/lib/pwn/banner/ninja.rb +3 -0
- data/lib/pwn/banner/off_the_air.rb +3 -0
- data/lib/pwn/banner/pirate.rb +3 -0
- data/lib/pwn/banner/radare2.rb +3 -0
- data/lib/pwn/banner/radare2_ai.rb +3 -0
- data/lib/pwn/banner/white_rabbit.rb +3 -0
- data/lib/pwn/banner.rb +6 -2
- data/lib/pwn/blockchain/btc.rb +8 -3
- data/lib/pwn/blockchain/eth.rb +10 -3
- data/lib/pwn/blockchain.rb +4 -0
- data/lib/pwn/bounty/lifecycle_authz_replay.rb +46 -27
- data/lib/pwn/bounty.rb +4 -0
- data/lib/pwn/config.rb +79 -13
- data/lib/pwn/cron.rb +297 -20
- data/lib/pwn/driver.rb +2 -18
- data/lib/pwn/ffi/adalm_pluto.rb +65 -11
- data/lib/pwn/ffi/fftw.rb +31 -6
- data/lib/pwn/ffi/hack_rf.rb +59 -8
- data/lib/pwn/ffi/liquid.rb +63 -10
- data/lib/pwn/ffi/rtl_sdr.rb +35 -5
- data/lib/pwn/ffi/soapy_sdr.rb +60 -10
- data/lib/pwn/ffi/stdio.rb +7 -8
- data/lib/pwn/ffi/volk.rb +36 -7
- data/lib/pwn/ffi.rb +12 -0
- data/lib/pwn/memory.rb +136 -16
- data/lib/pwn/memory_index.rb +34 -19
- data/lib/pwn/migrate.rb +34 -24
- data/lib/pwn/module_skills.rb +39 -8
- data/lib/pwn/plugins/aflplusplus.rb +72 -0
- data/lib/pwn/plugins/android.rb +71 -245
- data/lib/pwn/plugins/artifact_registry.rb +71 -0
- data/lib/pwn/plugins/assembly.rb +9 -4
- data/lib/pwn/plugins/authentication_helper.rb +8 -5
- data/lib/pwn/plugins/baresip.rb +59 -12
- data/lib/pwn/plugins/basic_auth.rb +9 -3
- data/lib/pwn/plugins/beef.rb +28 -18
- data/lib/pwn/plugins/binary_parser.rb +133 -0
- data/lib/pwn/plugins/black_duck_binary_analysis.rb +63 -39
- data/lib/pwn/plugins/burp_suite.rb +98 -68
- data/lib/pwn/plugins/bus_pirate.rb +15 -8
- data/lib/pwn/plugins/char.rb +33 -3
- data/lib/pwn/plugins/credential_attack.rb +158 -0
- data/lib/pwn/plugins/credit_card.rb +6 -1
- data/lib/pwn/plugins/dao_ldap.rb +19 -13
- data/lib/pwn/plugins/dao_mongo.rb +11 -5
- data/lib/pwn/plugins/dao_postgres.rb +28 -19
- data/lib/pwn/plugins/dao_sqlite3.rb +15 -6
- data/lib/pwn/plugins/defect_dojo.rb +38 -22
- data/lib/pwn/plugins/detect_os.rb +5 -0
- data/lib/pwn/plugins/ein.rb +3 -0
- data/lib/pwn/plugins/exploit_db.rb +69 -0
- data/lib/pwn/plugins/exploit_dev.rb +330 -0
- data/lib/pwn/plugins/file_fu.rb +11 -8
- data/lib/pwn/plugins/frida.rb +112 -0
- data/lib/pwn/plugins/fuzz.rb +42 -6
- data/lib/pwn/plugins/gdb.rb +115 -0
- data/lib/pwn/plugins/git.rb +19 -14
- data/lib/pwn/plugins/github.rb +38 -15
- data/lib/pwn/plugins/google_workspace.rb +188 -45
- data/lib/pwn/plugins/hacker_one.rb +159 -35
- data/lib/pwn/plugins/hunter.rb +6 -3
- data/lib/pwn/plugins/ip_info.rb +9 -4
- data/lib/pwn/plugins/irc.rb +28 -15
- data/lib/pwn/plugins/jenkins.rb +65 -57
- data/lib/pwn/plugins/jira_data_center.rb +30 -22
- data/lib/pwn/plugins/jobs.rb +110 -0
- data/lib/pwn/plugins/json_pathify.rb +9 -5
- data/lib/pwn/plugins/k8s.rb +73 -0
- data/lib/pwn/plugins/log.rb +113 -13
- data/lib/pwn/plugins/mail_agent.rb +87 -79
- data/lib/pwn/plugins/metasploit.rb +11 -6
- data/lib/pwn/plugins/monkey_patch.rb +3 -0
- data/lib/pwn/plugins/msr206.rb +42 -28
- data/lib/pwn/plugins/nessus_cloud.rb +44 -4
- data/lib/pwn/plugins/nexpose_vuln_scan.rb +40 -24
- data/lib/pwn/plugins/nmap_it.rb +14 -34
- data/lib/pwn/plugins/nuclei.rb +90 -0
- data/lib/pwn/plugins/oauth2.rb +11 -5
- data/lib/pwn/plugins/ocr.rb +3 -0
- data/lib/pwn/plugins/open_api.rb +5 -2
- data/lib/pwn/plugins/openvas.rb +33 -25
- data/lib/pwn/plugins/packet.rb +152 -31
- data/lib/pwn/plugins/pdf_parse.rb +5 -2
- data/lib/pwn/plugins/pony.rb +86 -1
- data/lib/pwn/plugins/preflight_checker.rb +166 -0
- data/lib/pwn/plugins/process_tube.rb +139 -0
- data/lib/pwn/plugins/ps.rb +7 -1
- data/lib/pwn/plugins/pwn_logger.rb +6 -2
- data/lib/pwn/plugins/rabbit_mq.rb +12 -7
- data/lib/pwn/plugins/radare2.rb +253 -0
- data/lib/pwn/plugins/recon.rb +196 -0
- data/lib/pwn/plugins/repl.rb +122 -1
- data/lib/pwn/plugins/scannable_codes.rb +5 -1
- data/lib/pwn/plugins/semgrep.rb +61 -0
- data/lib/pwn/plugins/serial.rb +24 -14
- data/lib/pwn/plugins/shodan.rb +54 -35
- data/lib/pwn/plugins/slack_client.rb +11 -6
- data/lib/pwn/plugins/sock.rb +17 -8
- data/lib/pwn/plugins/spider.rb +5 -2
- data/lib/pwn/plugins/sqlmap.rb +49 -0
- data/lib/pwn/plugins/ssn.rb +3 -0
- data/lib/pwn/plugins/thread_pool.rb +6 -9
- data/lib/pwn/plugins/tor.rb +9 -4
- data/lib/pwn/plugins/transparent_browser.rb +62 -107
- data/lib/pwn/plugins/tty_spinner.rb +16 -2
- data/lib/pwn/plugins/twitter_api.rb +6 -2
- data/lib/pwn/plugins/uri_scheme.rb +4 -1
- data/lib/pwn/plugins/vault.rb +12 -3
- data/lib/pwn/plugins/vin.rb +24 -12
- data/lib/pwn/plugins/voice.rb +7 -2
- data/lib/pwn/plugins/volatility.rb +67 -0
- data/lib/pwn/plugins/vsphere.rb +9 -5
- data/lib/pwn/plugins/xxd.rb +12 -43
- data/lib/pwn/plugins/zaproxy.rb +30 -16
- data/lib/pwn/plugins.rb +22 -0
- data/lib/pwn/reports/ai_red_team.rb +6 -2
- data/lib/pwn/reports/csv.rb +8 -1
- data/lib/pwn/reports/fuzz.rb +5 -2
- data/lib/pwn/reports/html.rb +8 -1
- data/lib/pwn/reports/html_footer.rb +4 -3
- data/lib/pwn/reports/html_header.rb +6 -2
- data/lib/pwn/reports/json.rb +8 -1
- data/lib/pwn/reports/markdown.rb +8 -1
- data/lib/pwn/reports/pdf.rb +8 -1
- data/lib/pwn/reports/phone.rb +5 -2
- data/lib/pwn/reports/sast.rb +6 -2
- data/lib/pwn/reports/uri_buster.rb +5 -2
- data/lib/pwn/reports/xml.rb +8 -1
- data/lib/pwn/reports.rb +19 -0
- data/lib/pwn/sast/amqp_connect_as_guest.rb +9 -3
- data/lib/pwn/sast/apache_file_system_util_api.rb +9 -3
- data/lib/pwn/sast/aws.rb +9 -3
- data/lib/pwn/sast/banned_function_calls_c.rb +9 -3
- data/lib/pwn/sast/base64.rb +9 -3
- data/lib/pwn/sast/beef_hook.rb +9 -3
- data/lib/pwn/sast/cmd_execution_go_lang.rb +9 -3
- data/lib/pwn/sast/cmd_execution_java.rb +9 -3
- data/lib/pwn/sast/cmd_execution_python.rb +9 -3
- data/lib/pwn/sast/cmd_execution_ruby.rb +9 -3
- data/lib/pwn/sast/cmd_execution_scala.rb +9 -3
- data/lib/pwn/sast/csrf.rb +9 -3
- data/lib/pwn/sast/deserial_java.rb +9 -3
- data/lib/pwn/sast/emoticon.rb +9 -3
- data/lib/pwn/sast/eval.rb +9 -3
- data/lib/pwn/sast/factory.rb +9 -3
- data/lib/pwn/sast/http_authorization_header.rb +9 -3
- data/lib/pwn/sast/inner_html.rb +9 -3
- data/lib/pwn/sast/keystore.rb +9 -3
- data/lib/pwn/sast/local_storage.rb +9 -3
- data/lib/pwn/sast/location_hash.rb +9 -3
- data/lib/pwn/sast/log4j.rb +9 -3
- data/lib/pwn/sast/logger.rb +9 -3
- data/lib/pwn/sast/md5.rb +9 -3
- data/lib/pwn/sast/outer_html.rb +9 -3
- data/lib/pwn/sast/padding_oracle.rb +9 -3
- data/lib/pwn/sast/password.rb +9 -3
- data/lib/pwn/sast/php_input_mechanisms.rb +9 -3
- data/lib/pwn/sast/php_type_juggling.rb +9 -3
- data/lib/pwn/sast/pom_version.rb +9 -3
- data/lib/pwn/sast/port.rb +9 -3
- data/lib/pwn/sast/post_message.rb +9 -3
- data/lib/pwn/sast/private_key.rb +9 -3
- data/lib/pwn/sast/redirect.rb +9 -3
- data/lib/pwn/sast/redos.rb +9 -3
- data/lib/pwn/sast/shell.rb +9 -3
- data/lib/pwn/sast/signature.rb +9 -3
- data/lib/pwn/sast/sql.rb +9 -3
- data/lib/pwn/sast/ssl.rb +9 -3
- data/lib/pwn/sast/sudo.rb +9 -3
- data/lib/pwn/sast/task_tag.rb +9 -3
- data/lib/pwn/sast/test_case_engine.rb +11 -7
- data/lib/pwn/sast/throw_errors.rb +9 -3
- data/lib/pwn/sast/token.rb +9 -3
- data/lib/pwn/sast/type_script_type_juggling.rb +9 -3
- data/lib/pwn/sast/use_after_free.rb +9 -3
- data/lib/pwn/sast/version.rb +9 -3
- data/lib/pwn/sast/window_location_hash.rb +9 -3
- data/lib/pwn/sast.rb +4 -0
- data/lib/pwn/sdr/decoder/adsb.rb +36 -5
- data/lib/pwn/sdr/decoder/apt.rb +9 -6
- data/lib/pwn/sdr/decoder/base.rb +74 -22
- data/lib/pwn/sdr/decoder/bluetooth.rb +17 -5
- data/lib/pwn/sdr/decoder/dect.rb +12 -3
- data/lib/pwn/sdr/decoder/dsp.rb +229 -39
- data/lib/pwn/sdr/decoder/flex.rb +59 -11
- data/lib/pwn/sdr/decoder/gps.rb +12 -3
- data/lib/pwn/sdr/decoder/gsm.rb +24 -4
- data/lib/pwn/sdr/decoder/iridium.rb +12 -3
- data/lib/pwn/sdr/decoder/lora.rb +13 -4
- data/lib/pwn/sdr/decoder/lte.rb +27 -3
- data/lib/pwn/sdr/decoder/morse.rb +12 -3
- data/lib/pwn/sdr/decoder/p25.rb +12 -3
- data/lib/pwn/sdr/decoder/pager.rb +8 -5
- data/lib/pwn/sdr/decoder/pocsag.rb +29 -9
- data/lib/pwn/sdr/decoder/rds.rb +14 -8
- data/lib/pwn/sdr/decoder/rfid.rb +12 -3
- data/lib/pwn/sdr/decoder/rtl433.rb +12 -3
- data/lib/pwn/sdr/decoder/rtty.rb +8 -5
- data/lib/pwn/sdr/decoder/wifi.rb +12 -3
- data/lib/pwn/sdr/decoder/zigbee.rb +12 -3
- data/lib/pwn/sdr/decoder.rb +9 -0
- data/lib/pwn/sdr/flipper_zero.rb +17 -10
- data/lib/pwn/sdr/frequency_allocation.rb +4 -1
- data/lib/pwn/sdr/gqrx.rb +178 -119
- data/lib/pwn/sdr/rfidler.rb +4 -1
- data/lib/pwn/sdr/son_micro_rfid.rb +37 -24
- data/lib/pwn/sdr.rb +14 -0
- data/lib/pwn/sessions.rb +86 -16
- data/lib/pwn/setup.rb +106 -37
- data/lib/pwn/version.rb +1 -1
- data/lib/pwn/www/app_cobalt_io.rb +11 -5
- data/lib/pwn/www/bing.rb +10 -5
- data/lib/pwn/www/bug_crowd.rb +11 -5
- data/lib/pwn/www/checkip.rb +8 -4
- data/lib/pwn/www/coinbase_pro.rb +11 -5
- data/lib/pwn/www/duckduckgo.rb +12 -6
- data/lib/pwn/www/facebook.rb +11 -5
- data/lib/pwn/www/github.rb +11 -5
- data/lib/pwn/www/google.rb +11 -5
- data/lib/pwn/www/hacker_one.rb +20 -9
- data/lib/pwn/www/linkedin.rb +11 -5
- data/lib/pwn/www/pandora.rb +11 -5
- data/lib/pwn/www/pastebin.rb +9 -4
- data/lib/pwn/www/paypal.rb +19 -11
- data/lib/pwn/www/synack.rb +11 -5
- data/lib/pwn/www/torch.rb +13 -8
- data/lib/pwn/www/trading_view.rb +11 -5
- data/lib/pwn/www/twitter.rb +11 -5
- data/lib/pwn/www/uber.rb +11 -5
- data/lib/pwn/www/upwork.rb +11 -5
- data/lib/pwn/www/wayback_machine.rb +12 -6
- data/lib/pwn/www/youtube.rb +10 -5
- data/lib/pwn/www.rb +4 -0
- data/spec/conventions_spec.rb +118 -2
- data/spec/integration/help_contract_spec.rb +2 -0
- data/spec/lib/pwn/ai/agent/reward_spec.rb +9 -0
- data/spec/lib/pwn/plugins/aflplusplus_spec.rb +13 -0
- data/spec/lib/pwn/plugins/artifact_registry_spec.rb +13 -0
- data/spec/lib/pwn/plugins/binary_parser_spec.rb +21 -0
- data/spec/lib/pwn/plugins/credential_attack_spec.rb +13 -0
- data/spec/lib/pwn/plugins/exploit_db_spec.rb +13 -0
- data/spec/lib/pwn/plugins/exploit_dev_spec.rb +23 -0
- data/spec/lib/pwn/plugins/frida_spec.rb +13 -0
- data/spec/lib/pwn/plugins/gdb_spec.rb +13 -0
- data/spec/lib/pwn/plugins/jobs_spec.rb +13 -0
- data/spec/lib/pwn/plugins/k8s_spec.rb +13 -0
- data/spec/lib/pwn/plugins/nuclei_spec.rb +13 -0
- data/spec/lib/pwn/plugins/preflight_checker_spec.rb +23 -0
- data/spec/lib/pwn/plugins/process_tube_spec.rb +13 -0
- data/spec/lib/pwn/plugins/radare2_spec.rb +13 -0
- data/spec/lib/pwn/plugins/recon_spec.rb +26 -0
- data/spec/lib/pwn/plugins/semgrep_spec.rb +13 -0
- data/spec/lib/pwn/plugins/sqlmap_spec.rb +13 -0
- data/spec/lib/pwn/plugins/volatility_spec.rb +13 -0
- data/spec/lib/pwn/req_queue_spec.rb +168 -0
- data/third_party/pwn_rdoc.jsonl +160 -5
- metadata +63 -7
- data/etc/default_skills/pwn/memory_index/references/urls.md +0 -4
- data/etc/default_skills/pwn/plugins/transparent_browser/references/urls.md +0 -3
data/lib/pwn/plugins/repl.rb
CHANGED
|
@@ -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: '
|
|
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
|
|
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
|
data/lib/pwn/plugins/serial.rb
CHANGED
|
@@ -232,41 +232,51 @@ module PWN
|
|
|
232
232
|
|
|
233
233
|
public_class_method def self.help
|
|
234
234
|
puts "USAGE:
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
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
|
-
|
|
244
|
-
|
|
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
|
-
|
|
248
|
-
|
|
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
|
|
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
|
-
|
|
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
|
data/lib/pwn/plugins/shodan.rb
CHANGED
|
@@ -538,91 +538,110 @@ module PWN
|
|
|
538
538
|
|
|
539
539
|
public_class_method def self.help
|
|
540
540
|
puts "USAGE:
|
|
541
|
-
|
|
542
|
-
|
|
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
|
-
|
|
547
|
-
|
|
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
|
-
|
|
553
|
-
|
|
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
|
-
|
|
559
|
-
|
|
560
|
-
|
|
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
|
-
|
|
564
|
-
|
|
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
|
|
568
|
-
|
|
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
|
-
|
|
572
|
-
|
|
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
|
-
|
|
577
|
-
|
|
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
|
-
|
|
583
|
-
|
|
584
|
-
|
|
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
|
-
|
|
588
|
-
|
|
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
|
-
|
|
592
|
-
|
|
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
|
-
|
|
599
|
-
|
|
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
|
-
|
|
604
|
-
|
|
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
|
-
|
|
608
|
-
|
|
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
|
-
|
|
612
|
-
|
|
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
|
-
|
|
616
|
-
|
|
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
|
-
|
|
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
|
-
|
|
86
|
-
|
|
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
|
data/lib/pwn/plugins/sock.rb
CHANGED
|
@@ -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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
data/lib/pwn/plugins/spider.rb
CHANGED
|
@@ -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
|
|
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
|
data/lib/pwn/plugins/ssn.rb
CHANGED
|
@@ -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
|
|
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
|
-
|
|
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
|