Services Based Pentest Checklist

Symfony PHP

/app_dev.php
/app_dev.php/_profiler
/_profiler
/_profiler/latest
/_profiler/search
/_profiler/phpinfo
/_profiler/{token}
/_wdt/{token}
/app_example.php
/app_test.php
/index_dev.php
/config.php
/_configurator/
/_configurator/steps
/_configurator/step/{index}

Laravel

/.env
/_debugbar
/_debugbar/open
/_debugbar/clockwork/{id}
/telescope
/telescope/requests
/telescope/exceptions
/ignition/execute-solution
/ignition/update-options
/horizon
/horizon/api/*
/pulse

WordPress

/wp-config.php
/wp-config.php~
/wp-config.php.bak
/wp-config.php.old
/wp-admin/install.php
/xmlrpc.php
/wp-json/wp/v2/users
/wp-json/wp/v2/users/{id}
/readme.html
/license.txt
/wp-includes/version.php

Django

/.env
/admin
/admin/login
/debug
/__debug__
/static/debug_toolbar/
/djdt/
/djdt/debug_toolbar

Rails

/rails/info/properties
/rails/console
/rails/db
/pwned
/.env
/config/database.yml

Express.js / Node.js

/.env
/debug
/trace
/env
/config
/status
/version

Flask

/.env
/console
/debug
/flask.debug
/_debug

GraphQL

/graphql
/graph
/graphiql
/graphql/console
/graphql.php
/graphiql.php
/api/graphql
/v1/graphql
/v1/explorer
/v1/graphiql
/altair
/playground
/graphql-playground
/graphiql/fiddle

Next.js

/.env
/.env.local
/.env.production
/_next/static/development
/api/debug
/.next/

Strapi

/admin
/dashboard
/.env
/strapi
/plugins/users-permissions

Spring Boot

/actuator
/actuator/env
/actuator/beans
/actuator/mappings
/actuator/health
/actuator/info
/actuator/heapdump
/actuator/threaddump
/actuator/loggers
/actuator/conditions
/jolokia
/jolokia/exec
/hawtio
/api/hawtio

ASP.NET

/trace.axd
/elmah.axd
/Web.config
/web.config.bak
/web.config~
/App_config/connectionStrings.config

PHP General

/phpinfo.php
/info.php
/test.php
/php.ini
/php.ini~
/php.ini.bak
/server-status
/server-info

Apache

/server-status
/server-info
/mod_status
/.htaccess
/.htpasswd

Nginx

/nginx_status
/status
/stub_status

Tomcat

/manager/html
/host-manager/html
/examples
/docs
/admin

Kibana

/app/kibana
/app/timelion
/app/console
/api/console

Elasticsearch

/_cat
/_cat/indices
/_cat/nodes
/_cluster/health
/_nodes/stats
/*/_search

MongoDB

/dbadmin
/mongo
/admin/mongo
/me

Redis

/redis
/phpredisadmin
/redis-cli

Docker

/_ping
/v1.41/info
/v1.41/containers/json
/v2/_catalog

General Misconfig Checks

