GTFOBins (478 executables) at commit acd5246, published on 27 May 2026. LOLBAS (245 binaries, 485 commands) at commit 2056cb7, published on 26 September 2026. Both datasets are GPL-3.0, pinned in the site and loaded by your browser.
01Analyse an output
The context is read from each line: sudo rule, SUID path, capabilities, or a bare name (unprivileged). Formats can be mixed.
sudo -lfind / -perm -4000 -type f 2>/dev/nullgetcap -r / 2>/dev/null
Results
Loading the dataset…
02Look up a binary
All its GTFOBins functions, in every context.
01Search LOLBAS
Output of dir, dir /b, Get-ChildItem or a list of paths: only the binaries LOLBAS knows are kept.
Loading the dataset…
What is privilege escalation?
Privilege escalation means obtaining higher permissions than those of the initial access, such as moving from a restricted account to root or administrator. It can exploit a vulnerability or a misconfiguration in sudo, SUID permissions, capabilities or services.
Sudo, SUID and capabilities: three ways to lend privileges
On Linux, a program normally runs with the rights of the user who starts it. Three mechanisms give it more, and each one turns an ordinary program into a way in as soon as it can run a command, read or write a file.
sudo runs the command allowed by /etc/sudoers as the runas user (root by default): an allowed pager, editor or interpreter then opens a root shell. The rule’s tags matter: NOPASSWD skips the password, SETENV lets environment variables through, NOEXEC stops the program from starting others.
The SUID bit sets the effective UID to the file owner (usually root) while the program runs, while the real UID stays yours. bash, and dash since version 0.5.11, notice the mismatch at start-up and reset the effective UID to the real one, unless given -p. That is why GTFOBins’ SUID variants run /bin/sh -p, and why a program that goes through system() gives nothing on a distribution whose shell drops privileges. A SUID binary should also be called by its full path: the copy found in the PATH may be another one, without the bit.
Capabilities (capabilities(7)) split root’s powers into about forty units set on a file with setcap. cap_setuid=ep on an interpreter is enough: os.setuid(0), then a shell. cap_dac_read_search reads any file, cap_dac_override writes to it. The letters name the sets involved: e (effective), p (permitted), i (inheritable).
Enumerating on an engagement
sudo -l lists the current user’s rules along with the Defaults that apply; sudo -ll gives the same content in long form, which the tool also reads. SUID binaries are found with find / -perm -4000 -type f 2>/dev/null (and -perm -2000 for SGID), capabilities with getcap -r / 2>/dev/null.
Paste all three outputs one after the other: the tool sorts contexts line by line, sets aside the SUID binaries shipped by the distribution and flags local binaries, which are often more interesting than the well-known ones.
linPEAS (from the PEASS-ng project) automates this enumeration and much more: cron jobs, writable files, services, vulnerable versions. It is a useful complement, at the cost of a noisy run on the target. Check the sudo version as well (sudo -V): CVE-2021-3156 (Baron Samedit) affects 1.8.2 to 1.8.31p2 and 1.9.0 to 1.9.5p1, CVE-2019-14287 versions before 1.8.28 with an (ALL, !root) runas, and CVE-2023-22809 sudoedit from 1.8.0 to 1.9.12p1. These checks belong inside the scope of an authorised test.
LD_PRELOAD, env_keep and SETENV
By default, sudo clears the environment (env_reset) and removes dangerous variables. When the Defaults contain env_keep+=LD_PRELOAD, or when a rule carries the SETENV tag, the user picks a library that the dynamic linker loads before the allowed command, with root’s rights.
The command itself no longer matters: the library’s constructor runs first. The tool shows the matching minimal library when it spots either case. A kept LD_LIBRARY_PATH allows a variant: replace a library the command loads (ldd lists them) with one built for the purpose.
LOLBAS and application allowlisting
On Windows, the LOLBAS project lists Microsoft-signed binaries, libraries and scripts that do an attacker’s work: download (certutil, bitsadmin), proxy code execution (rundll32, regsvr32, mshta, ATT&CK technique T1218), compile, encode, extract credentials. Their value lies in the signature: an AppLocker or WDAC policy that trusts Microsoft binaries lets them run, and the EDR sees them every day.
The AWL Bypass and Execute categories cover that bypass; UAC Bypass, Dump and Credentials assume elevated rights already, which the Privileges column states. Paste the output of dir C:\Windows\System32 to keep only those present on the machine.
Defending
- Write minimal sudo rules, with full paths, no editors, pagers or interpreters, and no wildcards in arguments. Prefer
sudoeditto edit a file, addNOEXECwhen the program has no reason to start others, and never keepLD_*inenv_keep. - Mount
/home,/tmp,/var/tmpand/dev/shmwithnosuid, and compare the SUID inventory with a baseline regularly: every difference needs an explanation. - Audit capabilities with
getcap -r /and remove them from interpreters (setcap -r). GTFOBins also works as a detection list: a shell spawned byfind,lessorvimstarted through sudo shows up in the logs (log_output, auditd). - On Windows, LOLBAS entries link to Sigma, Elastic and Splunk rules, and to Microsoft’s recommended block rules for WDAC. Block what has no legitimate use in your environment (
mshta,cmstp,regsvr32pointed at a URL) and monitor the rest.
?Frequently asked questions
Is my sudo -l output or SUID list sent anywhere?
The analysis runs in your browser. The GTFOBins and LOLBAS datasets ship with the page, pinned to a specific commit, and no request carries what you paste. You can paste output from a client machine without it leaving your workstation.
Why is a binary that GTFOBins knows not shown as exploitable?
GTFOBins describes each technique for specific contexts: unprivileged, sudo, SUID or capabilities. mount and passwd only have sudo techniques, and perl has no SUID shell in the dataset. The tool only shows what applies to the detected context; the direct lookup shows everything else.
What can I do when the sudo rule fixes the arguments?
sudo then refuses any other command line, and most techniques do not work as published. Look for an escape from inside the program it starts (a pager or an editor often opens a shell), check whether the script or file passed as an argument is writable, and look at wildcards: in sudoers, * also matches spaces and ../.
Why does python3.8 become python?
Distributions install versioned names (python3.8, perl5.30, php8.1) or variants (vim.basic, nc.openbsd). The tool tries the exact name, then strips the suffix and version numbers, and only keeps names that exist in the real GTFOBins list. The commands shown use your path, /usr/bin/python3.8 for example.
Is LOLBAS about privilege escalation on Windows?
Mostly not. LOLBAS lists Microsoft-signed binaries that execute, download or encode on behalf of an attacker, and so get around application allowlisting such as AppLocker or WDAC. The UAC Bypass, Dump and Credentials categories do touch privileges, and the Privileges column gives the level each command needs.
+More tools
- >_Reverse Shell Generator
Reverse shell payloads, listeners and TTY upgrades.
- u:pDefault Credentials
Default logins for thousands of devices and applications.
- ⟲Forge
Encoding and decoding recipes, exportable to CyberChef.
Technical assessment
Request an application or infrastructure assessment
For an assessment by our team, specify the systems involved, available access and requested tests in your enquiry.