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/migrate.rb
CHANGED
|
@@ -679,40 +679,50 @@ module PWN
|
|
|
679
679
|
|
|
680
680
|
public_class_method def self.help
|
|
681
681
|
puts "USAGE:
|
|
682
|
-
#
|
|
683
|
-
#{self}.
|
|
682
|
+
# Run installed schema and return its result
|
|
683
|
+
#{self}.installed_schema
|
|
684
684
|
|
|
685
|
-
#
|
|
686
|
-
#{self}.
|
|
687
|
-
#{self}.check # human-readable to $stdout
|
|
685
|
+
# Run needed and return its result
|
|
686
|
+
#{self}.needed?
|
|
688
687
|
|
|
689
|
-
#
|
|
690
|
-
#
|
|
688
|
+
# Run status and return its result
|
|
689
|
+
#{self}.status
|
|
690
|
+
|
|
691
|
+
# Human-readable ~/.pwn state doctor. Read-only. Called from
|
|
692
|
+
#{self}.check(
|
|
693
|
+
io: 'optional - IO to write the report to (default $stdout)'
|
|
694
|
+
)
|
|
695
|
+
|
|
696
|
+
# Run run and return its result
|
|
691
697
|
#{self}.run(
|
|
692
|
-
fix:
|
|
693
|
-
backup:
|
|
694
|
-
dry_run: 'optional - default false',
|
|
695
|
-
key:
|
|
696
|
-
iv:
|
|
698
|
+
fix: 'optional - also autofix incompatible files (default: schema-migrations only)',
|
|
699
|
+
backup: 'optional - take timestamped backup of ~/.pwn first (default true)',
|
|
700
|
+
dry_run: 'optional - report what WOULD happen, write nothing (default false)',
|
|
701
|
+
key: 'optional - vault key (default: read ~/.pwn/pwn.yaml.decryptor)',
|
|
702
|
+
iv: 'optional - vault iv (default: read ~/.pwn/pwn.yaml.decryptor)',
|
|
703
|
+
io: 'optional - IO to write to (default $stdout)'
|
|
697
704
|
)
|
|
698
705
|
|
|
699
|
-
#
|
|
700
|
-
#
|
|
701
|
-
|
|
702
|
-
|
|
706
|
+
# Run vault drift and return its result
|
|
707
|
+
#{self}.vault_drift(
|
|
708
|
+
key: 'optional - vault key, iv: optional - vault iv'
|
|
709
|
+
)
|
|
703
710
|
|
|
704
|
-
#
|
|
705
|
-
#{self}
|
|
706
|
-
|
|
707
|
-
|
|
711
|
+
# Run backfill vault and return its result
|
|
712
|
+
#{self}.backfill_vault(
|
|
713
|
+
key: 'optional - optional, iv: optional, dry_run: false, io: $stdout',
|
|
714
|
+
io: 'optional - io value consumed by #backfill_vault',
|
|
715
|
+
dry_run: 'optional - dry run value consumed by #backfill_vault',
|
|
716
|
+
iv: 'optional - iv value consumed by #backfill_vault'
|
|
717
|
+
)
|
|
708
718
|
|
|
709
|
-
#
|
|
710
|
-
|
|
711
|
-
pwn setup --migrate --fix # == #{self}.run(fix: true)
|
|
712
|
-
pwn setup --migrate --dry-run
|
|
719
|
+
# Run env template and return its result
|
|
720
|
+
#{self}.env_template
|
|
713
721
|
|
|
722
|
+
# Print the AUTHOR(S) string for this module.
|
|
714
723
|
#{self}.authors
|
|
715
724
|
"
|
|
725
|
+
constants.sort
|
|
716
726
|
end
|
|
717
727
|
end
|
|
718
728
|
end
|
data/lib/pwn/module_skills.rb
CHANGED
|
@@ -435,14 +435,45 @@ module PWN
|
|
|
435
435
|
end
|
|
436
436
|
|
|
437
437
|
public_class_method def self.help
|
|
438
|
-
puts
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
#
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
438
|
+
puts "USAGE:
|
|
439
|
+
# Run enumerate and return its result
|
|
440
|
+
#{self}.enumerate(
|
|
441
|
+
lib_root: 'optional - lib root value consumed by #enumerate'
|
|
442
|
+
)
|
|
443
|
+
|
|
444
|
+
# Run relpath and return its result
|
|
445
|
+
#{self}.relpath(
|
|
446
|
+
source: 'optional - source value consumed by #relpath',
|
|
447
|
+
const: 'optional - const value consumed by #relpath'
|
|
448
|
+
)
|
|
449
|
+
|
|
450
|
+
# Run render and return its result
|
|
451
|
+
#{self}.render(
|
|
452
|
+
module: 'optional - module value consumed by #render (defaults to opts)'
|
|
453
|
+
)
|
|
454
|
+
|
|
455
|
+
# Run refresh and return its result
|
|
456
|
+
#{self}.refresh!(
|
|
457
|
+
dest: 'required - dest value consumed by #refresh!',
|
|
458
|
+
lib_root: 'optional - lib root value consumed by #refresh!'
|
|
459
|
+
)
|
|
460
|
+
|
|
461
|
+
# Run drift and return its result
|
|
462
|
+
#{self}.drift(
|
|
463
|
+
dest: 'required - dest value consumed by #drift',
|
|
464
|
+
lib_root: 'optional - lib root value consumed by #drift'
|
|
465
|
+
)
|
|
466
|
+
|
|
467
|
+
# Run install and return its result
|
|
468
|
+
#{self}.install(
|
|
469
|
+
pwn_skills_path: 'required - pwn skills path value consumed by #install',
|
|
470
|
+
source: 'optional - source value consumed by #install'
|
|
471
|
+
)
|
|
472
|
+
|
|
473
|
+
# Print the AUTHOR(S) string for this module.
|
|
474
|
+
#{self}.authors
|
|
475
|
+
"
|
|
476
|
+
constants.sort
|
|
446
477
|
end
|
|
447
478
|
end
|
|
448
479
|
end
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'open3'
|
|
4
|
+
require 'digest'
|
|
5
|
+
|
|
6
|
+
module PWN
|
|
7
|
+
module Plugins
|
|
8
|
+
# AFL++ campaign wrapper.
|
|
9
|
+
module AFLplusplus
|
|
10
|
+
public_class_method def self.required_bins
|
|
11
|
+
%w[afl-fuzz]
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
public_class_method def self.fuzz(opts = {})
|
|
15
|
+
PWN::Plugins::PreflightChecker.require_bin!(name: 'afl-fuzz')
|
|
16
|
+
in_dir = opts[:in_dir] || opts[:corpus]
|
|
17
|
+
out_dir = opts[:out_dir] || opts[:output]
|
|
18
|
+
target = opts[:target]
|
|
19
|
+
raise 'ERROR: in_dir, out_dir, and target are required' if in_dir.to_s.empty? || out_dir.to_s.empty? || target.to_s.empty?
|
|
20
|
+
|
|
21
|
+
cmd = ['afl-fuzz', '-i', in_dir.to_s, '-o', out_dir.to_s, '--', target.to_s]
|
|
22
|
+
cmd.concat(Array(opts[:args]))
|
|
23
|
+
stdout, stderr, status = Open3.capture3(*cmd)
|
|
24
|
+
{ stdout: stdout, stderr: stderr, exit: status.exitstatus }
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
public_class_method def self.crash_triage(opts = {})
|
|
28
|
+
out_dir = (opts[:out_dir] || opts[:output]).to_s
|
|
29
|
+
raise 'ERROR: out_dir is required' if out_dir.empty?
|
|
30
|
+
|
|
31
|
+
crashes = Dir[File.join(out_dir, '**/crashes/id:*')]
|
|
32
|
+
hashes = crashes.map { |p| [p, Digest::SHA256.file(p).hexdigest] }
|
|
33
|
+
{
|
|
34
|
+
crashes: crashes,
|
|
35
|
+
unique: hashes.map(&:last).uniq,
|
|
36
|
+
asan: crashes.any? { |p| File.binread(p).include?('AddressSanitizer') }
|
|
37
|
+
}
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
public_class_method def self.authors
|
|
41
|
+
"AUTHOR(S):\n 0day Inc. <support@0dayinc.com>\n"
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
public_class_method def self.help
|
|
45
|
+
puts "USAGE:
|
|
46
|
+
# List host binaries this module expects to be installed.
|
|
47
|
+
#{self}.required_bins
|
|
48
|
+
|
|
49
|
+
# Run fuzz and return its result
|
|
50
|
+
#{self}.fuzz(
|
|
51
|
+
in_dir: 'required - in dir value consumed by #fuzz (defaults to opts[:corpus])',
|
|
52
|
+
corpus: 'optional - corpus value consumed by #fuzz',
|
|
53
|
+
out_dir: 'required - out dir value consumed by #fuzz (defaults to opts[:output])',
|
|
54
|
+
output: 'optional - output value consumed by #fuzz',
|
|
55
|
+
target: 'required - hostname, IP, or CIDR to scan',
|
|
56
|
+
args: 'optional - Array args value consumed by #fuzz'
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
# Dedup AFL++ crash files by sha256 and note AddressSanitizer hits.
|
|
60
|
+
#{self}.crash_triage(
|
|
61
|
+
out_dir: 'required - AFL output directory containing crashes/',
|
|
62
|
+
output: 'optional - alias for out_dir'
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
# Print the AUTHOR(S) string for this module.
|
|
66
|
+
#{self}.authors
|
|
67
|
+
"
|
|
68
|
+
constants.sort
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
data/lib/pwn/plugins/android.rb
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require 'yaml'
|
|
4
|
+
require 'fileutils'
|
|
5
|
+
require 'tmpdir'
|
|
4
6
|
module PWN
|
|
5
7
|
module Plugins
|
|
6
8
|
# PWN module used to interact w/ Android Devices
|
|
@@ -1275,6 +1277,33 @@ module PWN
|
|
|
1275
1277
|
raise e
|
|
1276
1278
|
end
|
|
1277
1279
|
|
|
1280
|
+
public_class_method def self.apk_pipeline(opts = {})
|
|
1281
|
+
apk = opts[:apk].to_s
|
|
1282
|
+
raise 'ERROR: apk is required' if apk.empty?
|
|
1283
|
+
|
|
1284
|
+
out = opts[:out_dir] || File.join(Dir.tmpdir, "pwn-apk-#{Process.pid}")
|
|
1285
|
+
FileUtils.mkdir_p(out)
|
|
1286
|
+
decoded = File.join(out, 'apktool')
|
|
1287
|
+
jadx_out = File.join(out, 'jadx')
|
|
1288
|
+
steps = []
|
|
1289
|
+
if PWN::Plugins::PreflightChecker.bin?(name: 'apktool')
|
|
1290
|
+
system('apktool', 'd', '-f', '-o', decoded, apk)
|
|
1291
|
+
steps << :apktool
|
|
1292
|
+
end
|
|
1293
|
+
if PWN::Plugins::PreflightChecker.bin?(name: 'jadx')
|
|
1294
|
+
FileUtils.mkdir_p(jadx_out)
|
|
1295
|
+
system('jadx', '-d', jadx_out, apk)
|
|
1296
|
+
steps << :jadx
|
|
1297
|
+
end
|
|
1298
|
+
manifest = File.join(decoded, 'AndroidManifest.xml')
|
|
1299
|
+
perms = []
|
|
1300
|
+
if File.file?(manifest)
|
|
1301
|
+
txt = File.read(manifest)
|
|
1302
|
+
perms = txt.scan(/android:name="([^"]+)"/).flatten.grep(/PERMISSION|permission/)
|
|
1303
|
+
end
|
|
1304
|
+
{ out_dir: out, steps: steps, apk: apk, permissions: perms, manifest: (File.file?(manifest) ? manifest : nil) }
|
|
1305
|
+
end
|
|
1306
|
+
|
|
1278
1307
|
# Author(s):: 0day Inc. <support@0dayinc.com>
|
|
1279
1308
|
|
|
1280
1309
|
public_class_method def self.authors
|
|
@@ -1287,330 +1316,127 @@ module PWN
|
|
|
1287
1316
|
|
|
1288
1317
|
public_class_method def self.help
|
|
1289
1318
|
puts "USAGE:
|
|
1290
|
-
|
|
1319
|
+
# Run adb net connect and return its result
|
|
1291
1320
|
#{self}.adb_net_connect(
|
|
1292
1321
|
adb_path: 'required - path to adb binary',
|
|
1293
1322
|
target: 'required - target host or IP to connect',
|
|
1294
1323
|
port: 'optional - defaults to tcp 5555'
|
|
1295
1324
|
)
|
|
1296
1325
|
|
|
1297
|
-
|
|
1326
|
+
# Run adb sh and return its result
|
|
1327
|
+
#{self}.adb_sh(
|
|
1298
1328
|
adb_path: 'required - path to adb binary',
|
|
1299
|
-
command: 'adb command to execute'
|
|
1300
|
-
as_root: 'optional - boolean (defaults to false)'
|
|
1329
|
+
command: 'required - adb command to execute',
|
|
1330
|
+
as_root: 'optional - boolean (defaults to false)'
|
|
1301
1331
|
)
|
|
1302
1332
|
|
|
1333
|
+
# Run adb push and return its result
|
|
1303
1334
|
#{self}.adb_push(
|
|
1304
1335
|
adb_path: 'required - path to adb binary',
|
|
1305
1336
|
file: 'required - source file to push',
|
|
1306
|
-
dest: 'required - destination path to
|
|
1307
|
-
as_root: 'optional - boolean (defaults to false)'
|
|
1337
|
+
dest: 'required - destination path to save pushed file',
|
|
1338
|
+
as_root: 'optional - boolean (defaults to false)'
|
|
1308
1339
|
)
|
|
1309
1340
|
|
|
1341
|
+
# Run adb pull and return its result
|
|
1310
1342
|
#{self}.adb_pull(
|
|
1311
1343
|
adb_path: 'required - path to adb binary',
|
|
1312
1344
|
file: 'required - source file to pull',
|
|
1313
|
-
dest: 'required - destination path to
|
|
1314
|
-
as_root: 'optional - boolean (defaults to false)'
|
|
1345
|
+
dest: 'required - destination path to save pulled file',
|
|
1346
|
+
as_root: 'optional - boolean (defaults to false)'
|
|
1315
1347
|
)
|
|
1316
1348
|
|
|
1349
|
+
# Run take screenshot and return its result
|
|
1317
1350
|
#{self}.take_screenshot(
|
|
1318
1351
|
adb_path: 'required - path to adb binary',
|
|
1319
1352
|
dest: 'optional - destination path to save screenshot file (defaults to /sdcard/screen.png)',
|
|
1320
1353
|
as_root: 'optional - boolean (defaults to true)'
|
|
1321
1354
|
)
|
|
1322
1355
|
|
|
1356
|
+
# Run screen record and return its result
|
|
1323
1357
|
#{self}.screen_record(
|
|
1324
1358
|
adb_path: 'required - path to adb binary',
|
|
1325
1359
|
dest: 'optional - destination path to save screen record file (defaults to /sdcard/screen.mp4)',
|
|
1326
1360
|
as_root: 'optional - boolean (defaults to true)'
|
|
1327
1361
|
)
|
|
1328
1362
|
|
|
1329
|
-
|
|
1363
|
+
# Run list installed apps and return its result
|
|
1364
|
+
#{self}.list_installed_apps(
|
|
1330
1365
|
adb_path: 'required - path to adb binary',
|
|
1331
|
-
as_root: 'optional - boolean (defaults to false)'
|
|
1366
|
+
as_root: 'optional - boolean (defaults to false)'
|
|
1332
1367
|
)
|
|
1333
1368
|
|
|
1334
|
-
|
|
1369
|
+
# Run dumpsys and return its result
|
|
1370
|
+
#{self}.dumpsys(
|
|
1335
1371
|
adb_path: 'required - path to adb binary',
|
|
1336
1372
|
app: 'optional - application app to detail otherwise display all (i.e. display info from an android app returned from #list_install_apps method)',
|
|
1337
|
-
as_root: 'optional - boolean (defaults to false)'
|
|
1373
|
+
as_root: 'optional - boolean (defaults to false)'
|
|
1338
1374
|
)
|
|
1339
1375
|
|
|
1340
|
-
|
|
1376
|
+
# Run open app and return its result
|
|
1377
|
+
#{self}.open_app(
|
|
1341
1378
|
adb_path: 'required - path to adb binary',
|
|
1342
1379
|
app: 'required - application app to run (i.e. open an android app returned from #list_install_apps method)',
|
|
1343
1380
|
as_root: 'optional - boolean (defaults to false)'
|
|
1344
1381
|
)
|
|
1345
1382
|
|
|
1383
|
+
# Run find hidden codes and return its result
|
|
1346
1384
|
#{self}.find_hidden_codes(
|
|
1347
1385
|
adb_path: 'required - path to adb binary',
|
|
1348
|
-
from: 'required - start at keycode #'
|
|
1386
|
+
from: 'required - start at keycode #',
|
|
1349
1387
|
to: 'required - end at keycode #',
|
|
1350
1388
|
interact: 'optional - defaults to false'
|
|
1351
1389
|
)
|
|
1352
1390
|
|
|
1391
|
+
# Run swipe and return its result
|
|
1353
1392
|
#{self}.swipe(
|
|
1354
1393
|
adb_path: 'required - path to adb binary',
|
|
1355
1394
|
direction: 'required - direction to swipe (:up|:down|:left|:right)'
|
|
1356
1395
|
)
|
|
1357
1396
|
|
|
1397
|
+
# Run input and return its result
|
|
1358
1398
|
#{self}.input(
|
|
1359
1399
|
adb_path: 'required - path to adb binary',
|
|
1360
1400
|
string: 'required - string to type'
|
|
1361
1401
|
)
|
|
1362
1402
|
|
|
1403
|
+
# see https://developer.android.com/reference/android/view/KeyEvent.html for more info
|
|
1363
1404
|
#{self}.input_special(
|
|
1364
1405
|
adb_path: 'required - path to adb binary',
|
|
1365
|
-
event: 'required - special event to invoke (
|
|
1366
|
-
:zoom_in|
|
|
1367
|
-
:zoom_out|
|
|
1368
|
-
:zenkaku_hankaku|
|
|
1369
|
-
:yen|
|
|
1370
|
-
:window|
|
|
1371
|
-
:wakeup|
|
|
1372
|
-
:voice_assist|
|
|
1373
|
-
:tv_zoom_mode|
|
|
1374
|
-
:tv_timer_programming|
|
|
1375
|
-
:tv_terrestrial_digital|
|
|
1376
|
-
:tv_terrestrial_analog|
|
|
1377
|
-
:tv_satellite_teletext|
|
|
1378
|
-
:tv_satellite_service|
|
|
1379
|
-
:tv_satellite|
|
|
1380
|
-
:tv_satellite_bs|
|
|
1381
|
-
:tv_satellite_cs|
|
|
1382
|
-
:tv_radio_service|
|
|
1383
|
-
:tv_power|
|
|
1384
|
-
:tv_number_entry|
|
|
1385
|
-
:tv_network|
|
|
1386
|
-
:tv_media_context_menu|
|
|
1387
|
-
:tv_input_vga1|
|
|
1388
|
-
:tv_input_hdmi1|
|
|
1389
|
-
:tv_input_hdmi2|
|
|
1390
|
-
:tv_input_hdmi3|
|
|
1391
|
-
:tv_input_hdmi4|
|
|
1392
|
-
:tv_input_composite1|
|
|
1393
|
-
:tv_input_composite2|
|
|
1394
|
-
:tv_input_component1|
|
|
1395
|
-
:tv_input_component2|
|
|
1396
|
-
:tv_input|
|
|
1397
|
-
:tv_data_service|
|
|
1398
|
-
:tv_contents_menu|
|
|
1399
|
-
:tv_audio_desc|
|
|
1400
|
-
:tv_audio_desc_mix_up|
|
|
1401
|
-
:tv_audio_desc_mix_down|
|
|
1402
|
-
:tv_antenna_cable|
|
|
1403
|
-
:tv|
|
|
1404
|
-
:sysrq|
|
|
1405
|
-
:switch_charset|
|
|
1406
|
-
:stem_primary|
|
|
1407
|
-
:stem1|
|
|
1408
|
-
:stem2|
|
|
1409
|
-
:stem3|
|
|
1410
|
-
:stb_power|
|
|
1411
|
-
:stb_input|
|
|
1412
|
-
:sleep|
|
|
1413
|
-
:settings|
|
|
1414
|
-
:scroll_lock|
|
|
1415
|
-
:ro|
|
|
1416
|
-
:prog_blue|
|
|
1417
|
-
:prog_green|
|
|
1418
|
-
:prog_red|
|
|
1419
|
-
:prog_yellow|
|
|
1420
|
-
:pairing|
|
|
1421
|
-
:num_lock|
|
|
1422
|
-
:numpad_subtract|
|
|
1423
|
-
:numpad_multiply|
|
|
1424
|
-
:numpad_left_paren|
|
|
1425
|
-
:numpad_right_paren|
|
|
1426
|
-
:numpad_equals|
|
|
1427
|
-
:numpad_enter|
|
|
1428
|
-
:numpad_dot|
|
|
1429
|
-
:numpad_comma|
|
|
1430
|
-
:numpad_add|
|
|
1431
|
-
:numpad0|
|
|
1432
|
-
:numpad1|
|
|
1433
|
-
:numpad2|
|
|
1434
|
-
:numpad3|
|
|
1435
|
-
:numpad4|
|
|
1436
|
-
:numpad5|
|
|
1437
|
-
:numpad6|
|
|
1438
|
-
:numpad7|
|
|
1439
|
-
:numpad8|
|
|
1440
|
-
:numpad9|
|
|
1441
|
-
:num|
|
|
1442
|
-
:nav_in|
|
|
1443
|
-
:nav_next|
|
|
1444
|
-
:nav_out|
|
|
1445
|
-
:nav_previous|
|
|
1446
|
-
:music|
|
|
1447
|
-
:muhenkan|
|
|
1448
|
-
:meta_left|
|
|
1449
|
-
:meta_right|
|
|
1450
|
-
:media_top_menu|
|
|
1451
|
-
:media_step_forward|
|
|
1452
|
-
:media_step_back|
|
|
1453
|
-
:media_skip_forward|
|
|
1454
|
-
:media_skip_back|
|
|
1455
|
-
:media_record|
|
|
1456
|
-
:media_play|
|
|
1457
|
-
:media_eject|
|
|
1458
|
-
:media_close|
|
|
1459
|
-
:media_audio_track|
|
|
1460
|
-
:manner_mode|
|
|
1461
|
-
:last_channel|
|
|
1462
|
-
:language_switch|
|
|
1463
|
-
:katakana_hiragana|
|
|
1464
|
-
:kana|
|
|
1465
|
-
:insert|
|
|
1466
|
-
:info|
|
|
1467
|
-
:henkan|
|
|
1468
|
-
:help|
|
|
1469
|
-
:guide|
|
|
1470
|
-
:del|
|
|
1471
|
-
:f1|
|
|
1472
|
-
:f2|
|
|
1473
|
-
:f3|
|
|
1474
|
-
:f4|
|
|
1475
|
-
:f5|
|
|
1476
|
-
:f6|
|
|
1477
|
-
:f7|
|
|
1478
|
-
:f8|
|
|
1479
|
-
:f9|
|
|
1480
|
-
:f10|
|
|
1481
|
-
:f11|
|
|
1482
|
-
:f12|
|
|
1483
|
-
:escape|
|
|
1484
|
-
:eisu|
|
|
1485
|
-
:dvr|
|
|
1486
|
-
:ctrl_left|
|
|
1487
|
-
:ctrl_right|
|
|
1488
|
-
:cut|
|
|
1489
|
-
:copy|
|
|
1490
|
-
:paste|
|
|
1491
|
-
:contacts|
|
|
1492
|
-
:chan_down|
|
|
1493
|
-
:chan_up|
|
|
1494
|
-
:captions|
|
|
1495
|
-
:caps_lock|
|
|
1496
|
-
:calendar|
|
|
1497
|
-
:calculator|
|
|
1498
|
-
:gamepad1|
|
|
1499
|
-
:gamepad2|
|
|
1500
|
-
:gamepad3|
|
|
1501
|
-
:gamepad4|
|
|
1502
|
-
:gamepad5|
|
|
1503
|
-
:gamepad6|
|
|
1504
|
-
:gamepad7|
|
|
1505
|
-
:gamepad8|
|
|
1506
|
-
:gamepad9|
|
|
1507
|
-
:gamepad10|
|
|
1508
|
-
:gamepad11|
|
|
1509
|
-
:gamepad12|
|
|
1510
|
-
:gamepad13|
|
|
1511
|
-
:gamepad14|
|
|
1512
|
-
:gamepad15|
|
|
1513
|
-
:gamepad16|
|
|
1514
|
-
:gamepad_a|
|
|
1515
|
-
:gamepad_b|
|
|
1516
|
-
:gamepad_c|
|
|
1517
|
-
:gamepad_l1|
|
|
1518
|
-
:gamepad_l2|
|
|
1519
|
-
:gamepad_mode|
|
|
1520
|
-
:gamepad_r1|
|
|
1521
|
-
:gamepad_r2|
|
|
1522
|
-
:gamepad_select|
|
|
1523
|
-
:gamepad_start|
|
|
1524
|
-
:gamepad_thumbl|
|
|
1525
|
-
:gamepad_thumbr|
|
|
1526
|
-
:gamepad_x|
|
|
1527
|
-
:gamepad_y|
|
|
1528
|
-
:gamepad_z|
|
|
1529
|
-
:brightness_up|
|
|
1530
|
-
:brightness_down|
|
|
1531
|
-
:break|
|
|
1532
|
-
:bookmark|
|
|
1533
|
-
:avr_power|
|
|
1534
|
-
:avr_input|
|
|
1535
|
-
:assist|
|
|
1536
|
-
:app_switch|
|
|
1537
|
-
:threeDmode|
|
|
1538
|
-
:eleven|
|
|
1539
|
-
:twelve|
|
|
1540
|
-
:unknown|
|
|
1541
|
-
:soft_left|
|
|
1542
|
-
:soft_right|
|
|
1543
|
-
:soft_sleep|
|
|
1544
|
-
:home|
|
|
1545
|
-
:forward|
|
|
1546
|
-
:back|
|
|
1547
|
-
:call|
|
|
1548
|
-
:endcall|
|
|
1549
|
-
:dpad_up|
|
|
1550
|
-
:dpad_down|
|
|
1551
|
-
:dpad_left|
|
|
1552
|
-
:dpad_right|
|
|
1553
|
-
:dpad_down_left|
|
|
1554
|
-
:dpad_down_right|
|
|
1555
|
-
:dpad_up_left|
|
|
1556
|
-
:dpad_up_right|
|
|
1557
|
-
:dpad_center|
|
|
1558
|
-
:volume_up|
|
|
1559
|
-
:volume_down|
|
|
1560
|
-
:power|
|
|
1561
|
-
:camera|
|
|
1562
|
-
:clear|
|
|
1563
|
-
:alt_left|
|
|
1564
|
-
:alt_right|
|
|
1565
|
-
:shift_left|
|
|
1566
|
-
:shift_right|
|
|
1567
|
-
:tab|
|
|
1568
|
-
:sym|
|
|
1569
|
-
:explorer|
|
|
1570
|
-
:envelope|
|
|
1571
|
-
:enter|
|
|
1572
|
-
:backspace|
|
|
1573
|
-
:headsethook|
|
|
1574
|
-
:focus|
|
|
1575
|
-
:menu|
|
|
1576
|
-
:top_menu|
|
|
1577
|
-
:notification|
|
|
1578
|
-
:search|
|
|
1579
|
-
:media_play_pause|
|
|
1580
|
-
:media_stop|
|
|
1581
|
-
:media_next|
|
|
1582
|
-
:media_previous|
|
|
1583
|
-
:media_rewind|
|
|
1584
|
-
:media_fast_forward|
|
|
1585
|
-
:mute|
|
|
1586
|
-
:page_up|
|
|
1587
|
-
:page_down|
|
|
1588
|
-
:pictsymbols|
|
|
1589
|
-
:move_home|
|
|
1590
|
-
:move_end
|
|
1591
|
-
)
|
|
1592
|
-
see https://developer.android.com/reference/android/view/KeyEvent.html for more info'
|
|
1406
|
+
event: 'required - special event to invoke ('
|
|
1593
1407
|
)
|
|
1594
1408
|
|
|
1595
|
-
|
|
1409
|
+
# Run close app and return its result
|
|
1410
|
+
#{self}.close_app(
|
|
1596
1411
|
adb_path: 'required - path to adb binary',
|
|
1597
|
-
app: 'required - application app to
|
|
1412
|
+
app: 'required - application app to close (i.e. open an android app returned from #list_install_apps method)',
|
|
1598
1413
|
as_root: 'optional - boolean (defaults to false)'
|
|
1599
1414
|
)
|
|
1600
1415
|
|
|
1416
|
+
# Run invoke event listener and return its result
|
|
1601
1417
|
#{self}.invoke_event_listener(
|
|
1602
1418
|
adb_path: 'required - path to adb binary',
|
|
1603
1419
|
as_root: 'optional - boolean (defaults to false)',
|
|
1420
|
+
app: 'optional - app value consumed by #invoke_event_listener'
|
|
1604
1421
|
)
|
|
1605
1422
|
|
|
1423
|
+
# Run adb net disconnect and return its result
|
|
1606
1424
|
#{self}.adb_net_disconnect(
|
|
1607
1425
|
adb_path: 'required - path to adb binary',
|
|
1608
|
-
target: 'required - target host or IP to
|
|
1426
|
+
target: 'required - target host or IP to disconnect',
|
|
1609
1427
|
port: 'optional - defaults to tcp 5555'
|
|
1610
1428
|
)
|
|
1611
1429
|
|
|
1430
|
+
# Run apk pipeline and return its result
|
|
1431
|
+
#{self}.apk_pipeline(
|
|
1432
|
+
apk: 'required - apk value consumed by #apk_pipeline',
|
|
1433
|
+
out_dir: 'optional - out dir value consumed by #apk_pipeline'
|
|
1434
|
+
)
|
|
1435
|
+
|
|
1436
|
+
# Print the AUTHOR(S) string for this module.
|
|
1612
1437
|
#{self}.authors
|
|
1613
1438
|
"
|
|
1439
|
+
constants.sort
|
|
1614
1440
|
end
|
|
1615
1441
|
end
|
|
1616
1442
|
end
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'fileutils'
|
|
4
|
+
require 'json'
|
|
5
|
+
|
|
6
|
+
module PWN
|
|
7
|
+
module Plugins
|
|
8
|
+
# ~/.pwn/artifacts/<session>/ loot index for session_recall.
|
|
9
|
+
module ArtifactRegistry
|
|
10
|
+
ROOT = File.join(Dir.home, '.pwn', 'artifacts')
|
|
11
|
+
|
|
12
|
+
public_class_method def self.required_bins
|
|
13
|
+
[]
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
public_class_method def self.register(opts = {})
|
|
17
|
+
sid = (opts[:session_id] || 'default').to_s
|
|
18
|
+
src = opts[:path].to_s
|
|
19
|
+
raise 'ERROR: path is required' if src.empty?
|
|
20
|
+
raise "ERROR: file not found: #{src}" unless File.file?(src)
|
|
21
|
+
|
|
22
|
+
dir = File.join(ROOT, sid)
|
|
23
|
+
FileUtils.mkdir_p(dir)
|
|
24
|
+
dest = File.join(dir, File.basename(src))
|
|
25
|
+
FileUtils.cp(src, dest)
|
|
26
|
+
meta = File.join(dir, 'index.jsonl')
|
|
27
|
+
File.open(meta, 'a') { |f| f.puts(JSON.generate(path: dest, kind: opts[:kind], src: src, at: Time.now.utc.iso8601)) }
|
|
28
|
+
dest
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
public_class_method def self.list(opts = {})
|
|
32
|
+
sid = (opts[:session_id] || 'default').to_s
|
|
33
|
+
meta = File.join(ROOT, sid, 'index.jsonl')
|
|
34
|
+
return [] unless File.file?(meta)
|
|
35
|
+
|
|
36
|
+
File.readlines(meta).filter_map do |ln|
|
|
37
|
+
JSON.parse(ln, symbolize_names: true)
|
|
38
|
+
rescue JSON::ParserError
|
|
39
|
+
nil
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
public_class_method def self.authors
|
|
44
|
+
"AUTHOR(S):\n 0day Inc. <support@0dayinc.com>\n"
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
public_class_method def self.help
|
|
48
|
+
puts "USAGE:
|
|
49
|
+
# List host binaries this module expects to be installed.
|
|
50
|
+
#{self}.required_bins
|
|
51
|
+
|
|
52
|
+
# Run register and return its result
|
|
53
|
+
#{self}.register(
|
|
54
|
+
session_id: 'optional - session id value consumed by #register',
|
|
55
|
+
path: 'required - filesystem path to read or write',
|
|
56
|
+
kind: 'optional - kind value consumed by #register'
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
# Run list and return its result
|
|
60
|
+
#{self}.list(
|
|
61
|
+
session_id: 'optional - session id value consumed by #list'
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
# Print the AUTHOR(S) string for this module.
|
|
65
|
+
#{self}.authors
|
|
66
|
+
"
|
|
67
|
+
constants.sort
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|