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
|
@@ -310,46 +310,62 @@ module PWN
|
|
|
310
310
|
|
|
311
311
|
public_class_method def self.help
|
|
312
312
|
puts "USAGE:
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
313
|
+
# Run login and return its result
|
|
314
|
+
#{self}.login(
|
|
315
|
+
console_ip: 'required - required host/ip of Nexpose Console (server)',
|
|
316
|
+
username: 'required - required username',
|
|
317
|
+
password: 'optional - optional password (will prompt if nil)'
|
|
317
318
|
)
|
|
318
|
-
puts nsc_obj.public_methods
|
|
319
319
|
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
320
|
+
# Run list all individual site assets and return its result
|
|
321
|
+
#{self}.list_all_individual_site_assets(
|
|
322
|
+
nsc_obj: 'required - required nsc_obj returned from login method',
|
|
323
|
+
site_name: 'required - required Nexpose site name to update (case-sensitive)'
|
|
323
324
|
)
|
|
324
325
|
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
326
|
+
# Run update site assets and return its result
|
|
327
|
+
#{self}.update_site_assets(
|
|
328
|
+
nsc_obj: 'required - required nsc_obj returned from login method',
|
|
329
|
+
site_name: 'required - required Nexpose site name to update (case-sensitive',
|
|
330
|
+
assets: 'required - required array of hashes containing called :ip => values being IP address (All IPs not included in the :assets parameter will be removed from Nexpose)'
|
|
329
331
|
)
|
|
330
332
|
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
333
|
+
# Run delete site assets older than and return its result
|
|
334
|
+
#{self}.delete_site_assets_older_than(
|
|
335
|
+
nsc_obj: 'required - required nsc_obj returned from login method',
|
|
336
|
+
site_name: 'required - required Nexpose site name to update (case-sensitive',
|
|
337
|
+
days: 'required - required assets to remove older than number of days in this parameter'
|
|
335
338
|
)
|
|
336
339
|
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
340
|
+
# Run scan site by name and return its result
|
|
341
|
+
#{self}.scan_site_by_name(
|
|
342
|
+
nsc_obj: 'required - required nsc_obj returned from login method',
|
|
343
|
+
site_name: 'required - required Nexpose site name to scan (case-sensitive',
|
|
344
|
+
poll_interval: 'optional - optional poll interval to check the completion status of the scan (defaults to 3 minutes'
|
|
341
345
|
)
|
|
342
346
|
|
|
347
|
+
# Run generate report via existing config and return its result
|
|
348
|
+
#{self}.generate_report_via_existing_config(
|
|
349
|
+
nsc_obj: 'required - required nsc_obj returned from login method',
|
|
350
|
+
config_id: 'optional - relevant r.config_id returned when invoking the block nsc_obj.reports.each {|r| puts \#{r.name} => \#{r.config_id}}'
|
|
351
|
+
)
|
|
352
|
+
|
|
353
|
+
# Run download recurring report and return its result
|
|
343
354
|
#{self}.download_recurring_report(
|
|
344
|
-
nsc_obj: 'required nsc_obj returned from login method',
|
|
345
|
-
report_names: 'required array of report name/types to generate e.g. [
|
|
346
|
-
poll_interval: 'optional poll interval to check the completion status of report generation (defaults to 60 seconds
|
|
355
|
+
nsc_obj: 'required - required nsc_obj returned from login method',
|
|
356
|
+
report_names: 'required - required array of report name/types to generate e.g. [report.html, report.pdf, report.xml]',
|
|
357
|
+
poll_interval: 'optional - optional poll interval to check the completion status of report generation (defaults to 60 seconds'
|
|
347
358
|
)
|
|
348
359
|
|
|
349
|
-
#
|
|
360
|
+
# Run logout and return its result
|
|
361
|
+
#{self}.logout(
|
|
362
|
+
nsc_obj: 'required - required nsc_obj returned from login method'
|
|
363
|
+
)
|
|
350
364
|
|
|
365
|
+
# Print the AUTHOR(S) string for this module.
|
|
351
366
|
#{self}.authors
|
|
352
367
|
"
|
|
368
|
+
constants.sort
|
|
353
369
|
end
|
|
354
370
|
end
|
|
355
371
|
end
|
data/lib/pwn/plugins/nmap_it.rb
CHANGED
|
@@ -127,52 +127,32 @@ module PWN
|
|
|
127
127
|
|
|
128
128
|
public_class_method def self.help
|
|
129
129
|
puts "USAGE:
|
|
130
|
-
#
|
|
131
|
-
puts nmap.public_methods
|
|
132
|
-
nmap.connect_scan = true
|
|
133
|
-
nmap.service_scan = true
|
|
134
|
-
nmap.verbose = true
|
|
135
|
-
nmap.ports = [1..1024,1337]
|
|
136
|
-
nmap.targets = '127.0.0.1'
|
|
137
|
-
nmap.xml = '/tmp/nmap_port_scan_res.xml'
|
|
138
|
-
end
|
|
139
|
-
|
|
130
|
+
# nmap.connect_scan = true
|
|
140
131
|
#{self}.port_scan(
|
|
141
|
-
targets: '
|
|
142
|
-
ports: '1-
|
|
143
|
-
connect_scan:
|
|
144
|
-
service_scan:
|
|
145
|
-
script: '
|
|
146
|
-
xml: '/tmp/nmap_port_scan_res.xml'
|
|
132
|
+
targets: 'optional - hostname, IP, CIDR, or list of targets',
|
|
133
|
+
ports: 'optional - port, list, or range (e.g. 22,80,443 or 1-1024)',
|
|
134
|
+
connect_scan: 'optional - connect scan value consumed by #port_scan',
|
|
135
|
+
service_scan: 'optional - service scan value consumed by #port_scan',
|
|
136
|
+
script: 'optional - script value consumed by #port_scan',
|
|
137
|
+
xml: 'optional - /tmp/nmap_port_scan_res.xml'
|
|
147
138
|
)
|
|
148
139
|
|
|
149
|
-
#
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
host.scripts.each do |name,output|
|
|
154
|
-
output.each_line { |line| puts line }
|
|
155
|
-
end
|
|
156
|
-
|
|
157
|
-
host.each_port do |port|
|
|
158
|
-
puts port
|
|
159
|
-
|
|
160
|
-
port.scripts.each do |name,output|
|
|
161
|
-
puts name
|
|
162
|
-
output.each_line { |line| puts line }
|
|
163
|
-
end
|
|
164
|
-
end
|
|
165
|
-
end
|
|
166
|
-
end
|
|
140
|
+
# xml.each_host do |host|
|
|
141
|
+
#{self}.parse_xml_results(
|
|
142
|
+
xml_file: 'optional - xml file value consumed by #parse_xml_results'
|
|
143
|
+
)
|
|
167
144
|
|
|
145
|
+
# Run diff xml results and return its result
|
|
168
146
|
#{self}.diff_xml_results(
|
|
169
147
|
xml_a: 'required - path to nmap xml results',
|
|
170
148
|
xml_b: 'required - path to nmap xml results',
|
|
171
149
|
diff: 'required - path to nmap xml results diff'
|
|
172
150
|
)
|
|
173
151
|
|
|
152
|
+
# Print the AUTHOR(S) string for this module.
|
|
174
153
|
#{self}.authors
|
|
175
154
|
"
|
|
155
|
+
constants.sort
|
|
176
156
|
end
|
|
177
157
|
end
|
|
178
158
|
end
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'json'
|
|
4
|
+
require 'open3'
|
|
5
|
+
|
|
6
|
+
module PWN
|
|
7
|
+
module Plugins
|
|
8
|
+
# nuclei wrapper: template/severity, JSONL findings.
|
|
9
|
+
module Nuclei
|
|
10
|
+
public_class_method def self.required_bins
|
|
11
|
+
%w[nuclei]
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
public_class_method def self.scan(opts = {})
|
|
15
|
+
PWN::Plugins::PreflightChecker.require_bin!(name: 'nuclei')
|
|
16
|
+
target = opts[:target] || opts[:url]
|
|
17
|
+
raise 'ERROR: target is required' if target.to_s.empty?
|
|
18
|
+
|
|
19
|
+
cmd = ['nuclei', '-u', target.to_s, '-jsonl', '-silent']
|
|
20
|
+
cmd += ['-severity', opts[:severity].to_s] if opts[:severity]
|
|
21
|
+
cmd += ['-t', opts[:templates].to_s] if opts[:templates]
|
|
22
|
+
cmd += ['-rate-limit', opts[:rate_limit].to_s] if opts[:rate_limit]
|
|
23
|
+
stdout, stderr, status = Open3.capture3(*cmd)
|
|
24
|
+
findings = stdout.each_line.filter_map do |ln|
|
|
25
|
+
JSON.parse(ln)
|
|
26
|
+
rescue JSON::ParserError
|
|
27
|
+
nil
|
|
28
|
+
end
|
|
29
|
+
{ findings: to_findings(rows: findings), raw: findings, stderr: stderr, exit: status.exitstatus }
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
public_class_method def self.to_findings(opts = {})
|
|
33
|
+
Array(opts[:rows] || opts[:findings]).map do |r|
|
|
34
|
+
r = r.transform_keys(&:to_s) if r.is_a?(Hash)
|
|
35
|
+
info = r['info'] || {}
|
|
36
|
+
info = info.transform_keys(&:to_s) if info.is_a?(Hash)
|
|
37
|
+
{
|
|
38
|
+
title: info['name'] || r['template-id'] || 'nuclei finding',
|
|
39
|
+
severity: (info['severity'] || 'info').to_s,
|
|
40
|
+
url: r['matched-at'] || r['host'],
|
|
41
|
+
template: r['template-id'],
|
|
42
|
+
description: info['description']
|
|
43
|
+
}
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
public_class_method def self.to_defectdojo(opts = {})
|
|
48
|
+
to_findings(opts).map do |f|
|
|
49
|
+
{ title: f[:title], severity: f[:severity], description: "#{f[:url]} #{f[:template]}".strip }
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
public_class_method def self.authors
|
|
54
|
+
"AUTHOR(S):\n 0day Inc. <support@0dayinc.com>\n"
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
public_class_method def self.help
|
|
58
|
+
puts "USAGE:
|
|
59
|
+
# List host binaries this module expects to be installed.
|
|
60
|
+
#{self}.required_bins
|
|
61
|
+
|
|
62
|
+
# Run scan and return its result
|
|
63
|
+
#{self}.scan(
|
|
64
|
+
target: 'required - hostname, IP, or CIDR to scan (defaults to opts[:url])',
|
|
65
|
+
url: 'optional - HTTP(S) URL',
|
|
66
|
+
severity: 'optional - severity value consumed by #scan',
|
|
67
|
+
templates: 'optional - templates value consumed by #scan',
|
|
68
|
+
rate_limit: 'optional - requests per second passed to nuclei -rate-limit'
|
|
69
|
+
)
|
|
70
|
+
|
|
71
|
+
# Map nuclei JSONL rows into report-shaped finding hashes.
|
|
72
|
+
#{self}.to_findings(
|
|
73
|
+
rows: 'optional - Array of parsed nuclei JSONL objects',
|
|
74
|
+
findings: 'optional - alias for rows'
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
# Shape findings for a DefectDojo import payload.
|
|
78
|
+
#{self}.to_defectdojo(
|
|
79
|
+
rows: 'optional - Array of parsed nuclei JSONL objects',
|
|
80
|
+
findings: 'optional - alias for rows'
|
|
81
|
+
)
|
|
82
|
+
|
|
83
|
+
# Print the AUTHOR(S) string for this module.
|
|
84
|
+
#{self}.authors
|
|
85
|
+
"
|
|
86
|
+
constants.sort
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
data/lib/pwn/plugins/oauth2.rb
CHANGED
|
@@ -51,16 +51,22 @@ module PWN
|
|
|
51
51
|
# Display Usage for this Module
|
|
52
52
|
|
|
53
53
|
public_class_method def self.help
|
|
54
|
-
puts
|
|
55
|
-
#
|
|
54
|
+
puts "USAGE:
|
|
55
|
+
# Run decode and return its result
|
|
56
|
+
#{self}.decode(
|
|
57
|
+
oauth2_token: 'required - required oauth2 token'
|
|
58
|
+
)
|
|
56
59
|
|
|
60
|
+
# Run get value by key and return its result
|
|
57
61
|
#{self}.get_value_by_key(
|
|
58
|
-
oauth2_token: 'required oauth2 token',
|
|
59
|
-
key: 'required oauth2 token key name located within the Base64 encoded token as symbol, e.g. :company_id'
|
|
62
|
+
oauth2_token: 'required - required oauth2 token',
|
|
63
|
+
key: 'required - required oauth2 token key name located within the Base64 encoded token as symbol, e.g. :company_id'
|
|
60
64
|
)
|
|
61
65
|
|
|
66
|
+
# Print the AUTHOR(S) string for this module.
|
|
62
67
|
#{self}.authors
|
|
63
|
-
|
|
68
|
+
"
|
|
69
|
+
constants.sort
|
|
64
70
|
end
|
|
65
71
|
end
|
|
66
72
|
end
|
data/lib/pwn/plugins/ocr.rb
CHANGED
|
@@ -31,12 +31,15 @@ module PWN
|
|
|
31
31
|
|
|
32
32
|
public_class_method def self.help
|
|
33
33
|
puts "USAGE:
|
|
34
|
+
# Run process and return its result
|
|
34
35
|
#{self}.process(
|
|
35
36
|
file: 'required - path to image file'
|
|
36
37
|
)
|
|
37
38
|
|
|
39
|
+
# Print the AUTHOR(S) string for this module.
|
|
38
40
|
#{self}.authors
|
|
39
41
|
"
|
|
42
|
+
constants.sort
|
|
40
43
|
end
|
|
41
44
|
end
|
|
42
45
|
end
|
data/lib/pwn/plugins/open_api.rb
CHANGED
|
@@ -897,16 +897,19 @@ module PWN
|
|
|
897
897
|
|
|
898
898
|
public_class_method def self.help
|
|
899
899
|
puts "USAGE:
|
|
900
|
-
|
|
900
|
+
# Run generate spec and return its result
|
|
901
|
+
#{self}.generate_spec(
|
|
901
902
|
spec_paths: 'required - array of OpenAPI file paths to merge',
|
|
902
903
|
base_url: 'required - base URL for OpenAPI endpoints (e.g., http://fqdn.com)',
|
|
903
|
-
output_json_path: '
|
|
904
|
+
output_json_path: 'optional - path to save the merged OpenAPI JSON file',
|
|
904
905
|
target_version: 'optional - target OpenAPI version (default: 3.0.3)',
|
|
905
906
|
debug: 'optional - boolean to enable debug logging (default: false)'
|
|
906
907
|
)
|
|
907
908
|
|
|
909
|
+
# Print the AUTHOR(S) string for this module.
|
|
908
910
|
#{self}.authors
|
|
909
911
|
"
|
|
912
|
+
constants.sort
|
|
910
913
|
end
|
|
911
914
|
end
|
|
912
915
|
end
|
data/lib/pwn/plugins/openvas.rb
CHANGED
|
@@ -268,46 +268,54 @@ module PWN
|
|
|
268
268
|
|
|
269
269
|
public_class_method def self.help
|
|
270
270
|
puts "USAGE:
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
271
|
+
# Run get task id and return its result
|
|
272
|
+
#{self}.get_task_id(
|
|
273
|
+
task_name: 'required - required task name to start',
|
|
274
|
+
username: 'required - required username',
|
|
275
|
+
password: 'optional - optional password (will prompt if nil)'
|
|
275
276
|
)
|
|
276
277
|
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
278
|
+
# Run start task and return its result
|
|
279
|
+
#{self}.start_task(
|
|
280
|
+
task_name: 'required - required task name to start',
|
|
281
|
+
username: 'required - required username',
|
|
282
|
+
password: 'optional - optional password (will prompt if nil)'
|
|
281
283
|
)
|
|
282
284
|
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
285
|
+
# Run get task status and return its result
|
|
286
|
+
#{self}.get_task_status(
|
|
287
|
+
task_name: 'required - required task name to start',
|
|
288
|
+
username: 'required - required username',
|
|
289
|
+
password: 'optional - optional password (will prompt if nil)'
|
|
287
290
|
)
|
|
288
291
|
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
292
|
+
# Run last report id and return its result
|
|
293
|
+
#{self}.last_report_id(
|
|
294
|
+
task_name: 'required - required task name to start',
|
|
295
|
+
username: 'required - required username',
|
|
296
|
+
password: 'optional - optional password (will prompt if nil)'
|
|
293
297
|
)
|
|
294
298
|
|
|
299
|
+
# Run save report and return its result
|
|
295
300
|
#{self}.save_report(
|
|
296
|
-
report_type: 'required report type (csv|itg|pdf|txt|xml)',
|
|
297
|
-
report_id: 'required report id to save',
|
|
298
|
-
report_dir: 'required directory to save report',
|
|
299
|
-
username: 'required username',
|
|
300
|
-
password: 'optional password (will prompt if nil)',
|
|
301
|
-
report_filter: 'optional - results filter (Default:
|
|
301
|
+
report_type: 'required - required report type (csv|itg|pdf|txt|xml)',
|
|
302
|
+
report_id: 'required - required report id to save',
|
|
303
|
+
report_dir: 'required - required directory to save report',
|
|
304
|
+
username: 'required - required username',
|
|
305
|
+
password: 'optional - optional password (will prompt if nil)',
|
|
306
|
+
report_filter: 'optional - results filter (Default: apply_overrides=0 levels=hml rows=1000 min_qod=70 first=1 sort-reverse=severity'
|
|
302
307
|
)
|
|
303
308
|
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
309
|
+
# Run get report types and return its result
|
|
310
|
+
#{self}.get_report_types(
|
|
311
|
+
username: 'required - required username',
|
|
312
|
+
password: 'optional - optional password (will prompt if nil)'
|
|
307
313
|
)
|
|
308
314
|
|
|
315
|
+
# Print the AUTHOR(S) string for this module.
|
|
309
316
|
#{self}.authors
|
|
310
317
|
"
|
|
318
|
+
constants.sort
|
|
311
319
|
end
|
|
312
320
|
end
|
|
313
321
|
end
|