Web Application Penetration Testing Checklist: More Than 200 Custom Test Cases Prepared By: Tushar Verma Recon Phase
Web Application Penetration Testing Checklist: More Than 200 Custom Test Cases Prepared By: Tushar Verma Recon Phase
Recon Phase
Reverse Lookup
Google Dorking
Github Recon
Directory Enumeration
IP Range Enumeration
JS Files Analysis
Subdomain Takeover
Parameter Fuzzing
Port Scanning
Template-Based Scanning(Nuclei)
Wayback History
Overwrite default web application pages by specially crafted username registrations. ⇒ After registration, does
your profile link appears something as www.tushar.com/tushar?
c. Check if those default folders have been overwritten by your profile link or not."
Decode cookies using some standard decoding algorithms such as Base64, hex, URL, etc
Modify cookie.session token value by 1 bit/byte. Then resubmit and do the same for all tokens. Reduce the
amount of work you need to perform in order to identify which part of the token is actually being used and
which is not
If self-registration is available and you can choose your username, log in with a series of similar usernames
containing small variations between them, such as A, AA, AAA, AAAA, AAAB, AAAC, AABA, and so on. If another
user-specific data is submitted at login or stored in user profiles (such as an email address)
Check for session fixation i.e. value of session cookie before and after authentication
Replay the session cookie from a different effective IP address or system to check whether the server
maintains the state of the machine or not
Check if any user pertaining information is stored in cookie value or not If yes, tamper it with other user's data
Authentication Testing
Username enumeration
Bypass authentication using various SQL Injections on username and password field
Change password
Manage 2FA
Variation : If server blocks instant user requests, then try with time throttle option from intruder and repeat the
process again.
OAuth Roles
client_secret → Secret Token known to the Twitter and Twitterdeck to generate access_tokens
state → Main CSRF protection in OAuth can persist data between the user being directed to the
authorization server and back again
code → The authorization code twitter generated, will be like ?code= , the code is used with client_id
and client_secret to fetch an access_token
access_token → The token twitterdeck uses to make API requests on behalf of the user
refresh_token → Allows an application to obtain a new access_token without prompting the user
Code Flaws
Redirect_uri Flaws
Host is validated, path isn't Referer leakages): Include external content on HTML page and leak code
via Referer
Weak Regexes
Bruteforcing the keywords whitelist after host (or on any whitelist open redirect filter): ?
redirect_uri=https://§FUZZ§.com
State Flaws
Misc
Is client_secret validated?
Response Manipulation
Status Code
Manipulation
Find parameter which uses active account user id. Try to tamper it in order to change the details of the other
accounts
Create a list of features that are pertaining to a user account only. Change Email Change Password Change
account details Name, Number, Address, etc.) Try CSRF
Post login change email id and update with any existing email id. Check if its getting validated on server side or
not. Does the application send any new email confirmation link to a new user or not? What if a user does not
confirm the link in some time frame?
Open profile picture in a new tab and check the URL. Find email id/user id info. EXIF Geolocation Data Not
Stripped From Uploaded Images.
Check account deletion option if application provides it and confirm that via forgot password feature
Change email id, account id, user id parameter and try to brute force other user's password
Check whether application re authenticates for performing sensitive operation for post authentication features
Check if reset link does get expire or not if its not used by the user for certain amount of time
Find user account identification parameter and tamper Id or parameter value to change other user's password
If reset link has another param such as date and time, then. Change date and time value in order to make active
& valid reset link
Check if security questions are asked? How many guesses allowed? ⟶ Lockout policy maintained or not?
Add only spaces in new password and confirmed password. Then Hit enter and see the result
Does it display old password on the same page after completion of forget password formality?
Ask for two password reset link and use the older one from user's email
Check if active session gets destroyed upon changing the password or not?
Weak password reset implementation Password reset token sent over HTTP
Send continuous forget password requests so that it may send sequential tokens
Blind XSS
Buy Now
Tamper product ID to purchase other high valued product with low prize
Tamper product data in order to increase the number of product with the same prize
Gift/Voucher
Tamper gift/voucher value to increase/decrease the value of the voucher in terms of money. (e.g. $100 is
given as a voucher, tamper value to increase, decrease money)
Check the uniqueness of gift/voucher parameter and try guessing other gift/voucher code
Use parameter pollution technique to add the same voucher twice by adding same parameter name and
value again with & in the BurpSuite request
Identify cart id/user id for cart feature to view the added items from other user's account
Address
Use parameter pollution technique to add two shipping address instead of one trying to manipulate
application to send same item on two shipping address
Place Order
Tamper payment options parameter to change the payment method. E.g. Consider some items cannot be
ordered for cash on delivery but tampering request parameters from debit/credit/PayPal/net banking option
to cash on delivery may allow you to
place order for that particular item
Tamper the amount value for payment manipulation in each main and sub requests and responses
Check if the application itself processes your card details and then performs a transaction or it calls any
third-party payment processing company to perform a transaction
Track Order
Brute force tracking number prefix or suffix to track mass orders for other users
Check if a user A can add/remote products in Wishlist of other user B’s account
Check if a user A can add products into user B’s cart from his/her (user A’s) Wishlist section.
Check if user A can modify the shipping address of placed order by user B
Billing Activity
Check if user 'A' can view the account statement for user 'B'
Check if user 'A' can view the transaction report for user 'B'
Check if user 'A' can view the summary report for user 'B'
Check if user 'A' can register for monthly/weekly account statement via email behalf of user 'B'
Check if user 'A' can view the deposit account summary of user 'B'
Check if user 'A' with it's customer id 'a' can see the tax deduction details of user 'B' by tampering his/her
customer id 'b'
Check parameter tampering for increasing and decreasing interest rate, interest amount, and tax refund
Check if user 'A' can download the TDS details of user 'B’
Check if user 'A' can request for the cheque book behalf of user ‘B’.
Check if is it possible for user 'A' to open FD account behalf of user 'B'
Check if Can user open FD account with the more amount than the current account balance
Can user 'A' stop the payment of user 'B' via cheque number
Can user 'A' stop the payment on basis of date range for user 'B’
Can user 'A' post and enquiry behalf of user 'B' from his own account
Is it possible to transfer funds to user 'C' instead of user 'B' from the user 'A' which was intended to transfer
from user 'A' to user 'B'
Can user 'A' modify the payee list of user 'B' by parameter manipulation using his/her own account
Is it possible to add payee without any proper validation in user 'A' 's own account or to user 'B' 's account
Can user 'A' change the details of schedule transfer for user 'B’
Check if user 'A' can view the NEFT transfer details of user 'B’
Check if user 'A' can view the pending payments of user 'B'
Check if user 'A' can view the payment made details of user 'B'
/{payload}
?next={payload}
?url={payload}
?target={payload}
?rurl={payload}
Use burp 'find' option in order to find parameters such as URL, red, redirect, redir, origin, redirect_uri, target etc
Change the URL value to www.tushar.com and check if gets redirected or not
Simple characters
Multiple encoding
Merging characters
Logic Testing
Weird characters
Bypassing WAF
URL encoding
Time Delays
Oracle dbms_pipe.receive_message(('a'),10)
Conditional Delays
Oracle SELECT CASE WHEN (YOUR-CONDITION-HERE) THEN 'a'||dbms_pipe.receive_message(('a'),10) ELSE NULL END FROM du
PostgreSQL SELECT CASE WHEN (YOUR-CONDITION-HERE) THEN pg_sleep(10) ELSE pg_sleep(0) END
If script tags are banned, use <h1 and other HTML tags
If output is reflected back inside the JavaScript as a value of any variable just use alert(1)
if " are filtered then use this payload /><img src=d onerror=confirm(/tushar/);>
Unusual way to execute your JS payload is to change method from POST to GET. It bypasses filters sometimes
< and > can be replace with html entities < and >
CSRF Testing
SSO Vulnerabilities
Try To Craft SAML Request With Token And Send It To The Server And Figure
Out How Server Interact With This
If There Is Any UUID, Try To Change It To UUID Of Victim Attacker e.g. Email Of
Internal Employee Or Admin Account etc
Try To Figure Out If The Server Vulnerable To XML Signature Wrapping OR Not?
Try To Figure Out If The Server Checks The Identity Of The Signer OR Not?
If Victim Can Accept Tokens Issued By The Same Identity Provider That Services
Attacker, So You Can Takeover Victim Account
While Testing SSO Try To search In Burp Suite About URLs In Cookie Header e.g.
Host=IP; If There Is Try To Change IP To Your IP To Get SSRF
Change the content type to text/xml then insert below code. Check via repeater
"access=",
"admin=",
"dbg=",
"debug=",
"edit=",
"grant=",
"test=",
"alter=",
"clone=",
"create=",
"delete=",
"disable=",
"enable=",
"exec=",
"execute=",
"load=",
"make=",
"modify=",
"rename=",
"reset=",
"shell=",
"toggle=",
"adm=",
"root=",
"cfg=",
"dest=",
"redirect=",
"uri=",
"path=",
"continue=",
"url=",
"window=",
"next=",
"data=",
"reference=",
"site=",
"html=",
"val=",
"validate=",
"domain=",
"callback=",
"return=",
"page=",
"feed=",
"host=",
"port=",
"to=",
"out=",
"view=",
"dir=",
"show=",
"navigation=",
"open=",
"file=",
"document=",
"folder=",
"pg=",
"php_path=",
"style=",
"doc=",
"img=",
"filename="
Bypassing filters
Cloud Instances
AWS
http://instance-data
http://169.254.169.254
http://169.254.169.254/latest/user-data
http://169.254.169.254/latest/user-data/iam/security-credentials/[ROLE NAME]
http://169.254.169.254/latest/meta-data/
http://169.254.169.254/latest/meta-data/iam/security-credentials/[ROLE NAME]
http://169.254.169.254/latest/meta-data/iam/security-credentials/PhotonInstance
http://169.254.169.254/latest/meta-data/ami-id
http://169.254.169.254/latest/meta-data/reservation-id
http://169.254.169.254/latest/meta-data/hostname
http://169.254.169.254/latest/meta-data/public-keys/
http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key
http://169.254.169.254/latest/meta-data/public-keys/[ID]/openssh-key
http://169.254.169.254/latest/meta-data/iam/security-credentials/dummy
http://169.254.169.254/latest/meta-data/iam/security-credentials/s3access
http://169.254.169.254/latest/dynamic/instance-identity/document
Google Cloud
http://169.254.169.254/computeMetadata/v1/
http://metadata.google.internal/computeMetadata/v1/
http://metadata/computeMetadata/v1/
http://metadata.google.internal/computeMetadata/v1/instance/hostname
http://metadata.google.internal/computeMetadata/v1/instance/id
http://metadata.google.internal/computeMetadata/v1/project/project-id
Digital Ocean
curl http://169.254.169.254/metadata/v1/id
http://169.254.169.254/metadata/v1.json
http://169.254.169.254/metadata/v1/
http://169.254.169.254/metadata/v1/id
http://169.254.169.254/metadata/v1/user-data
http://169.254.169.254/metadata/v1/hostname
http://169.254.169.254/metadata/v1/region
http://169.254.169.254/metadata/v1/interfaces/public/0/ipv6/address
Azure
http://169.254.169.254/metadata/v1/maintenance
http://169.254.169.254/metadata/instance?api-version=2017-04-02
http://169.254.169.254/metadata/instance/network/interface/0/ipv4/ipAddress/0/publicIpAddress?api-version=2017-04-02&f
ormat=text
upload the malicious file to the archive upload functionality and observe how the application responds
upload a file and change its path to overwrite an existing system file
Metadata Leakage
Bypasses
Content-Type Bypass
CAPTCHA Testing
Reusuable Captcha
Check for the server side validation for CAPTCHA.Remove captcha block from GUI using firebug addon and
submit request to the server
Signing the asymmetrically-signed token to its symmetric algorithm match (when you have the original public
key)
Websockets Testing
XSPA in wordpress
Bruteforce in wp-login.php
Denial of Service
Cookie bomb
X Frame Options
XXSS header
HSTS header
CSP header
Referrer Policy
Cache Control
Check if normal user can access the resources of high privileged users?
Forced browsing
by redirecting output
If you find phpinfo.php file, check for the configuration leakage and try to exploit any network vulnerability.
Broken Cryptography
Web services documentation disclosure Enumeration of services, data types, input types boundaries and
limits