UhOh365 : A Script That Can See If An Email Address Is Valid In Office365

UhOh365 is a script that can see if an email address is valid in Office365. This does not perform any login attempts, is unthrottled, and is incredibly useful for social engineering assessments to find which emails exist and which don’t.

Microsoft does not consider “email enumeration” a vulnerability, so this is taking advantage of a “feature”. There are a couple other public Office365 email validation scripts out there, but they all (that I have seen) require at least 1 login attempt per user account. That is detectable and can be found as a light bruteforce attempt (1 “common” password across multiple accounts).

This script allows for email validation with zero login attempts and only uses Microsoft’s built-in Autodiscover API so it is invisible to the person/company who owns the email address. Furthermore, this API call appears to be completely unthrottled and I was able to validate over 2,000 email addresses within 1 minute in my testing.

Usage

The script is actually really basic and easy to use. You make a file of the emails you want to see are valid or not and pass it as an argument to the script. Or you can provide a file just of usernames and give the -s argument to automatically append a suffix to each entry:

Usage: UhOh365.py [-h] [-v] [-t THREADS] [-o OUTPUT] file

Positional Arguments:
file Input file containing one email per line

Optional Arguments:
-h, –help show this help message and exit
-v, –verbose Display each result as valid/invalid. By default only displays valid
-s, –suffix Add a domain suffix to every input line from file (e.g: contoso.com)
-t THREADS, –threads THREADS
Number of threads to run with. Default is 20
-o OUTPUT, –output OUTPUT
Output file for valid emails only
-n, –nossl Turn off SSL verification. This can increase speed if
needed
-p PROXY, –proxy PROXY
Specify a proxy to run this through (eg: ‘http://127.0.0.1:8080’)

Explanation

This is actually a very easy thing to do. It turns out the /autodiscover/autodiscover.json/v1.0/{EMAIL}?Protocol=Autodiscoverv1 API endpoint returns different status codes for if an email exists in o365 or not. 200 status code means it exists, a 302 means it doesn’t exist.

  • If the email does exist:
  • If the email does not exist:

Notice this request takes zero authentication or identifying parameters and it does not cause a login attempt on the target account.

Credit: Chris King

R K

Recent Posts

Shadow-rs : Harnessing Rust’s Power For Kernel-Level Security Research

shadow-rs is a Windows kernel rootkit written in Rust, demonstrating advanced techniques for kernel manipulation…

1 week ago

ExecutePeFromPngViaLNK – Advanced Execution Of Embedded PE Files via PNG And LNK

Extract and execute a PE embedded within a PNG file using an LNK file. The…

2 weeks ago

Red Team Certification – A Comprehensive Guide To Advancing In Cybersecurity Operations

Embark on the journey of becoming a certified Red Team professional with our definitive guide.…

3 weeks ago

CVE-2024-5836 / CVE-2024-6778 : Chromium Sandbox Escape via Extension Exploits

This repository contains proof of concept exploits for CVE-2024-5836 and CVE-2024-6778, which are vulnerabilities within…

3 weeks ago

Rust BOFs – Unlocking New Potentials In Cobalt Strike

This took me like 4 days (+2 days for an update), but I got it…

3 weeks ago

MaLDAPtive – Pioneering LDAP SearchFilter Parsing And Security Framework

MaLDAPtive is a framework for LDAP SearchFilter parsing, obfuscation, deobfuscation and detection. Its foundation is…

3 weeks ago