Archives mensuelles : mai 2019

Docker – changer les ip par défaut

Docker c’est bien mais il se met bien à l’ aise sur la machine où il se situe. J’entends par là qu’il se créé son interface docker0 avec son range d’ip 172.17.0.0. Mais parfois on veut un peu plus contrôler le scope d’ip de docker car il peut entrer en concurrence avec une ip d’un réseau interne.

Vous pouvez retrouver le bridge docker0 de différente manière :

route -n
docker network inspect
iptables -L

Mais docker est prévoyant et il est tout à fait possbile de paramétrer les ip que docker utilise pour son bridge docker0.

Pour celà c’est très simple, il suffit d’éditer ou créer un fichier /etc/docker/daemon.json de la manière suivante :

{
"bip": "192.168.1.1/24"
}

Dans notre cas docker0 utilisera un /24 sur 192.168.x.x.

Une fois ce fichier modifié, lancez :

systemctl daemon-reload
service docker restart

Vérifiez ensuite le changement du scope de docker0 :

ip a

Si l’interface docker0 est monté deux fois vous pouvez supprimer celle inactive grâce à cette commande :

ip link del docker0

Netcat – Cryptcat pour chiffrer vos échanges

Hello ! Un article dans la suite des articles dédiés à Netcat. En effet, netcat est bien mais il ne permet pas d’échanger des données de manière « sûr ». En cas de sniffage réseau, vos données sont en claires et peuvent être lues par une personnes malveillantes. Rappelons que Netcat n’est pas le meilleur moyen pour échanger entre 2 machines, il vaut mieux privilégier ssh.

Mais il est possible de crypter les échnages entre 2 netcat via Cryptcat. Cet utilitaire va vous permettre d’échanger des flux chiffrés avec un mot de passe.

Comment faire ?

Voici les éléments à retenir :

# Sans encryption
sudo tcpdump -A -i any -n host 172.17.0.2 and port 8080

nc -l -p 8080

nc 172.17.0.2 8080


# avec encryption
apt-get install cryptcat

cryptcat -k password -l -p 8080

cryptcat -k password 172.17.0.2 8080

 

Netcat – accéder à un CMD Windows sur son linux

C’est encore la magie de netcat. Aujourd’hui, je vous propose de découvrir comment connecter son linux à un windows.

Pour passer des commandes sous windows on utilise le terminale CMD et linux ne peut pas de base se connecter à windows et interagir avec. Il existe une solution néanmoins en tordant un peu les choses.

Première chose à faire installer netcat sur le windows et mettre en écoute le netcat avec une commande CMD (option -a) :

# sur le windows install de netcat
# https://joncraton.org/files/nc111nt.zip
# dézippe C:\Programm files...
# lancement de cmd
# on se rend dans le répertoire
# ipconfig : liste ip

nc -l -p 9999 -e cmd

Dans notre exemple notre netcat écoute sur le port 9999.

Puis sur notre linux, il ne nous reste plus qu’à nous connecter dessus.

# sur le linux

nc 192.168.99.100 9999

Le tour est joué, il ne reste plus qu’à passer des commandes windows comme ipconfig.

Netcat – mise en place d’un relai shell

Une fois de plus netcat va nous montrer toute sa simplicité. Aujourd’hui, je vous propose de découvrir comment créer une machine relai entre deux machines.

machine 1 > machine 2 > machine 3

Ainsi, on va utiliser 3 machines dont une servira d’intermédiaire entre les 2 autres. L’objectif étant de passer des commandes des commandes shell à partir de la machine sur la machine 3 en passant par la 2.

La démo en vidéo

Les commandes sont les suivantes :

exemple : 172.17.0.1 > 172.17.0.2 > 172.17.0.3

# sur la cible 172.17.0.3
nc -l -p 9999 -e /bin/bash

# sur le relay 172.17.0.2
mknod backpipe p
nc -l -p 7777 0<backpipe | nc 172.17.0.3 9999 1>backpipe

# sur la source 172.17.0.1
nc 172.17.0.2 7777

Netcat – lancer un shell distant

Nouvel article sur le couteau suisse méconnu netcat avec pour objectif de découvrir comment se connecter à un shell distant sur un autre serveur. Ce n’est pas la meilleure solution et la plus sécurisée car il faut en priorité utiliser SSH mais pour le fun et un besoin ponctuel cela peut s’avérer utile.

Comment faire ?

1ère option : l’écoute avec bash

Sur la machine distante on lance un netcat en écoute -l avec -e la commande bash :

nc -l -p 9999 -e /bin/bash

Pour se connecter dessus il suffit de se connecter à l’ip/port de la machine en netcat :

nc 172.17.0.2 9999

2ème option : lancement de la commande à la connexion

#source  172.17.0.1
nc -l -p 6666

#cible 172.17.0.2
nc 172.17.0.1 6666 -e '/bin/bash'

 

Netcat – envoyer des fichiers entre 2 machines

