├── .github └── workflows │ └── release-binary.yml ├── .gitignore ├── .goreleaser ├── linux.yml ├── mac.yml └── windows.yml ├── 1.html ├── LICENSE ├── Makefile ├── README.md ├── README_CN.md ├── SCopilot ├── templates │ ├── SCopilot.html │ ├── about.html │ ├── config.html │ └── index.html └── web.go ├── cmd ├── apollo.go ├── fastjson.go ├── log4j.go ├── other.go ├── root.go ├── shiro.go ├── struts2.go ├── weblogic.go └── webscan.go ├── conf ├── banner.go ├── config.go ├── default.go ├── envCheck.go ├── file.go └── type.go ├── crawler ├── crawlergo.go ├── crawlergo │ ├── config │ │ ├── config.go │ │ └── config_test.go │ ├── domain_collect.go │ ├── engine │ │ ├── after_dom_tasks.go │ │ ├── after_loaded_tasks.go │ │ ├── browser.go │ │ ├── collect_links.go │ │ ├── intercept_request.go │ │ ├── tab.go │ │ └── tab_test.go │ ├── filter │ │ ├── filter.go │ │ ├── simple_filter.go │ │ ├── smart_filter.go │ │ └── smart_filter_test.go │ ├── js │ │ └── javascript.go │ ├── model │ │ ├── request.go │ │ ├── url.go │ │ └── url_test.go │ ├── path_expansion.go │ ├── task_main.go │ ├── taskconfig.go │ ├── taskconfig_test.go │ ├── tools │ │ ├── common.go │ │ ├── random.go │ │ └── requests │ │ │ ├── requests.go │ │ │ ├── response.go │ │ │ └── utils.go │ └── xss │ │ ├── dom.go │ │ └── preload.js ├── katana.go └── katana_test.go ├── fingprints ├── fingprints.go ├── fingprints_test.go ├── framework │ ├── ApacheJackrabbit.go │ ├── AspMvc.go │ ├── CakePHP.go │ ├── CherryPy.go │ ├── CodeIgniter.go │ ├── Dancer.go │ ├── Django.go │ ├── Flask.go │ ├── FuelPHP.go │ ├── Grails.go │ ├── Horde.go │ ├── Karrigell.go │ ├── Laravel.go │ ├── Nette.go │ ├── Phalcon.go │ ├── Play.go │ ├── Rails.go │ ├── Seagull.go │ ├── Spring.go │ ├── Symfony.go │ ├── Web2Py.go │ ├── Yii.go │ ├── Zend.go │ └── beego.go ├── os │ ├── CentOS.go │ ├── Darwin.go │ ├── Debian.go │ ├── Fedora.go │ ├── FreeBSD.go │ ├── Gentoo.go │ ├── RedHat.go │ ├── SUSE.go │ ├── Scientific.go │ ├── SunOS.go │ ├── UNIX.go │ ├── Ubuntu.go │ ├── WindowsCE.go │ └── WindowsServer.go ├── plugins.go ├── programing │ ├── AsciiDoc.go │ ├── Asp.go │ ├── Erlang.go │ ├── Java.go │ ├── Lua.go │ ├── PHP.go │ ├── Perl.go │ ├── Python.go │ └── Ruby.go └── type.go ├── go.mod ├── go.sum ├── images ├── image-20231011213912055.png ├── image-20240101121809597.png ├── image-20240101121931631.png ├── image-20240101121957058.png └── passive-scan-client.png ├── lib.go ├── lib └── cdncheck │ ├── LICENSE.md │ ├── README.md │ ├── cdncheck.go │ ├── cdncheck_test.go │ ├── generate │ ├── input.go │ ├── options.go │ ├── ranges.go │ └── types.go │ ├── other.go │ ├── other_test.go │ ├── sources_data.go │ ├── sources_data.json │ └── types.go ├── main.go ├── pkg ├── ast │ ├── ast_parser.go │ ├── htmlparser.go │ ├── jscontext.go │ └── tree.go ├── input │ └── input.go ├── mitmproxy │ ├── README.md │ ├── go-mitmproxy.go │ ├── go-mitmproxy │ │ ├── LICENSE │ │ ├── README.md │ │ ├── README_CN.md │ │ ├── addon │ │ │ ├── decoder.go │ │ │ ├── dumper.go │ │ │ ├── maplocal.go │ │ │ ├── mapremote.go │ │ │ └── mapremote_test.go │ │ ├── cert │ │ │ ├── cert.go │ │ │ └── cert_test.go │ │ ├── helper │ │ │ ├── helper.go │ │ │ ├── host.go │ │ │ ├── host_test.go │ │ │ ├── proxy.go │ │ │ └── tls.go │ │ └── proxy │ │ │ ├── addon.go │ │ │ ├── attacker.go │ │ │ ├── connection.go │ │ │ ├── connection_test.go │ │ │ ├── entry.go │ │ │ ├── flow.go │ │ │ ├── flowencoding.go │ │ │ ├── helper.go │ │ │ ├── proxy.go │ │ │ ├── proxy_test.go │ │ │ └── websocket.go │ ├── passive.go │ ├── task.go │ └── util.go ├── mode │ ├── active.go │ └── passive.go ├── output │ ├── SCopilot.go │ ├── output.go │ ├── progress.go │ ├── report.go │ ├── screen.go │ ├── type.go │ └── vulnReport.html ├── protocols │ └── httpx │ │ ├── fuzz.go │ │ ├── proxy.go │ │ ├── request.go │ │ └── util.go ├── reverse │ ├── dig_pm.go │ └── dnslog_cn.go ├── task │ ├── scan.go │ └── task.go └── util │ ├── cdnCheck.go │ ├── codec.go │ ├── file.go │ ├── iconhash.go │ ├── parameter.go │ ├── rand.go │ ├── regexp.go │ ├── string.go │ ├── uniqueness.go │ ├── url.go │ └── util.go ├── scan ├── PerFile │ ├── cmdinject │ │ └── cmdinject.go │ ├── fastjson │ │ ├── Detect │ │ │ └── detect.go │ │ ├── LICENSE │ │ ├── README.md │ │ ├── Utils │ │ │ ├── factory.go │ │ │ ├── struct.go │ │ │ └── templates.go │ │ └── fastjson.go │ ├── jsonp │ │ └── jsonp.go │ ├── sql │ │ ├── bool.go │ │ ├── error.go │ │ ├── heuristic.go │ │ ├── images │ │ │ └── image-20230207205442610.png │ │ ├── sql.go │ │ ├── sql.md │ │ ├── sql_test.go │ │ ├── sqlmap │ │ │ ├── sqlmap.go │ │ │ └── type.go │ │ ├── time.go │ │ ├── union.go │ │ ├── util.go │ │ └── xml │ │ │ └── errors.xml │ ├── ssrf │ │ └── ssrf.go │ ├── xss │ │ ├── dom │ │ │ ├── dom.go │ │ │ ├── fuzz.go │ │ │ └── hookparse.go │ │ ├── prototype.go │ │ ├── syntaxAnalysis.go │ │ ├── xss.go │ │ └── xss.md │ └── xxe │ │ └── xxe.go ├── PerFolder │ ├── crlf │ │ └── crlf.go │ ├── iis │ │ └── iis.go │ ├── log4j │ │ └── log4j.go │ └── traversal │ │ ├── README.md │ │ ├── nginxAliasTraversal.go │ │ └── traversal_test.go ├── PerServer │ ├── nuclei.go │ ├── portScan │ │ ├── masscan │ │ │ └── masscan.go │ │ ├── portScan.go │ │ └── scan.go │ └── waybackarchive.go ├── Pocs │ ├── apollo │ │ ├── apollo.go │ │ └── apollo_test.go │ ├── java │ │ ├── shiro │ │ │ ├── CVE_2016_4437.go │ │ │ ├── dicts │ │ │ │ └── keys.txt │ │ │ ├── exploit.go │ │ │ └── gadget.go │ │ ├── struts2 │ │ │ ├── README.md │ │ │ ├── s2-001 │ │ │ │ └── s2-001.go │ │ │ ├── s2-005 │ │ │ │ └── s2-005.go │ │ │ ├── s2-007 │ │ │ │ └── s2-007.go │ │ │ ├── s2-008 │ │ │ │ └── s2-008.go │ │ │ ├── s2-009 │ │ │ │ └── s2-009.go │ │ │ ├── s2-012 │ │ │ │ └── s2-012.go │ │ │ ├── s2-013 │ │ │ │ └── s2-013.go │ │ │ ├── s2-015 │ │ │ │ └── s2-015.go │ │ │ ├── s2-016 │ │ │ │ └── s2-016.go │ │ │ ├── s2-045 │ │ │ │ └── s2-045.go │ │ │ ├── s2-046 │ │ │ │ └── s2-046.go │ │ │ ├── s2-048 │ │ │ │ └── s2-048.go │ │ │ ├── s2-053 │ │ │ │ └── s2-053.go │ │ │ ├── s2-057 │ │ │ │ └── s2-057.go │ │ │ ├── struts2.go │ │ │ └── utils │ │ │ │ └── utils.go │ │ └── weblogic │ │ │ ├── CVE_2014_4210.go │ │ │ ├── CVE_2017_10271.go │ │ │ ├── CVE_2017_3506.go │ │ │ ├── CVE_2018_2894.go │ │ │ ├── CVE_2019_2725.go │ │ │ ├── CVE_2019_2729.go │ │ │ ├── CVE_2020_14882.go │ │ │ ├── CVE_2020_14883.go │ │ │ ├── CVE_2020_2883.go │ │ │ └── CVE_2021_2109.go │ ├── nuclei │ │ ├── nuclei.go │ │ ├── nuclei_test.go │ │ ├── proxy.go │ │ ├── template.go │ │ ├── templates.go │ │ ├── update.go │ │ ├── util.go │ │ └── versioncheck.go │ ├── oa │ │ ├── seeyon │ │ │ ├── BackdoorScan.go │ │ │ ├── CNVD_2019_19299.go │ │ │ ├── CNVD_2020_62422.go │ │ │ ├── CNVD_2021_01627.go │ │ │ ├── CreateMysql.go │ │ │ ├── DownExcelBeanServlet.go │ │ │ ├── GetSessionList.go │ │ │ ├── InitDataAssess.go │ │ │ ├── ManagementStatus.go │ │ │ ├── SeeyonFastjson.go │ │ │ ├── SessionUpload.go │ │ │ └── sql.go │ │ └── yongyou │ │ │ └── nc │ │ │ └── nc.go │ └── pocs_go │ │ ├── ThinkPHP │ │ └── check.go │ │ ├── fastjson │ │ ├── check.go │ │ └── payloads.go │ │ ├── go_poc_check.go │ │ ├── jboss │ │ └── CVE_2017_12149.go │ │ ├── jenkins │ │ ├── CVE_2018_1000110.go │ │ ├── CVE_2018_1000861.go │ │ ├── CVE_2019_1003000.go │ │ └── Unauthorized.go │ │ ├── log4j │ │ ├── payload.go │ │ └── scan.go │ │ ├── phpunit │ │ └── CVE_2017_9841.go │ │ └── tomcat │ │ ├── CVE_2017_12615.go │ │ └── CVE_2020_1938.go ├── bbscan │ ├── README.md │ ├── bbscan.go │ ├── bbscan_test.go │ ├── dicts.go │ ├── fuzzfingerprints.go │ └── rules │ │ ├── black.list │ │ ├── compressed_backup_files.txt │ │ ├── config_file.txt │ │ ├── dangerous_directory.txt │ │ ├── directory_traversal.txt │ │ ├── druid.txt │ │ ├── git_and_svn.txt │ │ ├── go_pprof_debug.txt │ │ ├── java_server_faces2.txt │ │ ├── java_web_config_files.txt │ │ ├── phpinfo_or_apc.txt │ │ ├── phpmyadmin.txt │ │ ├── resin_admin.txt │ │ ├── safetyEquipment.txt │ │ ├── sensitive_url.txt │ │ ├── shell_script_disclosure.txt │ │ ├── source_code_disclosure.txt │ │ ├── springboot.txt │ │ ├── ssh_sensitive_file.txt │ │ ├── test_page.txt │ │ ├── tomcat_manager.txt │ │ └── web_editors.txt ├── gadget │ ├── README.md │ ├── brute │ │ ├── admin_brute.go │ │ ├── basic_brute.go │ │ ├── check_loginpage.go │ │ ├── dicts.go │ │ ├── dicts │ │ │ ├── jbossuserpass.txt │ │ │ ├── tomcatuserpass.txt │ │ │ ├── top100pass.txt │ │ │ └── weblogicuserpass.txt │ │ ├── hydra.go │ │ ├── hydra │ │ │ ├── dict.go │ │ │ ├── ftp.go │ │ │ ├── memcached.go │ │ │ ├── mongodb.go │ │ │ ├── mysql.go │ │ │ ├── oracle.go │ │ │ ├── postgresql.go │ │ │ ├── rdp.go │ │ │ ├── redis.go │ │ │ ├── smb.go │ │ │ ├── sqlserver.go │ │ │ ├── ssh.go │ │ │ └── util.go │ │ ├── jboss_brute.go │ │ ├── tomcat_brute.go │ │ └── weblogic_brute.go │ ├── bypass403 │ │ ├── 403bypass.go │ │ └── dict │ │ │ ├── endpaths.txt │ │ │ ├── headers.txt │ │ │ ├── httpmethods.txt │ │ │ ├── ips.txt │ │ │ ├── midpaths.txt │ │ │ └── simpleheaders.txt │ ├── collection │ │ ├── README.md │ │ ├── collection.go │ │ └── sensitive.go │ ├── jwt │ │ ├── jwt.go │ │ └── secrets.txt │ ├── sensitive │ │ ├── error.go │ │ ├── key.go │ │ ├── keys │ │ │ ├── adafruit-key.yaml │ │ │ ├── adobe │ │ │ │ ├── adobe-client.yaml │ │ │ │ └── adobe-secret.yaml │ │ │ ├── age │ │ │ │ ├── age-identity-secret-key.yaml │ │ │ │ └── age-recipient-public-key.yaml │ │ │ ├── airtable-key.yaml │ │ │ ├── algolia-key.yaml │ │ │ ├── alibaba │ │ │ │ ├── alibaba-key-id.yaml │ │ │ │ └── alibaba-secret-id.yaml │ │ │ ├── amazon │ │ │ │ ├── amazon-account-id.yaml │ │ │ │ ├── amazon-mws-auth-token.yaml │ │ │ │ ├── amazon-session-token.yaml │ │ │ │ ├── amazon-sns-token.yaml │ │ │ │ ├── aws-access-id.yaml │ │ │ │ └── aws-cognito.yaml │ │ │ ├── asana │ │ │ │ ├── asana-clientid.yaml │ │ │ │ └── asana-clientsecret.yaml │ │ │ ├── atlassian │ │ │ │ └── atlassian-api-token.yaml │ │ │ ├── azure │ │ │ │ └── azure-connection-string.yaml │ │ │ ├── beamer-api-token.yaml │ │ │ ├── bitbucket │ │ │ │ ├── bitbucket-client-id.yaml │ │ │ │ └── bitbucket-client-secret.yaml │ │ │ ├── bittrex │ │ │ │ ├── bittrex-access-key.yaml │ │ │ │ └── bittrex-secret-key.yaml │ │ │ ├── branch-key.yaml │ │ │ ├── clojars-api-token.yaml │ │ │ ├── cloudinary.yaml │ │ │ ├── code-climate-token.yaml │ │ │ ├── codecov-access-token.yaml │ │ │ ├── coinbase-access-token.yaml │ │ │ ├── confluent │ │ │ │ ├── confluent-access-token.yaml │ │ │ │ └── confluent-secret-token.yaml │ │ │ ├── contentful-api-token.yaml │ │ │ ├── cratesio-api-key.yaml │ │ │ ├── credential-exposure-file.yaml │ │ │ ├── credentials.yaml │ │ │ ├── databricks-api-token.yaml │ │ │ ├── datadog-access-token.yaml │ │ │ ├── dependency │ │ │ │ └── dependency-track.yaml │ │ │ ├── digitalocean │ │ │ │ ├── digitalocean-access-token.yaml │ │ │ │ ├── digitalocean-personal-access.yaml │ │ │ │ └── digitalocean-refresh-token.yaml │ │ │ ├── discord │ │ │ │ ├── discord-api-token.yaml │ │ │ │ ├── discord-cilent-secret.yaml │ │ │ │ └── discord-client-id.yaml │ │ │ ├── docker │ │ │ │ └── dockerhub-pat.yaml │ │ │ ├── doppler-api-token.yaml │ │ │ ├── doppler │ │ │ │ ├── doppler-audit.yaml │ │ │ │ ├── doppler-cli.yaml │ │ │ │ ├── doppler-scim.yaml │ │ │ │ ├── doppler-service-account.yaml │ │ │ │ └── doppler-service.yaml │ │ │ ├── droneci-access-token.yaml │ │ │ ├── dropbox │ │ │ │ ├── dropbox-access.yaml │ │ │ │ ├── dropbox-api-token.yaml │ │ │ │ ├── dropbox-longlived-token.yaml │ │ │ │ └── dropbox-shortlived-token.yaml │ │ │ ├── duffel-api-token.yaml │ │ │ ├── dynatrace-token.yaml │ │ │ ├── easypost │ │ │ │ ├── easypost-api-token.yaml │ │ │ │ └── easypost-test-token.yaml │ │ │ ├── etsy-access-token.yaml │ │ │ ├── facebook │ │ │ │ ├── facebook-api-token.yaml │ │ │ │ ├── facebook-client-id.yaml │ │ │ │ ├── facebook-secret.yaml │ │ │ │ └── fb-access-token.yaml │ │ │ ├── fastly-api-token.yaml │ │ │ ├── fcm-api-key.yaml │ │ │ ├── figma-access-token.yaml │ │ │ ├── finicity │ │ │ │ ├── finicity-api-token.yaml │ │ │ │ └── finicity-client-secret.yaml │ │ │ ├── finnhub-access-token.yaml │ │ │ ├── firebase-database.yaml │ │ │ ├── flickr-access-token.yaml │ │ │ ├── flutter │ │ │ │ ├── flutterwave-encryption-key.yaml │ │ │ │ ├── flutterwave-public-key.yaml │ │ │ │ └── flutterwave-secret-key.yaml │ │ │ ├── frameio-api-token.yaml │ │ │ ├── freshbooks-access-token.yaml │ │ │ ├── gcp-service-account.yaml │ │ │ ├── github │ │ │ │ ├── github-app-token.yaml │ │ │ │ ├── github-oauth-token.yaml │ │ │ │ ├── github-outdated-key.yaml │ │ │ │ ├── github-personal-token.yaml │ │ │ │ └── github-refresh-token.yaml │ │ │ ├── gitlab │ │ │ │ ├── gitlab-personal-accesstoken.yaml │ │ │ │ ├── gitlab-pipeline-triggertoken.yaml │ │ │ │ └── gitlab-runner-regtoken.yaml │ │ │ ├── gitter-access-token.yaml │ │ │ ├── gocardless-api-token.yaml │ │ │ ├── google │ │ │ │ ├── google-api.yaml │ │ │ │ ├── google-clientid.yaml │ │ │ │ └── google-oauth-clientsecret.yaml │ │ │ ├── grafana │ │ │ │ ├── grafana-api-key.yaml │ │ │ │ ├── grafana-cloud-api-token.yaml │ │ │ │ └── grafana-service-account-token.yaml │ │ │ ├── hashicorp-api-token.yaml │ │ │ ├── heroku-key.yaml │ │ │ ├── huggingface │ │ │ │ └── huggingface-user-access.yaml │ │ │ ├── jenkins-token.yaml │ │ │ ├── kubernetes │ │ │ │ ├── kubernetes-dockercfg-secret.yaml │ │ │ │ └── kubernetes-dockerconfigjson-secret.yaml │ │ │ ├── linkedin-id.yaml │ │ │ ├── linkedin │ │ │ │ ├── linkedin-client.yaml │ │ │ │ └── linkedin-secret.yaml │ │ │ ├── mailchimp-api.yaml │ │ │ ├── mailgun-api.yaml │ │ │ ├── mapbox-token.yaml │ │ │ ├── newrelic │ │ │ │ ├── newrelic-api-service.yaml │ │ │ │ ├── newrelic-license-non.yaml │ │ │ │ ├── newrelic-license.yaml │ │ │ │ ├── newrelic-pixie-apikey.yaml │ │ │ │ └── newrelic-pixie-deploykey.yaml │ │ │ ├── npm-accesstoken.yaml │ │ │ ├── nuget-key.yaml │ │ │ ├── odbc │ │ │ │ └── odbc-connection.yaml │ │ │ ├── okta │ │ │ │ └── okta-api.yaml │ │ │ ├── openai-key.yaml │ │ │ ├── particle │ │ │ │ └── particle-access.yaml │ │ │ ├── paypal-braintree-token.yaml │ │ │ ├── pictatic-api-key.yaml │ │ │ ├── postman-api-key.yaml │ │ │ ├── private-key.yaml │ │ │ ├── pypi-token.yaml │ │ │ ├── razorpay-client-id.yaml │ │ │ ├── react │ │ │ │ ├── reactapp-password.yaml │ │ │ │ └── reactapp-username.yaml │ │ │ ├── rubygems-key.yaml │ │ │ ├── s3-bucket.yaml │ │ │ ├── salesforce │ │ │ │ └── salesforce-access.yaml │ │ │ ├── sauce-access-token.yaml │ │ │ ├── segment-public-api.yaml │ │ │ ├── sendgrid-api.yaml │ │ │ ├── shopify-custom-token.yaml │ │ │ ├── shopify-private-token.yaml │ │ │ ├── shopify-public-access.yaml │ │ │ ├── shopify-shared-secret.yaml │ │ │ ├── shopify-token.yaml │ │ │ ├── slack-api.yaml │ │ │ ├── slack-webhook.yaml │ │ │ ├── square-access-token.yaml │ │ │ ├── square-oauth-secret.yaml │ │ │ ├── stackhawk-api-key.yaml │ │ │ ├── stripe-api-key.yaml │ │ │ ├── telegram-token.yaml │ │ │ ├── thingsboard │ │ │ │ └── thingsboard-access.yaml │ │ │ ├── truenas │ │ │ │ └── truenas-api.yaml │ │ │ ├── twilio-api.yaml │ │ │ ├── twitter │ │ │ │ ├── twitter-client.yaml │ │ │ │ └── twitter-secret.yaml │ │ │ ├── wireguard │ │ │ │ ├── wireguard-preshared.yaml │ │ │ │ └── wireguard-private.yaml │ │ │ ├── zapier-webhook.yaml │ │ │ └── zendesk-secret-key.yaml │ │ ├── sensitive.go │ │ ├── sensitive.md │ │ ├── wih.go │ │ └── wih.yml │ ├── swagger │ │ ├── swagger.go │ │ └── swagger_test.go │ ├── waf │ │ ├── waf-detect.go │ │ └── waf-detect.yaml │ └── waybackarchive │ │ └── waybackarchive.go ├── plugins.go ├── type.go └── util │ └── black.go └── test ├── ast_test.go ├── cdncheck_test.go ├── crawler_test.go ├── jie_test.go ├── jsluice_test.go ├── passive_test.go ├── vulnReport_test.go ├── vulnerability_report.html ├── web_test.go └── xss_test.go /.gitignore: -------------------------------------------------------------------------------- 1 | # Binaries for programs and plugins 2 | *.db 3 | .idea 4 | logs 5 | data 6 | Jie_config.yaml 7 | scan/bbscan/rules/personal_rules.txt 8 | .DS_Store 9 | test.go 10 | # Test binary, built with `go test -c` 11 | *.test 12 | 13 | # Output of the go coverage tool, specifically when used with LiteIDE 14 | *.out 15 | -------------------------------------------------------------------------------- /.goreleaser/linux.yml: -------------------------------------------------------------------------------- 1 | before: 2 | hooks: 3 | - go mod tidy 4 | project_name: Jie 5 | builds: 6 | - id: Jie-linux 7 | ldflags: 8 | - -s -w 9 | binary: Jie 10 | env: 11 | - CGO_ENABLED=1 12 | main: ./main.go 13 | goos: 14 | - linux 15 | goarch: 16 | - amd64 17 | # - arm64 18 | archives: 19 | - format: zip 20 | name_template: '{{ .ProjectName }}_{{ .Version }}_{{ if eq .Os "darwin" }}macOS{{ else }}{{ .Os }}{{ end }}_{{ .Arch }}' 21 | 22 | checksum: 23 | name_template: "{{ .ProjectName }}-linux-checksums.txt" 24 | -------------------------------------------------------------------------------- /.goreleaser/mac.yml: -------------------------------------------------------------------------------- 1 | before: 2 | hooks: 3 | - go mod tidy 4 | project_name: Jie 5 | builds: 6 | - id: Jie-darwin 7 | ldflags: 8 | - -s -w 9 | binary: Jie 10 | env: 11 | - CGO_ENABLED=1 12 | main: ./main.go 13 | goos: 14 | - darwin 15 | goarch: 16 | - amd64 17 | - arm64 18 | archives: 19 | - format: zip 20 | name_template: '{{ .ProjectName }}_{{ .Version }}_{{ if eq .Os "darwin" }}macOS{{ else }}{{ .Os }}{{ end }}_{{ .Arch }}' 21 | 22 | checksum: 23 | name_template: "{{ .ProjectName }}-mac-checksums.txt" 24 | -------------------------------------------------------------------------------- /.goreleaser/windows.yml: -------------------------------------------------------------------------------- 1 | before: 2 | hooks: 3 | - go mod tidy 4 | project_name: Jie 5 | builds: 6 | - id: Jie-windows 7 | ldflags: 8 | - -s -w 9 | binary: Jie 10 | env: 11 | - CGO_ENABLED=1 # necessary only with winpcap 12 | main: ./main.go 13 | goos: 14 | - windows 15 | goarch: 16 | - amd64 17 | # - arm64 18 | # - 386 19 | archives: 20 | - format: zip 21 | name_template: '{{ .ProjectName }}_{{ .Version }}_{{ if eq .Os "darwin" }}macOS{{ else }}{{ .Os }}{{ end }}_{{ .Arch }}' 22 | 23 | checksum: 24 | name_template: "{{ .ProjectName }}-windows-checksums.txt" 25 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | # SScan version 2 | VERSION=$(shell cat conf/banner.go |grep "const Version ="|cut -d"\"" -f2) 3 | # Output File Location 4 | DIR=data/v${VERSION} 5 | $(shell mkdir -p ${DIR}) 6 | # go build flags 删除符号表和调试信息,减小生成文件的大小 7 | LDFLAGS=-ldflags "-s -w" 8 | 9 | default: 10 | export CGO_ENABLED=1;go build ${LDFLAGS} -o ${DIR}/Jie main.go 11 | 12 | # 会在程序奔溃时生成 coredump 文件,可以使用 https://github.com/go-delve/delve 工具调试 13 | debug: 14 | export CGO_ENABLED=1;go build -o ${DIR}/Jie main.go; ulimit -c unlimited; export GOTRACEBACK=crash 15 | 16 | # clean 17 | clean: 18 | rm -rf ${DIR} -------------------------------------------------------------------------------- /cmd/apollo.go: -------------------------------------------------------------------------------- 1 | package cmd 2 | 3 | import ( 4 | "github.com/spf13/cobra" 5 | 6 | "github.com/yhy0/Jie/conf" 7 | "github.com/yhy0/Jie/scan/Pocs/apollo" 8 | ) 9 | 10 | /** 11 | @author yhy 12 | @since 2023/8/20 13 | @desc //TODO 14 | **/ 15 | 16 | var ( 17 | as string 18 | cs string 19 | ) 20 | 21 | var apolloCmd = &cobra.Command{ 22 | Use: "apollo", 23 | Short: "apollo scan && exp", 24 | Run: func(cmd *cobra.Command, args []string) { 25 | as = conf.GlobalConfig.Options.Target 26 | apollo.Run(as, cs) 27 | }, 28 | } 29 | 30 | func apolloCmdInit() { 31 | rootCmd.AddCommand(apolloCmd) 32 | apolloCmd.Flags().StringVarP(&as, "as", "a", "", "adminService url(-t)") 33 | apolloCmd.Flags().StringVarP(&cs, "cs", "c", "", "configService, spring Eureka url") 34 | apolloCmd.MarkFlagRequired("cs") 35 | } 36 | -------------------------------------------------------------------------------- /cmd/fastjson.go: -------------------------------------------------------------------------------- 1 | package cmd 2 | 3 | import ( 4 | "github.com/spf13/cobra" 5 | "github.com/yhy0/Jie/conf" 6 | "github.com/yhy0/Jie/pkg/protocols/httpx" 7 | "github.com/yhy0/Jie/scan/PerFile/fastjson" 8 | ) 9 | 10 | /** 11 | @author yhy 12 | @since 2023/8/19 13 | @desc //TODO 14 | **/ 15 | 16 | var fastjsonCmd = &cobra.Command{ 17 | Use: "fastjson", 18 | Short: "fastjson scan && exp", 19 | Run: func(cmd *cobra.Command, args []string) { 20 | for _, target := range conf.GlobalConfig.Options.Targets { 21 | fastjson.Scan(target, httpx.NewClient(nil)) 22 | } 23 | 24 | }, 25 | } 26 | 27 | func fastjsonCmdInit() { 28 | rootCmd.AddCommand(fastjsonCmd) 29 | } 30 | -------------------------------------------------------------------------------- /cmd/log4j.go: -------------------------------------------------------------------------------- 1 | package cmd 2 | 3 | import ( 4 | "github.com/spf13/cobra" 5 | "github.com/yhy0/Jie/conf" 6 | "github.com/yhy0/Jie/pkg/protocols/httpx" 7 | "github.com/yhy0/Jie/scan/Pocs/pocs_go/log4j" 8 | ) 9 | 10 | /** 11 | @author yhy 12 | @since 2023/8/19 13 | @desc //TODO 14 | **/ 15 | 16 | var log4jCmd = &cobra.Command{ 17 | Use: "log4j", 18 | Short: "log4j scan && exp", 19 | Run: func(cmd *cobra.Command, args []string) { 20 | for _, target := range conf.GlobalConfig.Options.Targets { 21 | log4j.Scan(target, "GET", "", httpx.NewClient(nil)) 22 | } 23 | 24 | }, 25 | } 26 | 27 | func log4jCmdInit() { 28 | rootCmd.AddCommand(log4jCmd) 29 | log4jCmd.Flags().StringVarP(&conf.GlobalConfig.Reverse.Host, "host", "h", "https://dig.pm", "dns host") 30 | log4jCmd.Flags().StringVarP(&domain, "domain", "d", "", "domain ") 31 | } 32 | -------------------------------------------------------------------------------- /conf/banner.go: -------------------------------------------------------------------------------- 1 | package conf 2 | 3 | /** 4 | @author: yhy 5 | @since: 2023/1/27 6 | @desc: //TODO 7 | **/ 8 | 9 | var Banner = ` 10 | ██╗██╗███████╗ 11 | ██║██║██╔════╝ 12 | ██║██║█████╗ 13 | ██ ██║██║██╔══╝ 14 | ╚█████╔╝██║███████╗ 15 | ╚════╝ ╚═╝╚══════╝ 16 | ` 17 | 18 | const Website = "https://github.com/yhy0/Jie" 19 | 20 | const Version = "1.2.0" 21 | -------------------------------------------------------------------------------- /conf/config.go: -------------------------------------------------------------------------------- 1 | package conf 2 | 3 | import ( 4 | folderutil "github.com/projectdiscovery/utils/folder" 5 | wappalyzer "github.com/projectdiscovery/wappalyzergo" 6 | "path/filepath" 7 | ) 8 | 9 | /** 10 | @author: yhy 11 | @since: 2023/2/1 12 | @desc: //TODO 13 | **/ 14 | 15 | var GlobalConfig = &Config{} 16 | 17 | var ConfigFile string 18 | 19 | var NoProgressBar bool 20 | 21 | // FilePath 一些配置文件的默认位置 22 | var FilePath string 23 | 24 | var Wappalyzer *wappalyzer.Wappalyze 25 | 26 | func init() { 27 | homedir := folderutil.HomeDirOrDefault("") 28 | 29 | userCfgDir := filepath.Join(homedir, ".config") 30 | 31 | FilePath = filepath.Join(userCfgDir, "Jie") 32 | } 33 | -------------------------------------------------------------------------------- /crawler/crawlergo/config/config_test.go: -------------------------------------------------------------------------------- 1 | package config_test 2 | 3 | import ( 4 | "github.com/yhy0/Jie/crawler/crawlergo/config" 5 | "testing" 6 | 7 | "github.com/stretchr/testify/assert" 8 | ) 9 | 10 | func TestStaticSuffix(t *testing.T) { 11 | assert.Equal(t, true, config.StaticSuffixSet.Contains("png")) 12 | assert.Equal(t, false, config.StaticSuffixSet.Contains("demo")) 13 | 14 | assert.Equal(t, true, config.ScriptSuffixSet.Contains("asp")) 15 | assert.Equal(t, false, config.ScriptSuffixSet.Contains("demo")) 16 | } 17 | -------------------------------------------------------------------------------- /crawler/crawlergo/engine/tab_test.go: -------------------------------------------------------------------------------- 1 | package engine_test 2 | 3 | import ( 4 | "sync" 5 | "testing" 6 | "time" 7 | ) 8 | 9 | func TestChannel(t *testing.T) { 10 | wg := sync.WaitGroup{} 11 | 12 | for range "..." { 13 | wg.Add(1) 14 | go func() { 15 | defer wg.Done() 16 | t.Log("=====> go func") 17 | time.Sleep(time.Second * 5) 18 | t.Log("go func done! <<<<========") 19 | }() 20 | } 21 | 22 | waitDone := func() <-chan struct{} { 23 | wg.Wait() 24 | ch := make(chan struct{}) 25 | defer close(ch) 26 | return ch 27 | } 28 | 29 | select { 30 | case <-waitDone(): 31 | t.Log("all goroutine done") 32 | case <-time.After(time.Second * 10): 33 | t.Error("timeout") 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /crawler/crawlergo/filter/filter.go: -------------------------------------------------------------------------------- 1 | package filter 2 | 3 | import ( 4 | "github.com/yhy0/Jie/crawler/crawlergo/model" 5 | ) 6 | 7 | type Handler interface { 8 | DoFilter(req *model.Request) bool 9 | } 10 | -------------------------------------------------------------------------------- /crawler/crawlergo/tools/requests/response.go: -------------------------------------------------------------------------------- 1 | package requests 2 | 3 | import ( 4 | "github.com/yhy0/logging" 5 | "io/ioutil" 6 | "net/http" 7 | ) 8 | 9 | // 自定义一些函数 10 | type Response struct { 11 | http.Response 12 | // raw text Response 13 | Text string 14 | } 15 | 16 | func getTextFromResp(r *http.Response) string { 17 | // TODO: 编码转换 18 | if r.ContentLength == 0 { 19 | return "" 20 | } 21 | b, err := ioutil.ReadAll(r.Body) 22 | if err != nil { 23 | logging.Logger.Debug("get response body err ", err) 24 | } 25 | _ = r.Body.Close() 26 | return string(b) 27 | } 28 | 29 | func NewResponse(r *http.Response) *Response { 30 | return &Response{ 31 | Response: *r, 32 | Text: getTextFromResp(r), 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /crawler/crawlergo/tools/requests/utils.go: -------------------------------------------------------------------------------- 1 | package requests 2 | 3 | import ( 4 | "github.com/pkg/errors" 5 | "net/url" 6 | "strings" 7 | ) 8 | 9 | // UrlParse 调用url.Parse,增加了对%的处理 10 | func UrlParse(sourceUrl string) (*url.URL, error) { 11 | u, err := url.Parse(sourceUrl) 12 | if err != nil { 13 | u, err = url.Parse(escapePercentSign(sourceUrl)) 14 | } 15 | if err != nil { 16 | return nil, errors.Wrap(err, "parse url error") 17 | } 18 | return u, nil 19 | } 20 | 21 | // escapePercentSign 把url中的%替换为%25 22 | func escapePercentSign(raw string) string { 23 | return strings.ReplaceAll(raw, "%", "%25") 24 | } 25 | -------------------------------------------------------------------------------- /crawler/katana_test.go: -------------------------------------------------------------------------------- 1 | package crawler 2 | 3 | import ( 4 | "github.com/projectdiscovery/katana/pkg/output" 5 | "github.com/yhy0/logging" 6 | "testing" 7 | ) 8 | 9 | /** 10 | @author: yhy 11 | @since: 2023/1/31 12 | @desc: //TODO 13 | **/ 14 | 15 | func TestKatana(t *testing.T) { 16 | logging.Logger = logging.New(false, "", "1", true) 17 | 18 | out := func(result output.Result) { // Callback function to execute for result 19 | // if ValidatePath(result.Request.URL) { 20 | // logging.Logger.Infoln(result.Request.URL) 21 | // } 22 | logging.Logger.Infoln(result.Request.URL) 23 | } 24 | 25 | Katana("https://www.baidu.com", true, true, out) 26 | } 27 | -------------------------------------------------------------------------------- /fingprints/fingprints_test.go: -------------------------------------------------------------------------------- 1 | package fingprints 2 | 3 | import ( 4 | "fmt" 5 | regexp "github.com/wasilibs/go-re2" 6 | "testing" 7 | ) 8 | 9 | /** 10 | @author: yhy 11 | @since: 2023/10/12 12 | @desc: TODO 13 | **/ 14 | 15 | func TestFingprints(t *testing.T) { 16 | headers := make(map[string][]string) 17 | 18 | headers["Generator"] = []string{"AsciiDoc 1.0.0;version:1.0.0"} 19 | headers["Set-Cookie"] = []string{"JSESSIONID="} 20 | headers["X-Powered-By"] = []string{"PHP/5.6.40-38+ubuntu20.04.1+deb.sury.org+1"} 21 | for _, p := range ProgramingPlugins { 22 | if p.Fingerprint("", headers) { 23 | t.Log(p.Name()) 24 | } 25 | } 26 | 27 | re := regexp.MustCompile(`<\w[^>]*(="/_jcr_content/)[^>]*>`) 28 | if re.FindStringIndex("_jcr_content") != nil { 29 | fmt.Println("-==") 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /fingprints/framework/ApacheJackrabbit.go: -------------------------------------------------------------------------------- 1 | package framework 2 | 3 | import ( 4 | regexp "github.com/wasilibs/go-re2" 5 | ) 6 | 7 | /** 8 | @author yhy 9 | @since 2023/10/13 10 | @desc //TODO 11 | **/ 12 | 13 | type ApacheJackrabbitPlugin struct{} 14 | 15 | func (p ApacheJackrabbitPlugin) Fingerprint(body string, headers map[string][]string) bool { 16 | re := regexp.MustCompile(`<\w[^>]*(="/_jcr_content/)[^>]*>`) 17 | if re.FindStringIndex(body) != nil { 18 | return true 19 | } 20 | return false 21 | } 22 | 23 | func (p ApacheJackrabbitPlugin) Name() string { 24 | return "Apache Jackrabbit/Adobe CRX repository" 25 | } 26 | -------------------------------------------------------------------------------- /fingprints/framework/CakePHP.go: -------------------------------------------------------------------------------- 1 | package framework 2 | 3 | import ( 4 | "strings" 5 | ) 6 | 7 | /** 8 | @author yhy 9 | @since 2023/10/13 10 | @desc //TODO 11 | **/ 12 | 13 | type CakePHPPlugin struct{} 14 | 15 | func (p CakePHPPlugin) Fingerprint(body string, headers map[string][]string) bool { 16 | for _, v := range headers { 17 | value := strings.Join(v, "") 18 | if strings.Contains(value, "CAKEPHP=") { 19 | return true 20 | } 21 | } 22 | 23 | return false 24 | } 25 | 26 | func (p CakePHPPlugin) Name() string { 27 | return "CakePHP - PHP Framework" 28 | } 29 | -------------------------------------------------------------------------------- /fingprints/framework/CherryPy.go: -------------------------------------------------------------------------------- 1 | package framework 2 | 3 | import "strings" 4 | 5 | /** 6 | @author yhy 7 | @since 2023/10/13 8 | @desc //TODO 9 | **/ 10 | 11 | type CherryPyPlugin struct{} 12 | 13 | func (p CherryPyPlugin) Fingerprint(body string, headers map[string][]string) bool { 14 | for _, v := range headers { 15 | value := strings.Join(v, "") 16 | if strings.Contains(value, "CherryPy") { 17 | return true 18 | } 19 | } 20 | return false 21 | } 22 | 23 | func (p CherryPyPlugin) Name() string { 24 | return "CherryPy - Python Framework" 25 | } 26 | -------------------------------------------------------------------------------- /fingprints/framework/CodeIgniter.go: -------------------------------------------------------------------------------- 1 | package framework 2 | 3 | import "strings" 4 | 5 | /** 6 | @author yhy 7 | @since 2023/10/13 8 | @desc //TODO 9 | **/ 10 | 11 | type CodeIgniterPlugin struct{} 12 | 13 | func (p CodeIgniterPlugin) Fingerprint(body string, headers map[string][]string) bool { 14 | for _, v := range headers { 15 | value := strings.Join(v, "") 16 | if strings.Contains(value, "ci_session=") { 17 | return true 18 | } 19 | } 20 | return false 21 | } 22 | 23 | func (p CodeIgniterPlugin) Name() string { 24 | return "CodeIgniter - PHP Framework" 25 | } 26 | -------------------------------------------------------------------------------- /fingprints/framework/Dancer.go: -------------------------------------------------------------------------------- 1 | package framework 2 | 3 | import "strings" 4 | 5 | /** 6 | @author yhy 7 | @since 2023/10/13 8 | @desc //TODO 9 | **/ 10 | 11 | type DancerPlugin struct{} 12 | 13 | func (p DancerPlugin) Fingerprint(body string, headers map[string][]string) bool { 14 | for _, v := range headers { 15 | value := strings.Join(v, "") 16 | if strings.Contains(value, "Dancer") || strings.Contains(value, "dancer.session=") { 17 | return true 18 | } 19 | } 20 | return false 21 | } 22 | 23 | func (p DancerPlugin) Name() string { 24 | return "Dancer - Perl Framework" 25 | } 26 | -------------------------------------------------------------------------------- /fingprints/framework/Django.go: -------------------------------------------------------------------------------- 1 | package framework 2 | 3 | import ( 4 | "strings" 5 | ) 6 | 7 | /** 8 | @author yhy 9 | @since 2023/10/13 10 | @desc //TODO 11 | **/ 12 | 13 | type DjangoPlugin struct{} 14 | 15 | func (p DjangoPlugin) Fingerprint(body string, headers map[string][]string) bool { 16 | for _, v := range headers { 17 | value := strings.Join(v, "") 18 | if strings.Contains(value, "wgiserver/") || strings.Contains(value, "python/") || strings.Contains(value, "csrftoken=") { 19 | return true 20 | } 21 | } 22 | 23 | if strings.Contains(body, "