pwn 0.5.708 → 0.5.709
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/documentation/Installation.md +1 -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 +48 -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 +51 -0
- data/etc/default_skills/pwn/plugins/doctor/SKILL.md +57 -0
- data/etc/default_skills/pwn/plugins/exploit_dev/SKILL.md +61 -0
- data/etc/default_skills/pwn/plugins/frida/SKILL.md +49 -0
- data/etc/default_skills/pwn/plugins/gdb/SKILL.md +52 -0
- data/etc/default_skills/pwn/plugins/jobs/SKILL.md +51 -0
- data/etc/default_skills/pwn/plugins/nuclei/SKILL.md +48 -0
- data/etc/default_skills/pwn/plugins/process_tube/SKILL.md +52 -0
- data/etc/default_skills/pwn/plugins/radare2/SKILL.md +59 -0
- data/etc/default_skills/pwn/plugins/recon/SKILL.md +55 -0
- data/etc/default_skills/pwn/plugins/recon/references/urls.md +5 -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 +48 -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/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 +5 -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 +52 -0
- data/lib/pwn/plugins/android.rb +65 -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 +99 -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/doctor.rb +149 -0
- data/lib/pwn/plugins/ein.rb +3 -0
- data/lib/pwn/plugins/exploit_dev.rb +264 -0
- data/lib/pwn/plugins/file_fu.rb +11 -8
- data/lib/pwn/plugins/frida.rb +61 -0
- data/lib/pwn/plugins/fuzz.rb +9 -6
- data/lib/pwn/plugins/gdb.rb +95 -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 +109 -0
- data/lib/pwn/plugins/json_pathify.rb +9 -5
- 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 +57 -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/process_tube.rb +120 -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 +161 -0
- data/lib/pwn/plugins/repl.rb +122 -1
- data/lib/pwn/plugins/scannable_codes.rb +5 -1
- 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 +16 -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 +48 -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 +19 -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 +94 -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/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/doctor_spec.rb +23 -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/nuclei_spec.rb +13 -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/sqlmap_spec.rb +13 -0
- data/spec/lib/pwn/plugins/volatility_spec.rb +13 -0
- data/third_party/pwn_rdoc.jsonl +126 -5
- metadata +47 -3
- 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/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
|
@@ -319,43 +319,51 @@ module PWN
|
|
|
319
319
|
|
|
320
320
|
public_class_method def self.help
|
|
321
321
|
puts "USAGE:
|
|
322
|
-
|
|
322
|
+
# Run connect and return its result
|
|
323
|
+
#{self}.connect(
|
|
323
324
|
target: 'required - target host or ip',
|
|
324
325
|
port: 'required - target port',
|
|
325
|
-
protocol: 'optional - :tcp || :udp (defaults to tcp)',
|
|
326
|
+
protocol: 'optional - :tcp || :udp (defaults to :tcp)',
|
|
326
327
|
tls: 'optional - boolean connect to target socket using TLS (defaults to false)'
|
|
327
328
|
)
|
|
328
329
|
|
|
329
|
-
port
|
|
330
|
+
# Run get random unused port and return its result
|
|
331
|
+
#{self}.get_random_unused_port(
|
|
330
332
|
server_ip: 'optional - target host or ip to check (Defaults to 127.0.0.1)',
|
|
331
333
|
protocol: 'optional - :tcp || :udp (defaults to tcp)'
|
|
332
334
|
)
|
|
333
335
|
|
|
336
|
+
# Run check port in use and return its result
|
|
334
337
|
#{self}.check_port_in_use(
|
|
335
|
-
server_ip: 'optional - target host or ip to check (Defaults to 127.0.0.1)',
|
|
336
338
|
port: 'required - target port',
|
|
339
|
+
server_ip: 'optional - target host or ip to check (Defaults to 127.0.0.1)',
|
|
337
340
|
protocol: 'optional - :tcp || :udp (defaults to tcp)'
|
|
338
341
|
)
|
|
339
342
|
|
|
340
|
-
|
|
343
|
+
# Run listen and return its result
|
|
344
|
+
#{self}.listen(
|
|
341
345
|
port: 'required - target port',
|
|
342
|
-
server_ip: 'optional - target host or ip to listen (Defaults to 127.0.0.1
|
|
346
|
+
server_ip: 'optional - target host or ip to listen (Defaults to 127.0.0.1)',
|
|
343
347
|
protocol: 'optional - :tcp || :udp (defaults to tcp)',
|
|
344
348
|
tls: 'optional - boolean listen on TLS-enabled socket (defaults to false)',
|
|
345
349
|
detach: 'optional - boolean to detach listener to background (defaults to false)'
|
|
346
350
|
)
|
|
347
351
|
|
|
348
|
-
|
|
352
|
+
# Run get tls cert and return its result
|
|
353
|
+
#{self}.get_tls_cert(
|
|
349
354
|
target: 'required - target host or ip',
|
|
350
355
|
port: 'optional - target port (defaults to 443)'
|
|
351
356
|
)
|
|
352
357
|
|
|
353
|
-
|
|
358
|
+
# Run disconnect and return its result
|
|
359
|
+
#{self}.disconnect(
|
|
354
360
|
sock_obj: 'required - sock_obj returned from #connect method'
|
|
355
361
|
)
|
|
356
362
|
|
|
363
|
+
# Print the AUTHOR(S) string for this module.
|
|
357
364
|
#{self}.authors
|
|
358
365
|
"
|
|
366
|
+
constants.sort
|
|
359
367
|
end
|
|
360
368
|
end
|
|
361
369
|
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::Doctor.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
|
data/lib/pwn/plugins/tor.rb
CHANGED
|
@@ -248,25 +248,30 @@ module PWN
|
|
|
248
248
|
|
|
249
249
|
public_class_method def self.help
|
|
250
250
|
puts "USAGE:
|
|
251
|
-
|
|
251
|
+
# Run start and return its result
|
|
252
|
+
#{self}.start(
|
|
252
253
|
ip: 'optional - IP address to listen (default: 127.0.0.1)',
|
|
253
|
-
port: 'optional - socks port to listen (default:
|
|
254
|
-
ctrl_port: 'optional - tor control port to listen (default:
|
|
255
|
-
net: 'optional - CIDR notation to accept connections (default: 127.0.0.1/32)',
|
|
254
|
+
port: 'optional - socks port to listen (default: 1024-65535)',
|
|
255
|
+
ctrl_port: 'optional - tor control port to listen (default: 1024-65535)',
|
|
256
|
+
net: 'optional - CIDR notation to accept connections (default: 127.0.0.0.1/32)',
|
|
256
257
|
data_dir: 'optional - directory to keep tor session data (default: /tmp/tor_pwn-TIMESTAMP)'
|
|
257
258
|
)
|
|
258
259
|
|
|
260
|
+
# Run switch exit node and return its result
|
|
259
261
|
#{self}.switch_exit_node(
|
|
260
262
|
tor_obj: 'required - tor_obj returned from #start method',
|
|
261
263
|
response_timeout: 'optional - float in seconds to timeout (default: 3.0)'
|
|
262
264
|
)
|
|
263
265
|
|
|
266
|
+
# Run stop and return its result
|
|
264
267
|
#{self}.stop(
|
|
265
268
|
tor_obj: 'required - tor_obj returned from #start method'
|
|
266
269
|
)
|
|
267
270
|
|
|
271
|
+
# Print the AUTHOR(S) string for this module.
|
|
268
272
|
#{self}.authors
|
|
269
273
|
"
|
|
274
|
+
constants.sort
|
|
270
275
|
end
|
|
271
276
|
end
|
|
272
277
|
end
|
|
@@ -1561,188 +1561,143 @@ module PWN
|
|
|
1561
1561
|
|
|
1562
1562
|
public_class_method def self.help
|
|
1563
1563
|
puts "USAGE:
|
|
1564
|
-
|
|
1564
|
+
# Open a session or connection and return a handle.
|
|
1565
|
+
#{self}.open(
|
|
1565
1566
|
browser_type: 'optional - :firefox|:chrome|:headless|:rest|:websocket (defaults to :chrome)',
|
|
1566
|
-
proxy: 'optional scheme://proxy_host:port || tor (defaults to nil)',
|
|
1567
|
+
proxy: 'optional - scheme://proxy_host:port || tor (defaults to nil)',
|
|
1567
1568
|
devtools: 'optional - boolean (defaults to false)'
|
|
1568
1569
|
)
|
|
1569
|
-
browser = browser_obj1[:browser]
|
|
1570
|
-
puts browser.public_methods
|
|
1571
|
-
|
|
1572
|
-
********************************************************
|
|
1573
|
-
* DevTools Interaction
|
|
1574
|
-
* All DevTools Commands can be found here:
|
|
1575
|
-
* https://chromedevtools.github.io/devtools-protocol/
|
|
1576
|
-
* Examples
|
|
1577
|
-
devtools = browser_obj1[:devtools]
|
|
1578
|
-
puts devtools.public_methods
|
|
1579
|
-
puts devtools.instance_variables
|
|
1580
|
-
puts devtools.instance_variable_get('@session_id')
|
|
1581
|
-
|
|
1582
|
-
websocket = devtools.instance_variable_get('@ws')
|
|
1583
|
-
puts websocket.public_methods
|
|
1584
|
-
puts websocket.instance_variables
|
|
1585
|
-
puts websocket.instance_variable_get('@messages')
|
|
1586
|
-
|
|
1587
|
-
* Tracing
|
|
1588
|
-
devtools.send_cmd('Tracing.start')
|
|
1589
|
-
devtools.send_cmd('Tracing.requestMemoryDump')
|
|
1590
|
-
devtools.send_cmd('Tracing.end')
|
|
1591
|
-
puts devtools.instance_variable_get('@messages')
|
|
1592
|
-
|
|
1593
|
-
* Network
|
|
1594
|
-
devtools.send_cmd('Network.enable')
|
|
1595
|
-
last_ws_resp = devtools.instance_variable_get('@messages').last if devtools.instance_variable_get('@messages').last['method'] == 'Network.webSocketFrameReceived'
|
|
1596
|
-
puts last_ws_resp
|
|
1597
|
-
devtools.send_cmd('Network.disable')
|
|
1598
|
-
|
|
1599
|
-
* Debugging DOM and Sending JavaScript to Console
|
|
1600
|
-
devtools.send_cmd('Runtime.enable')
|
|
1601
|
-
devtools.send_cmd('Console.enable')
|
|
1602
|
-
devtools.send_cmd('DOM.enable')
|
|
1603
|
-
devtools.send_cmd('Page.enable')
|
|
1604
|
-
devtools.send_cmd('Log.enable')
|
|
1605
|
-
devtools.send_cmd('Debugger.enable')
|
|
1606
|
-
devtools.send_cmd('Debugger.pause')
|
|
1607
|
-
step = 1
|
|
1608
|
-
next_step = 60
|
|
1609
|
-
loop do
|
|
1610
|
-
devtools.send_cmd('Console.clearMessages')
|
|
1611
|
-
devtools.send_cmd('Log.clear')
|
|
1612
|
-
console_events = []
|
|
1613
|
-
browser.driver.on_log_event(:console) { |event| console_events.push(event) }
|
|
1614
|
-
|
|
1615
|
-
devtools.send_cmd('Debugger.stepInto')
|
|
1616
|
-
puts \"Step: \#{step}\"
|
|
1617
|
-
|
|
1618
|
-
this_document = devtools.send_cmd('DOM.getDocument')
|
|
1619
|
-
puts \"This #document:\\n\#{this_document}\\n\\n\\n\"
|
|
1620
|
-
|
|
1621
|
-
console_cmd = {
|
|
1622
|
-
expression: 'for(var pop_var in window) { if (window.hasOwnProperty(pop_var) && window[pop_var] != null) console.log(pop_var + \" = \" + window[pop_var]); }'
|
|
1623
|
-
}
|
|
1624
|
-
puts devtools.send_cmd('Runtime.evaluate', **console_cmd)
|
|
1625
|
-
|
|
1626
|
-
print '-' * 180
|
|
1627
|
-
print \"\\n\"
|
|
1628
|
-
console_events.each do |event|
|
|
1629
|
-
puts event.args
|
|
1630
|
-
end
|
|
1631
|
-
puts \"Console Response Length: \#{console_events.length}\"
|
|
1632
|
-
console_events_digest = OpenSSL::Digest::SHA256.hexdigest(
|
|
1633
|
-
console_events.inspect
|
|
1634
|
-
)
|
|
1635
|
-
puts \"Console Events Array SHA256 Digest: \#{console_events_digest}\"
|
|
1636
|
-
print '-' * 180
|
|
1637
|
-
puts \"\\n\\n\\n\"
|
|
1638
|
-
|
|
1639
|
-
print \"Next Step in \"
|
|
1640
|
-
next_step.downto(1) {|n| print \"\#{n} \"; sleep 1 }
|
|
1641
|
-
puts 'READY!'
|
|
1642
|
-
step += 1
|
|
1643
|
-
end
|
|
1644
|
-
|
|
1645
|
-
devtools.send_cmd('Debugger.disable')
|
|
1646
|
-
devtools.send_cmd('Log.disable')
|
|
1647
|
-
devtools.send_cmd('Page.disable')
|
|
1648
|
-
devtools.send_cmd('DOM.disable')
|
|
1649
|
-
devtools.send_cmd('Console.disable')
|
|
1650
|
-
devtools.send_cmd('Runtime.disable')
|
|
1651
|
-
* End of DevTools Examples
|
|
1652
|
-
********************************************************
|
|
1653
1570
|
|
|
1654
|
-
|
|
1655
|
-
|
|
1571
|
+
# Run dump links and return its result
|
|
1572
|
+
#{self}.dump_links(
|
|
1573
|
+
browser_obj: 'optional - browser object returned from #open'
|
|
1656
1574
|
)
|
|
1657
1575
|
|
|
1658
|
-
|
|
1659
|
-
|
|
1576
|
+
# Run find elements by text and return its result
|
|
1577
|
+
#{self}.find_elements_by_text(
|
|
1578
|
+
browser_obj: 'optional - browser object returned from #open',
|
|
1660
1579
|
text: 'required - text to search for in the DOM'
|
|
1661
1580
|
)
|
|
1662
1581
|
|
|
1582
|
+
# Run type as human and return its result
|
|
1663
1583
|
#{self}.type_as_human(
|
|
1664
1584
|
string: 'required - string to type as human',
|
|
1665
1585
|
rand_sleep_float: 'optional - float timing in between keypress (defaults to 0.09)'
|
|
1666
|
-
)
|
|
1586
|
+
)
|
|
1667
1587
|
|
|
1668
|
-
|
|
1669
|
-
|
|
1588
|
+
# Run console and return its result
|
|
1589
|
+
#{self}.console(
|
|
1590
|
+
browser_obj: 'optional - browser object returned from #open',
|
|
1670
1591
|
js: 'required - JavaScript expression to evaluate',
|
|
1671
1592
|
return_to: 'optional - return to :console or :stdout (defaults to :console)'
|
|
1672
1593
|
)
|
|
1673
1594
|
|
|
1674
|
-
|
|
1675
|
-
|
|
1595
|
+
# Run view dom mutations and return its result
|
|
1596
|
+
#{self}.view_dom_mutations(
|
|
1597
|
+
browser_obj: 'required - browser_obj returned from #open method',
|
|
1676
1598
|
index: 'optional - index of tab to switch to (defaults to active tab)',
|
|
1677
|
-
target: 'optional - target JavaScript node to observe (defaults to document.body)'
|
|
1599
|
+
target: 'optional - target JavaScript node to observe (defaults to document.body)',
|
|
1600
|
+
observe_clobbering: 'optional - boolean to enable DOM Clobbering detection (defaults to true)',
|
|
1601
|
+
observe_redirects: 'optional - boolean to enable Insecure Redirect detection (defaults to true)',
|
|
1602
|
+
observe_resources: 'optional - boolean to enable resource load monitoring (defaults to true)'
|
|
1678
1603
|
)
|
|
1679
1604
|
|
|
1680
|
-
|
|
1681
|
-
|
|
1605
|
+
# Run hide dom mutations and return its result
|
|
1606
|
+
#{self}.hide_dom_mutations(
|
|
1607
|
+
browser_obj: 'optional - browser object returned from #open',
|
|
1682
1608
|
index: 'optional - index of tab to switch to (defaults to active tab)'
|
|
1683
1609
|
)
|
|
1684
1610
|
|
|
1611
|
+
# Run update about config and return its result
|
|
1685
1612
|
#{self}.update_about_config(
|
|
1686
|
-
browser_obj: '
|
|
1613
|
+
browser_obj: 'optional - browser object returned from #open',
|
|
1687
1614
|
key: 'required - key to update in about:config',
|
|
1688
1615
|
value: 'required - value to set for key in about:config'
|
|
1689
1616
|
)
|
|
1690
1617
|
|
|
1691
|
-
tabs
|
|
1618
|
+
# Run list tabs and return its result
|
|
1619
|
+
#{self}.list_tabs(
|
|
1692
1620
|
browser_obj: 'required - browser_obj returned from #open method)'
|
|
1693
1621
|
)
|
|
1694
1622
|
|
|
1695
|
-
tab
|
|
1623
|
+
# Run jmp tab and return its result
|
|
1624
|
+
#{self}.jmp_tab(
|
|
1696
1625
|
browser_obj: 'required - browser_obj returned from #open method)',
|
|
1697
1626
|
index: 'optional - index of tab to switch to (defaults to switching to next tab)',
|
|
1698
|
-
keyword: 'optional - keyword in title or url used to switch tabs (defaults to switching to next tab)'
|
|
1627
|
+
keyword: 'optional - keyword in title or url used to switch tabs (defaults to switching to next tab)'
|
|
1699
1628
|
)
|
|
1700
1629
|
|
|
1701
|
-
tab
|
|
1630
|
+
# Run new tab and return its result
|
|
1631
|
+
#{self}.new_tab(
|
|
1702
1632
|
browser_obj: 'required - browser_obj returned from #open method)',
|
|
1703
1633
|
url: 'optional - URL to open in new tab'
|
|
1704
1634
|
)
|
|
1705
1635
|
|
|
1706
|
-
tab
|
|
1636
|
+
# Run close tab and return its result
|
|
1637
|
+
#{self}.close_tab(
|
|
1707
1638
|
browser_obj: 'required - browser_obj returned from #open method)',
|
|
1708
1639
|
index: 'optional - index of tab to close (defaults to closing active tab)',
|
|
1709
1640
|
keyword: 'optional - keyword in title or url used to close tabs (defaults to closing active tab)'
|
|
1710
1641
|
)
|
|
1711
1642
|
|
|
1712
|
-
|
|
1643
|
+
# Run dom and return its result
|
|
1644
|
+
#{self}.dom(
|
|
1645
|
+
browser_obj: 'required - browser_obj returned from #open method)'
|
|
1646
|
+
)
|
|
1647
|
+
|
|
1648
|
+
# Run get page state and return its result
|
|
1649
|
+
#{self}.get_page_state(
|
|
1713
1650
|
browser_obj: 'required - browser_obj returned from #open method)'
|
|
1714
1651
|
)
|
|
1715
1652
|
|
|
1716
|
-
|
|
1653
|
+
# Run devtools websocket messages and return its result
|
|
1654
|
+
#{self}.devtools_websocket_messages(
|
|
1717
1655
|
browser_obj: 'required - browser_obj returned from #open method)'
|
|
1718
1656
|
)
|
|
1719
1657
|
|
|
1658
|
+
# Run debugger and return its result
|
|
1720
1659
|
#{self}.debugger(
|
|
1721
1660
|
browser_obj: 'required - browser_obj returned from #open method)',
|
|
1722
1661
|
action: 'optional - action to take :enable|:pause|:resume|:disable (Defaults to :enable)'
|
|
1723
1662
|
)
|
|
1724
1663
|
|
|
1664
|
+
# Run get targets and return its result
|
|
1665
|
+
#{self}.get_targets(
|
|
1666
|
+
browser_obj: 'required - browser_obj returned from #open method)'
|
|
1667
|
+
)
|
|
1668
|
+
|
|
1669
|
+
# Run breakpoint locations and return its result
|
|
1670
|
+
#{self}.breakpoint_locations(
|
|
1671
|
+
browser_obj: 'required - browser_obj returned from #open method)'
|
|
1672
|
+
)
|
|
1673
|
+
|
|
1674
|
+
# Run step and return its result
|
|
1725
1675
|
#{self}.step(
|
|
1726
1676
|
browser_obj: 'required - browser_obj returned from #open method)',
|
|
1727
1677
|
action: 'optional - action to take :into|:out|:over (Defaults to :into)',
|
|
1728
1678
|
steps: 'optional - number of steps taken (Defaults to 1)'
|
|
1729
1679
|
)
|
|
1730
1680
|
|
|
1681
|
+
# Run toggle devtools and return its result
|
|
1731
1682
|
#{self}.toggle_devtools(
|
|
1732
1683
|
browser_obj: 'required - browser_obj returned from #open method)'
|
|
1733
1684
|
)
|
|
1734
1685
|
|
|
1686
|
+
# Run jmp devtools panel and return its result
|
|
1735
1687
|
#{self}.jmp_devtools_panel(
|
|
1736
1688
|
browser_obj: 'required - browser_obj returned from #open method)',
|
|
1737
1689
|
panel: 'optional - panel to switch to :elements|:inspector|:console|:debugger|:sources|:network'
|
|
1738
1690
|
)
|
|
1739
1691
|
|
|
1740
|
-
|
|
1692
|
+
# Close a session previously returned by #open.
|
|
1693
|
+
#{self}.close(
|
|
1741
1694
|
browser_obj: 'required - browser_obj returned from #open method)'
|
|
1742
1695
|
)
|
|
1743
1696
|
|
|
1697
|
+
# Print the AUTHOR(S) string for this module.
|
|
1744
1698
|
#{self}.authors
|
|
1745
1699
|
"
|
|
1700
|
+
constants.sort
|
|
1746
1701
|
end
|
|
1747
1702
|
end
|
|
1748
1703
|
end
|