Linux Privilege Escalation
Masterpiece
Enumeration Scripts
LinEnum.sh
Linux Smart Enumeration
LinPEAS
Tar Wildcard
Condition
A script running by root has a tar command with
*at the endThe script folder is writable by the current user
Exploit
Reference:
Example:
TryHackMe: Skynet
If you see a root script running tar command with Wildcard, you may inject command! For example, root is running a cron job with the following script:
As you see, there is a wildcard at the end of the tar command.
The exploit condition is having Write permission on /var/www/html. If so, follow the following step to get a root reverse shell:
Write a bash script (Reverse Shell command) and save as
/var/www/html/shell.sh
2. Navigate to /var/www/html and do:
3. Launch a netcat listener locally
Next time when root runs the cron, a reverse shell will call back.
MySQL User-defined Function
Condition
MySQL is running as root (Use
ps aux | grep mysqlto check)MySQL root account access to mysql database
Exploit
Compile the library
Get into mysql as mysql root user
Then use the created bash with SUID to escalate the privilege
Readable /etc/shadow
Condition
/etc/shadowis readable (Usels -l /etc/shadowto check)
Exploit
Read /etc/shadow and copy the hashes into a file
Then use john / hashcat to crack the hash
Note that john will detect and show the hash algorithm used.
In hashcat, we need to find the module to be used. For example, if it is a sha512crypt ($6$), we can find out the according module using:
Then we can use -m 1800 to crack the hash.
Writable /etc/shadow
Condition
/etc/shadowis writable (Usels -l /etc/shadowto check)
Exploit
The target is to change the root password. First generate a salted hash using mkpasswd
Replace root salted hash by the above output in /etc/shadow
Writable /etc/passwd
Condition
/etc/passwdis writable (Usels -l /etc/passwdto check)
Exploit
One-liner:
Alternatively, generate a password hash using openssl
Then add it to /etc/passwd
Sudo apache2
Condition
Have SUDO privilege to run
apache2(sudo -lto check)
Exploit
Read the first line of /etc/shadow to obtain the salted hash.
Sudo - Environment Variables
Condition
Sudo privilege to run anything (
sudo -lto check)LD_PRELOADandLD_LIBRARY_PATHare inherited from the user's environmentLD_PRELOADloads a shared object before any others when a program is run.LD_LIBRARY_PATHprovides a list of directories where shared libraries are searched for first.
Exploit - Preload
preload.c
Compile proload.c:
Run one of the programs you are allowed to run via sudo (listed when running sudo -l) (apache2 as an example here), while setting the LD_PRELOAD environment variable to the full path of the new shared object:
Then the current user will become root.
Exploit - Library_PATH
library_path.c:
First you have to find which a sudo program will call, for example:
Then we can hijack any one of the library above, libcrypto.so.1 for example. To do so, compile:
Then point LD_LIBRARY_PATH to tmp folder when running sudo apache2
SUID / GUID bits
Condition
Some of the results could be ab-usable
nmap
sh / bash
less / more
man
vim / nano
find
iftop
awk
Use https://gtfobins.github.io/ to see help to make use of them
Some of them could be vulnerable
exim-4.84-3 --> Search for exploit in exploit-db (CVE-2016-1531)
SUID / SGID - suid-so Shared Object Injection
Condition
suid-sohas root SUID set
Exploit
First run:
Then use strace on suid-so and search the output for open/access calls and for no such file errors:
Find a directory that is writable by the current user. For example:
Then compile the following library:
libcalc.c
Compile and output to the directory:
Finally execute suid-so:
SUID / SGID - suid-env
Condition
suid-envhas root suid set
Exploit
First run:
Likely to be used to run apache server. Then try to use strings
It is vulnerable since the full path of service (/usr/sbin/service) is not used. Then we can hijack the PATH.
service.c
Compile service.c:
Then refine the PATH variable:
Run suid-env
SUID / SGID - Abuse Shell Feature (Bash < 4.2-048)
Condition
Root SUID set for a binary
Bash < 4.2.048
Exploit
Use strings to inspect the SUID binary
In Bash versions <4.2-048 it is possible to define shell functions with names that resemble file paths, then export those functions so that they are used instead of any actual executable at that file path.
Then we can create a Bash function with the name /usr/sbin/service
When running the SUID binary, we will get a root shell:
SUID / SGID - Abuse Shell Features (Bash < 4.4)
Condition
Root SUID binary
Bash < 4.4
Exploit
When in debugging mode, Bash uses the environment variable PS4 to display an extra prompt for debugging statements.
Run the SUID binary with bash debugging enabled and the PS4 variable set to an embedded command which create an SUID version of bash:
Then run rootbash:
History File
Exploit
Trivial ...
Config File
Exploit
Find common files which has password ...
/var/www/html/wp-config.phpxxx.ovpn...
Exposed SSH Key
Exploit
First retrieve the SSH key. Then
Finally use it to logon:
Remote NFS
Files created via NFS inherit the remote user's ID. If the user is root, and root squashing is enabled, the ID will instead be set to the "nobody" user.
Exploit
On the target, check NFS configuration:
rw
insecure
no_root_squash
Then on Kali, as root, do the following:
Then generate a bash binary with root SUID:
Then on the target, just do
(Side note: Never use no_root_squash! Use root_squash instead and so things put by the nfs user will have both UID and GID set to nobody)
Kernel Exploit
hostnamectl
uname -a
...
Last updated