/.env
/.env.local
/.env.production
/.env.example
/config.php
/configuration.php
/settings.php
/*.bak
/*.old
/*.txt
/*~
/backup
/backups
/*.sql
/*.zip
/*.tar.gz
/uploads/
/files/
/assets/
/static/
/media/
/user_uploads/
/.git/
/.git/HEAD
/.git/config
/.svn/entries
/.hg/

Postman API Platform

https://www.postman.com/{companyName}/?tab=workspaces

Salesforce

- Test:
POST /aura HTTP/2
Host: {TARGET}.lightning.force.com
Content-Type: application/json

{}
------------------------
- FQDNs:
*.force.com
*.secure.force.com
*.live.siteforce.com
---------------------------
- Other Endpoints
/sfsites/aura
/s/sfsites/aura

Trello

site:trello.com "company"
https://trello.com/b/{BOARD_ID}

Figma

https://www.figma.com/file/{DesignID}/{DesignFileName}

Freshworks Freshservice

https://<companyName>.freshservice.com/support/signup

Slack

To check if you have permissions to invite a new member:

  1. Sign in to your Slack Workspace

  2. Open any channel

  3. Click on Add people

  4. A popup will open up, enter the user's email address

  5. Finally, click Add

These reproduction steps prove that you're able to invite new members without approval from an administrator.

Atlassian Bitbucket

https://bitbucket.org/{WORKSPACE_ID}
site:bitbucket.org inurl:/workspace/projects

Atlassian Confluence

## XML-RPC HTTP Request to retrieve a specific page for example:
POST /rpc/xmlrpc HTTP/1.1
Host: confluence.example.com
Content-Type: text/xml
...

<?xml version="1.0" encoding="UTF-8"?>
<methodCall>
 <methodName>confluence2.getPage</methodName>
 <params>
  <param>
   <value>
    <string>{SPACE_KEY}</string>
   </value>
  </param>
  <param>
   <value>
    <string>{PAGE_TITLE}</string>
   </value>
  </param>
 </params>
</methodCall>

--------------------------------
## Curl:
curl -X POST -H 'Content-Type: text/xml' -d '<?xml version="1.0" encoding="UTF-8"?><methodCall><methodName>confluence2.getPage</methodName><params><param><value><string>{SPACE_KEY}</string></value></param><param><value><string>{PAGE_TITLE}</string></value></param></params></methodCall>' http://confluence.example.com/rpc/xmlrpc

------------------------------------
## SOAP: /rpc/soap-axis/confluenceservice-v2
In case XSRF Protection is turned off, bad actors could post comments on other user's behalf by just sending them a link to an attacker controlled site that replicates the POST request.
There is no specific testing procedure for this misconfiguration. Email addresses are visible next to the user's name on posts for example.
Visit the following application route to check if anonymous users can view and read any information on Confluence Spaces:

https://<companyName>.atlassian.net/wiki/spaces

Atlassian Jira

You can cross-check if user registration is open for anyone by navigating to the following app route:

/secure/Signup!default.jspa
Open up any user's profile in your Jira instance as an anonymous user and verify that you can view the email address of the user.
Navigate to the following app route and check if signups are enabled:

/servicedesk/customer/user/login

AWS S3

aws s3 ls s3://{BUCKET_NAME} --no-sign-request

Cloudflare R2

You can make use of search syntaxis supported by several popular search engines like Google to enumerate R2 buckets belonging to your target company or organization:

site:.r2.dev "company"

Google Groups

site:groups.google.com "{companyName}"

Google Docs

https://docs.google.com/document/d/{documentId}/edit

Google Cloud Storage Bucket

https://{companyName}.storage.googleapis.com/
https://storage.googleapis.com/{companyName}

Indexing can also be allowed, to cross-check, you can make use of search filters that search engines like Google provide:

site:storage.googleapis.com "{companyName}"

Google OAuth

https://accounts.google.com/o/oauth2/v2/auth?
  response_type=code&
  client_id=1234.apps.googleusercontent.com&
  ...
  hd=company.com

--------------------------------
Change it to example.com:
--------------------------------

https://accounts.google.com/o/oauth2/v2/auth?
  response_type=code&
  client_id=1234.apps.googleusercontent.com&
  ...
  hd=example.com

Jenkins

- Enumerate jenkist subdomains
jenkist.domain.com

- Check those endpoints
/signup
/jenkins/signup
- Check if Groovy Script Console is publicly accessible:

/script

---------------------------------
- Test:

curl -s 'https://jenkins.{HOST}/script' -X 'POST' --data 'script={SCRIPT}'

or:

curl -s 'https://jenkins.{HOST}/scriptText' -X 'POST' --data 'script={SCRIPT}'

GitLab

/explore/snippets

Drupal

- Brute Force IDs
/node/{ID}

Automation

Last updated

Was this helpful?