Avant de commencer, il faut le rappeler la meilleure manière et la plus sécurisée pour envoyer des fichiers entre 2 serveurs c’est scp. SCP s’appuie sur SSH on peut donc lui faire largement confiance.

Mais il faut savoir que parfois on peut utiliser netcat pour envoyer et recevoir des fichiers.

Premier cas, on veut récupérer le fichier via un curl :

# envoi d'un fichier
netcat -l -p 81 < toto.txt

# interrogation
# curl 172.17.0.2:81

Autre méthode avec un netcat à l’écoute qui écrit dans un fichier. Puis un envoi via netcat.

#réception
netcat -l -p 6666 >x.file

#envoi
netcat -w 3 172.17.0.1 6666 <toto.txt

Netcat – Comment scanner des ports ?

Le scan de port est une activité régulière d’un sysadmin ou encore d’un administrateur réseau. Nmap est une référence dans le domaine et il permet d’aller au-delà de ça.

Mais saviez vous aussi que vous pouviez faire aussi cela avec netcat ? eh oui netcat est un bon couteau suisse souvent méconnu.

Je vous invite à découvrir cela en vidéo.

 

Pour cela voici la ligne de commande et l’option -z à retenir.

# scan d'1 port
netcat -z -v 172.17.0.2 80

# scan d'un range 80-100
netcat -z -v 172.17.0.2 80-100

Netcat – Comment réaliser une connexion HTTP ?

Netcat est un outil méconnu, il est souvent utiliser pour tester l’ouverture d’un port et c’est presque tout. Mais pourtant netcat permet de faire bien plus.

Certains black hat l’utilisent pour disposer d’une backdoor le temps de faire quleques opérations par exemple. Sans aller aussi loin je vous propose en quelques articles de découvrir comment en faire plus avec ce vrai couteau suisse du système linux.

Aujourd’hui nous allons commencer très simplement avec une simple connexion HTTP avec un serveur comme apache ou nginx par exemple.

Vous pouvez décourir cela dans cette vidéo :

Pour résumer très simplement :

netcat -v 172.17.0.2 80

Puis pour tester notre connexion, nous pouvons passer :

GET / HTTP/1.0

Avec celle-ci on demande au serveur web de nous fournir la page d’accueil « / ».

Consul – présentation d’une registry de services (ex. haproxy)

Avez vous déjà entendu parler des registry de services ? zookeeper en est un exemple ou encore cosnul. C’est ce dernier que je vous propose de découvrir. Consul est un outil léger qui va vous permettre de suivre pour vous les instances de vos applications.

Ainsi Consul va gérer les pools de services à savoir sur quels serveurs sont présentes les instances de vos applications (une ou plusieurs dans le cas de scaling). Il vérifiera pour vous l’état de santé de chacun des serveurs suivant vos règles de check.

Une registry de service va stocker comme un répertoire téléphonique comment joindre une application : les ips et les ports qui vont répondre. On parle de service car il s’agit de parler d’un pool pour une même application.

Dans notre exemple, nous allons utiliser cette registry pour alimenter haproxy en service. Haproxy permettra de load-balancer les requêtes sur les différentes machines permettant de répondre pour une application.

Présentation de Consul

Installation de notre serveur Consul

Une registry devient rapidement centrale et vitale pour une infrastructure. Pour les noeuds master, il est nécessaire d’envisager un cluster. 3 serveurs permettront d’assurer l’élection d’un master pour le bon respect du quorum.

Mise en place du service systemd pour Consul

Pour faciliter l’utilisation de Consul, il est préférable de créer un service systemd. Cela permettra de faire notamment des service start ou stop.

Installation d’un agent Consul

Pour enregistrer des services/instances dans la registry tenue par les master, il est nécessaire d’installer un agent sur chacune des machines applicatives. Ces agents informeront en permanence la registry de l’état de l’instance (up, down…).

Configuration d’un healthcheck

Elément essentiel dans notre architecture, le healthcheck va permettre de vérifier l’état de l’instance d’un service. Ce check peut être simple comme un simple ping ou curl mais il peut aussi se faire sur la base d’un script personnalisé pour vérifier plus finement l’état du service. Plusieurs healthcheck peuvent aussi mis en place pour une même instance.

Utilisation de consul-template

Consul-template va permettre d’éditer automatiquement la configuration de haproxy. A partir d’un template, cet outil va modifier un fichier de configuration (ex. haproxy.cfg) et en cas de changement il sera en mesure de faire une action par exemple un reload de service (pour prendre en compte cette nouvelle configuration).

Iptables – première règle : dropper les ping

Dans les précédents articles, nous avons découvert l’intérêt d’utiliser iptables et ses principales options. Aujourd’hui je vous propose d’utiliser iptables pour créer une première règle.

C’est souvent un cas d’école, nous allons chercher à empêcher les ping. Pour cela nous allons créer une règle de DROP :

iptables -I INPUT -p icmp --icmp-type 8 -j DROP

Pour lister les règles :

iptables -L

 

Je vous propose de découvrir cela en vidéo