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/packet.rb
CHANGED
|
@@ -1085,6 +1085,7 @@ module PWN
|
|
|
1085
1085
|
# )
|
|
1086
1086
|
|
|
1087
1087
|
public_class_method def self.send(opts = {})
|
|
1088
|
+
PWN::Plugins::PreflightChecker.require_cap_net_raw! if defined?(PWN::Plugins::PreflightChecker)
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
45
|
-
|
|
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
|
data/lib/pwn/plugins/pony.rb
CHANGED
|
@@ -276,9 +276,94 @@ module PWN
|
|
|
276
276
|
|
|
277
277
|
public_class_method def self.help
|
|
278
278
|
puts "USAGE:
|
|
279
|
-
|
|
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,166 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module PWN
|
|
4
|
+
module Plugins
|
|
5
|
+
# Plugin/binary/capability preflight. Plugins declare required_bins /
|
|
6
|
+
# required_caps; HOST summaries list degraded modules without autoloading
|
|
7
|
+
# the whole plugin tree.
|
|
8
|
+
module PreflightChecker
|
|
9
|
+
class MissingBinary < StandardError; end
|
|
10
|
+
class MissingCapability < StandardError; end
|
|
11
|
+
class MissingService < StandardError; end
|
|
12
|
+
|
|
13
|
+
PLUGIN_DEPS = {
|
|
14
|
+
'PWN::Plugins::Radare2' => { bins: %w[r2] },
|
|
15
|
+
'PWN::Plugins::GDB' => { bins: %w[gdb] },
|
|
16
|
+
'PWN::Plugins::Nuclei' => { bins: %w[nuclei] },
|
|
17
|
+
'PWN::Plugins::Sqlmap' => { bins: %w[sqlmap] },
|
|
18
|
+
'PWN::Plugins::Frida' => { bins: %w[frida] },
|
|
19
|
+
'PWN::Plugins::AFLplusplus' => { bins: %w[afl-fuzz] },
|
|
20
|
+
'PWN::Plugins::Volatility' => { bins: %w[vol] },
|
|
21
|
+
'PWN::Plugins::NmapIt' => { bins: %w[nmap] },
|
|
22
|
+
'PWN::Plugins::Metasploit' => { bins: %w[msfconsole] },
|
|
23
|
+
'PWN::Plugins::BurpSuite' => { bins: %w[burpsuite] },
|
|
24
|
+
'PWN::Plugins::Zaproxy' => { bins: %w[zaproxy] },
|
|
25
|
+
'PWN::Plugins::Packet' => { bins: [], caps: %w[CAP_NET_RAW] },
|
|
26
|
+
'PWN::Plugins::K8s' => { bins: %w[trivy], services: [{ name: 'docker', path: '/var/run/docker.sock' }] }
|
|
27
|
+
}.freeze
|
|
28
|
+
|
|
29
|
+
public_class_method def self.required_bins
|
|
30
|
+
[]
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
public_class_method def self.bin?(opts = {})
|
|
34
|
+
name = opts[:name].to_s
|
|
35
|
+
return false if name.empty?
|
|
36
|
+
|
|
37
|
+
ENV['PATH'].to_s.split(File::PATH_SEPARATOR).any? do |dir|
|
|
38
|
+
File.executable?(File.join(dir, name))
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
public_class_method def self.require_bin!(opts = {})
|
|
43
|
+
name = opts[:name].to_s
|
|
44
|
+
return true if bin?(name: name)
|
|
45
|
+
|
|
46
|
+
raise MissingBinary, "ERROR: required binary missing: #{name}. Install via pwn setup --profile re (or the plugin profile)."
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
public_class_method def self.cap_net_raw?(opts = {})
|
|
50
|
+
return true unless File.readable?('/proc/self/status')
|
|
51
|
+
|
|
52
|
+
line = File.readlines('/proc/self/status').find { |l| l.start_with?('CapEff:') }
|
|
53
|
+
return false unless line
|
|
54
|
+
|
|
55
|
+
hex = line.split.last.to_s
|
|
56
|
+
hex.to_i(16).anybits?(1 << 13)
|
|
57
|
+
rescue StandardError
|
|
58
|
+
opts[:default] == true
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
public_class_method def self.require_cap_net_raw!(opts = {})
|
|
62
|
+
return true if cap_net_raw?(opts)
|
|
63
|
+
|
|
64
|
+
raise MissingCapability,
|
|
65
|
+
'ERROR: CAP_NET_RAW is missing. Packet.send cannot inject L2 frames. ' \
|
|
66
|
+
'Hint: sudo setcap cap_net_raw,cap_net_admin+ep "$(readlink -f "$(command -v ruby)")" ' \
|
|
67
|
+
'or run as root. Fallback: PWN::Plugins::Sock.connect (no raw).'
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
public_class_method def self.service?(opts = {})
|
|
71
|
+
path = opts[:path].to_s
|
|
72
|
+
return File.socket?(path) unless path.empty?
|
|
73
|
+
|
|
74
|
+
false
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
public_class_method def self.check(opts = {})
|
|
78
|
+
deps = PLUGIN_DEPS
|
|
79
|
+
if opts[:names]
|
|
80
|
+
want = Array(opts[:names]).map(&:to_s)
|
|
81
|
+
deps = deps.slice(*want)
|
|
82
|
+
end
|
|
83
|
+
deps.map do |plugin, dep|
|
|
84
|
+
bins = Array(dep[:bins])
|
|
85
|
+
caps = Array(dep[:caps])
|
|
86
|
+
services = Array(dep[:services])
|
|
87
|
+
missing_bins = bins.reject { |b| bin?(name: b) }
|
|
88
|
+
missing_caps = []
|
|
89
|
+
missing_caps << 'CAP_NET_RAW' if caps.include?('CAP_NET_RAW') && !cap_net_raw?
|
|
90
|
+
missing_services = services.reject { |s| service?(name: s[:name] || s['name'], path: s[:path] || s['path']) }.map { |s| s[:name] || s['name'] }
|
|
91
|
+
status = if missing_bins.empty? && missing_caps.empty? && missing_services.empty?
|
|
92
|
+
:ok
|
|
93
|
+
elsif bins.any? && missing_bins.length == bins.length
|
|
94
|
+
:dead
|
|
95
|
+
else
|
|
96
|
+
:degraded
|
|
97
|
+
end
|
|
98
|
+
{ plugin: plugin, status: status, missing_bins: missing_bins, missing_caps: missing_caps, missing_services: missing_services }
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
public_class_method def self.host_summary(opts = {})
|
|
103
|
+
rows = check(names: opts[:names])
|
|
104
|
+
cap = (opts[:limit] || 12).to_i
|
|
105
|
+
dead = rows.select { |r| r[:status] == :dead }
|
|
106
|
+
degraded = rows.select { |r| r[:status] == :degraded }
|
|
107
|
+
lines = ["HOST plugins ok=#{rows.count { |r| r[:status] == :ok }} degraded=#{degraded.length} dead=#{dead.length}"]
|
|
108
|
+
(degraded + dead).first(cap).each do |r|
|
|
109
|
+
miss = (Array(r[:missing_bins]) + Array(r[:missing_caps]) + Array(r[:missing_services])).join(',')
|
|
110
|
+
lines << " #{r[:status]} #{r[:plugin]} missing=#{miss}"
|
|
111
|
+
end
|
|
112
|
+
lines.join("\n")
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
public_class_method def self.authors
|
|
116
|
+
"AUTHOR(S):\n 0day Inc. <support@0dayinc.com>\n"
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
public_class_method def self.help
|
|
120
|
+
puts "USAGE:
|
|
121
|
+
# List host binaries this module expects to be installed.
|
|
122
|
+
#{self}.required_bins
|
|
123
|
+
|
|
124
|
+
# Run bin and return its result
|
|
125
|
+
#{self}.bin?(
|
|
126
|
+
name: 'required - binary or identifier name'
|
|
127
|
+
)
|
|
128
|
+
|
|
129
|
+
# Run require bin and return its result
|
|
130
|
+
#{self}.require_bin!(
|
|
131
|
+
name: 'required - binary or identifier name'
|
|
132
|
+
)
|
|
133
|
+
|
|
134
|
+
# Run cap net raw and return its result
|
|
135
|
+
#{self}.cap_net_raw?(
|
|
136
|
+
default: 'optional - default value consumed by #cap_net_raw?'
|
|
137
|
+
)
|
|
138
|
+
|
|
139
|
+
# Run require cap net raw and return its result
|
|
140
|
+
#{self}.require_cap_net_raw!
|
|
141
|
+
|
|
142
|
+
# True when a unix socket/service path exists.
|
|
143
|
+
#{self}.service?(
|
|
144
|
+
name: 'optional - service name for the report row',
|
|
145
|
+
path: 'required - unix socket path (e.g. /var/run/docker.sock)'
|
|
146
|
+
)
|
|
147
|
+
|
|
148
|
+
# Run check and return its result
|
|
149
|
+
#{self}.check(
|
|
150
|
+
names: 'optional - Array names value consumed by #check'
|
|
151
|
+
)
|
|
152
|
+
|
|
153
|
+
# Run host summary and return its result
|
|
154
|
+
#{self}.host_summary(
|
|
155
|
+
names: 'optional - names value consumed by #host_summary',
|
|
156
|
+
limit: 'optional - limit value consumed by #host_summary'
|
|
157
|
+
)
|
|
158
|
+
|
|
159
|
+
# Print the AUTHOR(S) string for this module.
|
|
160
|
+
#{self}.authors
|
|
161
|
+
"
|
|
162
|
+
constants.sort
|
|
163
|
+
end
|
|
164
|
+
end
|
|
165
|
+
end
|
|
166
|
+
end
|