Commandes Linux
Commandes Linux
Des commandes diverses, classées selon leur domaine.
Raccourcis console:
- ctrl + r : sert à rechercher très facilement une commande déjà tapée dans le terminal auparavant. Plus rapide que la commande history. Très utile !
- ctrl + e et ctrl + a : passer au début ou à la fin de la ligne de commande
- ctrl + maj + c / ctrl + maj + v : copier/coller
- esc + . : reprend le dernier argument utilisé.
- esc + # : commente la commande actuelle et donne un nouveau prompt. Utile pour garder la ligne actuelle dans l'historique même si elle n'est pas bonne.
Divers
Changer de nom d'hôte
La commande pour changer de nom d'hôte sur les OS avec systemd :
sudo hostnamectl set-hostname nouveaunomdhote
Il faut ensuite modifier le fichier /etc/hosts en accord pour éviter les messages d'erreur
echo ‘ message ‘ | wall #Balance un message à tous les shells
wall sert à lire le contenu d’un fichier ou autre à tous les shells connectés
grep
grep sert à rechercher une chaîne de caractères dans un fichier. Elle peut s'utiliser avec des regex pour devenir un puissant outil de recherche. Dans sa forme la plus simple:
grep texte-à-trouver monfichier.txt
La commande affiche les lignes contenant une occurence du texte recherché.
Elle a des options utiles :
- -i pour ignorer la casse
- -n pour indiquer le numéro de ligne contenant le texte
grep est assez utile dans les redirections.
Services
SystemD
Pour manipuler les services avec SystemD: systemctl <action> <service>
Les actions sont :
- start
- stop
- restart
- reload
- status
- enable
- disable
Pour lister les services en cours : systemctl list-units --type=service
Editions de fichiers
Sous vim/vi :
supprimer une ligne entière(raccourci de "couper") : dd
• supprimer un caractère : x
• annuler la dernière action : u
• copier une ligne: Y
• coller la ligne : p
• quitter vi sans enregistrer: faire ESC puis deux points (:) et saisir q (pour quit) soit ESC puis :q
• enregistrer son fichier : faire ESC puis deux points (:) et saisir w (pour write)
• enregistrer son fichier et quitter : faire ESC puis deux points (:) et saisir wq
• ...
Sécurité
dpkg –verify : Sert à vérifier tous les fichiers modifiés, à prendre avec des pincettes (il se sert de ses propres checksums, qu’un attaquant pourrait modifier)
aide : cf https://kali.training/topic/monitoring-and-logging/ fait à peu près la même chose mais en plus complet
chkrootkit / rkhunter : Ces scripts servent à détecter les rootkits.
theharvester (sur kali): Recueuille des infos en cherchant des adresses mail et autres sur des moteurs de recherche : Exemple :
theharvester - d innertech.ovh -l 10 -b google : -d le domaine, -l limite à 10 résultats, -b google le moteur de recherche.
chntpw : En root : Une fois la partition windows montée sur un Linux, et qu’on est dans le dossier Windows/System32/config :
chntpw -i SAM: Permet de modifier des mots de passe Windows, changer le rôle d’utilisateurs, etc
iptables :
backup des règles : iptables-save > fichier.rules
restauration : iptables-restore < fichier.rules
lister les règles : iptables -L
faire une règle : iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT #Adaptable
Supprimer une règle : iptables -D INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
- voir les règles dans leur chaînes avec leur numéro :
iptables -L -v --line-numbers
- Insérer une règle à une ligne particulière (ici 10):
iptables -I RH-Firewall-1-INPUT 10 -i eth0 -p tcp --dport 6556 -j ACCEPT
macof Permet d’innonder la table mac-address d’un switch cible avec de fausses @MAC générées aléatoirement. Le but est soit de faire tomber un switch, soit de la faire fonctionner en mode hub pour récupérer tout ce qui passe ensuite avec un wireshark.
macof -i eth0 -s 10.0.0.8 -d 10.0.0.50
-i : interface -s source -d : destination (aucun argument obligatoire)
dsniff Sert à sniffer des mots de passe en clair qui passeraient par là. Pas besoin d’options de base, même si -d (debug mode) peut être utile.
Gestion de fichiers
which : similaire à whereis : cherche l’emplacement d’une commande
SCP :
Copy the file "foobar.txt" from a remote host to the local host
$ scp your_username@remotehost.edu:foobar.txt /some/local/directory
Copy the file "foobar.txt" from the local host to a remote host
$ scp foobar.txt your_username@remotehost.edu:/some/remote/directory
Réseau
Afficher informations reçues par DHCP (DNS, IP...)
Elles se trouvent dans un fichier .lease, généralement dans /var/lib/dhcp (Debian) ou /var/lib/NetworkManager.
Afficher la gateway
ip r
route -n
Résolution de nom de domaine :
host : host www.google.fr me renvoie l'@IP de google.fr
Ping
-c permet de limiter le nombre de paquets envoyés
-i permet de changer l'intervalle entre les paquets (valeur en secondes)
-M do : do pour "Don't Fragment", et elle peut s'associer avec:
-s (Attend une valeur en octets) qui sert à choisir la taille du paquet, pour tester le MTU d'un réseau. Quand on utilise cette option, la valeur que je donne à -s ne tient pas compte du header IPv4. Cependantla taille totale du paquet IPv4 est indiquée entre parenthèses.
Traceroute
Sert à savoir par où passe un paquet entre le départ et l'arrivée. (Son fonctionnement "interne" est détaillé dans Cisco)
-n : sert à ne pas résoudre les noms de domaine (informations numériques)
--resolve-hostnames : sur ma version, on n'as pas de -n, mais on ça à la place pour résoudre les noms de domaines
traceroute6 sert à faire de l'IPv6
-T : faire le traceroute avec des paquets TCP SYN (besoin d'être root)
-I : faire le traceroute avec des paquets ICMP
Les routeurs ne répondent pas forcément de la même façon en fonction de ce que l'on utilise. Par défaut, le traceroute Linux utilise des paquets UDP (Windows utilise ICMP par défaut).
La 1.9.4 utilise le mot SUPERMAN dans ses données envoyées. Amusant, non?
dig @adresseip : Permet de demander un transfert de zone dns
Exemple : dig@10.0.0.1 ju.lab -t AXFR
Renvoie tous les enregistrement (-t AXFR) pour la zone ju.lab
fierce -dns innertech.lab : fierce receuille des infos sur le DNS de façon plus efficace et bourrine, en tentant un transfert de zone puis en bruteforce. Ca reste dans le domaine du pentest.
nslookup : sert aussi à discuter avec les serveurs DNS.
justine@Justine-pc:~$ nslookup
> server 1.1.1.1
Default server: 1.1.1.1
Address: 1.1.1.1#53
> set type=mx
> google.com
Server: 1.1.1.1
Address: 1.1.1.1#53
Non-authoritative answer:
google.com mail exchanger = 40 alt3.aspmx.l.google.com.
google.com mail exchanger = 50 alt4.aspmx.l.google.com.
google.com mail exchanger = 10 aspmx.l.google.com.
google.com mail exchanger = 20 alt1.aspmx.l.google.com.
google.com mail exchanger = 30 alt2.aspmx.l.google.com.
Authoritative answers can be found from:
> server alt3.aspmx.l.google.com
Default server: alt3.aspmx.l.google.com
Address: 108.177.125.26#53
Default server: alt3.aspmx.l.google.com
Address: 2404:6800:4008:c01::1a#53
netstat : Montrer connexions et ports ouverts
netstat -l liste les ports en listen
netstat -lntup : -l pour listen, t pour tcp, u pour udp, -n pour le numéro sans resolve le nom, p pour le programme
lsof -i : montre les connexions avec le PID correspondant
nmap -sS -p- -Pn : Fait un scan nmap syn/stealth sur tous les ports en passant la découverte des hôtes
-sS pour SYN, -sT pour tcp connect, -sU pour udp, -sUV pour udp avec versions…
-iL permet de chharger les ip à partir d’un fichier texte (une ip par ligne)
-nmap a aussi des scripts, avec --script. Ils sont rangés en catégories : par ex’emple on peut utiliser auth, brute, broadcast, default, discovery, dos, exploit, vuln, discovery, external, fuzzer, intrusive, malware, safe ou version : ce sont toutes les catégories de scripts. Si je fais nmap --script vuln @ip, je ferais un scan de toutes les vulnérabilités sur ma cible.
fping : permet les balayages ping. Exemple :
fping -a -g 192.168.0.1 192.168.0.100 : -a sert à afficher uniquement les actifs, -g permet de définir la plage ip
route -n : affiche la table de routage de l'ordinateur
TCPdump
tcpdump : capture de traces réseaux, analysables en live ou avec wireshark. En Sudo .
tcpdump -i eth0 : basique
tcpdump -i eth0 -n : affichage numérique
tcpdump -i eth0 -n -v : verbeux
tcpdump -i eth0 -n -v -A : Dump des paquets.
tcpdump -i eth0 -n -v -A -w fichier_trace.out : Génère un fichier de la trace lisible par Wireshark (un fichier binaire, pas du texte). on peut y coller du grep en live.
Utilisation avancée avec des filtres
TCPDump permet de faire des filtres, un peu comme Wireshark. Il suffit de taper ma commande suivie d'un filtre en quotes. Exemples:
- 'port http'
- 'port 80'
- 'src port http'
- 'dst port 80'
- 'src host 192.168.1.1'
- 'dst host 192.168.1.1'
- 'host 192.168.168.1.1' ---> S'applique aux adresses IP source et destinataire
- 'tcp'
- 'udp'
- 'icmp' [Et plein d'autres protocoles reconnus par TCPdump]
On peut combiner des filtres:
- 'host www.google.fr or linuxfr.org' [On peut utiliser des opérateurs booléens]
- 'port http and host not proxy.societe.local'
- '(port http or https) and net proxy.societe.local' [net correspond à tout ce qui vient du même réseau que le proxy
Exemple de commande complète :sudo tcpdump -i enp0s3 -w monfichier.out 'filtre' #Ici le filtre sera activé dans le fichier
Gestion d'utilisateurs
usermod : permet de modifier les paramètres d'un utilisateur
Scripting
./script : lancer un script
bash -x essai.sh : lancer le script en mode debug
read : entrer des valeurs pour les assigner à des variables.
- read nom : on affiche rien, on attend juste que l'utilisateur entre une valeur
- read nom prenom : on enregistre dans deux variables, avec deux valeurs attendues, si l'utilisateur donne plus, tout ce qui reste va dans la dernière variable.
- read -p 'Entrez une valeur' variable : On affiche un prompt, pour indiquer à l'utilisateur ce que l'on attend
- read -n 10 nom : On limite à 10 caractères. L'entrée s'arrête d'elle même arrivée à 10 caractères.
- read -t 10 variable : on limite le temps donné pour entrer la valeur (temps en secondes)
- read -s variable : on affiche pas le texte saisi par l'utilisateur
Activer le routage sur Linux
Pour activer le routage sur Linux (c'est-à-dire router les paquets d'une interface à l'autre, avec du NAT) :
- Dans /etc/sysctl.conf, décommenter la ligne :
net.ipv4.ip_forward=1
- Puis entrer la commande
sysctl -p
pour recharger la configuration - Ensuite, pour le NAT, rentrer la règle suivante :
iptables -t nat -A POSTROUTING -o nom_de_votre_interface_WAN -j MASQUERADE
- On peut sauvegarder cette règle en installant le paquet iptables-persistent, qui propose de sauvegarder pendant l'installation
Il faut aussi que routeur Linux ait la box en route par défaut :
ip route add default adresse_de_l'interface_de_la_box
- Puis faire
ip route
pour vérifier.
Il faut aussi penser vérifier les routes du client :
sudo ip route
pour les voirsudo
ip route del default
pour en effacer unesudo ip route add default via ip_lan_du_routeur