Arte+7 -- by offw0rld

Hello, depuis une semaine, on ne peut plus faire un joli dump des flux d’arte, histoire des les regarder sans les lags.

Fin, en faite on peut.

Tout commence par un link http, visible dans la source, du genre :

« http://artestras.wmod.rd.llnw.net/geo/arte7/EUR_DE_FR/arteprod/A7_SGT_ENC_08_041391-007-A_PG_HQ_FR.wmv» 

Un wget sur le fichier,  suivi d’un cat, affiche:

<ASX VERSION=» 3.0″>
<ENTRY>
<REF HREF=» mms://artestras.wmod.llnwd.net/a3903/o35/geo/arte7/EUR_DE_FR/arteprod/A7_SGT_ENC_08_041391-007-A_PG_HQ_FR.wmv?e=1246303672&amp;h=4400d3ec9715e7d7ad4e3e7c21f6fefa» />
</ENTRY>
</ASX>

La variable e est un timestamp, pas dur a deviner.

Le fait que l’on arrive plus a dumper le flux, et juste que l’on ne le demande pas dans le temp alloué.

Donc pour recupérer le flux (dans les temps), suffit de faire :

wget http://artestras.wmod.rd.llnw.net/geo/arte7/EUR_DE_FR/arteprod/A7_SGT_ENC_08_041391-007-A_PG_HQ_FR.wmv -O tracks.htm

Suivi d’un :

mplayer -playlist tracks.htm -dumpstream

Et c’est tout :)

Challenge SecuriTech reloaded -- by j0rn

Waiwaiwai… J’entends d’ici les trolls me dire que l’annonce est déjà antédiluvienne (date de 10 jours déjà) et que ça a déjà été repris ça et , mais menfou, ça m’fait plaisir :)

Benjamin Caillat a mit a disposition une image vmware qui contient la plupart des épreuves de l’excellentissime (sisi) challenge SecuriTech entre 2003 et 2006

c’est ici : http://www.challenge-securitech.com/image.php

Safe proxy with java, flash, … -- by offw0rld

Introduction :

Le réseau TOR (www.torproject.org) a rendu l’utilisation d’un proxy anonymisant au plus grand nombre.
Conjointement, des méthodes basés sur des languages tel que Action Script (Flash), java, ou des requêtes Dns spécialement conçues, permettant de révéler les véritables IP se sont démocratisées.

Pour l’heure, la solution est de désactiver ces languages, entrainant des disfonctionnements,
voir empéchant totalement l’accés au site, ainsi que d’utiliser uniquement le serveur Dns de Tor,
pouvant entrainer (A vérifier) d’autre problème de sécurité (phishing par exemple).

Pour plus d’information, vous pouvez consulter : http://decloak.net/

Cette article a pour but de vous présenter une seconde méthode basé conjointement sur l’utilisation d’iptables,
et la création d’un utilisateur dédié qui ne pourras pas utiliser le réseau sans utiliser le proxy.

Cela a pour avantage de pouvoir surfer de facon anonyme, sans prendre en compte les paramètres du navigateur, et sans devoir utiliser le proxy pour des connexions sensible (banque, webmail, …).

Mise en place d’une protection :

1) Création d’un utilisateur spécifique.

La création d’un utilisateur spécifique (anontor, pour la suite de cette article),
va permettre de le forcer à utiliser le proxy, sans pour autant devoir limité les autres utilisateurs.

addgroup –system anontor
adduser –system –ingroup anontor anontor

Il vous reste plus qu’a lancer le navigateur avec cette utilisateur, via l’utilisation de sudo par exemple.

Dans le fichier /etc/sudoers :

Utilisateur ALL=(anontor) NOPASSWD: ALL

Veuillez également à ce que le fichier .Xauthority soit accessible en lecture pour anontor.

ls -l $(env | grep XAUTHORITY | awk -F « =»  {’print $2′})

2) Configuration de tor :

Les versions récentes de Tor intègrent un proxy http ainsi qu’un serveur Dns.

Dans le fichier /etc/tor/torrc

# Pour le serveur proxy
TransPort 8118

#Pour le serveur DNS
DNSListenAddress 127.0.0.1
DNSPort 53

3) Création des règles de firewall

Maintenant notre utilisateur créé, les differents proxy mis en place, nous utilisons iptables afin de forcer toute les connexions de l’utilisateur au travers du proxy, tout autre connexions ne pouvant sortir du réseau.

Redirection de toute les requêtes DNS de l’utilisateur Anontor vers le serveur DNS local :
iptables -t nat -A OUTPUT -o eth0 -m owner –uid-owner anontor -p udp –dport 53 -j DNAT –to-destination 127.0.0.1:53

Redirection de toute les requêtes Web (80 et 443) de l’utilisateur Anontor vers le serveur Proxy :
iptables -t nat -A OUTPUT -o eth0 -m owner –uid-owner anontor -m multiport -p tcp –dport 80,443 -j DNAT –to 127.0.0.1:8118

On laisse passer les paquets de l’utilisateur Anontor vers le serveur DNS et le serveur PROXY de la machine local (127.0.0.1) :
iptables -A OUTPUT -o eth0 -m owner –uid-owner anontor -d 127.0.0.1 -p udp –dport 53 -j ACCEPT
iptables -A OUTPUT -o eth0 -m owner –uid-owner anontor -d 127.0.0.1 -p tcp –dport 8118 -j ACCEPT

Suppression de tout les autre paquets de l’utilisateur Anontor :
iptables -A OUTPUT -o eth0 -m owner –uid-owner anontor -j DROP

MISE EN GARDE : Sur iptables, la 1ère règle qui correspond à un paquet et celle qui est utilisée.
Ne mettez pas ces rêgles après un iptables -A OUTPUT -j ACCEPT

Le mot de la fin :

Cette article explique la procédure pour un système basé sur Linux,
il doit cependant être possible d’utiliser une mémthode similaire sur un client Windows, MacOS ou *BSD.

Comme toute source d’information, ne prenez pas cette article pour argent comptant, et n’hésitez pas a laisser votre avis, notamment sur le dns de tor.

Concours de merde ou DTC la validation -- by Baboon

Récemment le site vie de merde a mis en ligne un jeu concours permettant de gagner un bouquin dedicacé des meilleurs quote de bashfr.org rebaptisé DansTonChat

Le jeu consiste à rechercher dans l’intégralité des VDMs un petit cadre avec une quote de bashfr (je ne peux pas me résoudre à appeller bashfr « DansTonChat» , je trouve ce changement de nom complètement à ch*** mais bon …)

M’embétant quelque peu ces temps ci j’ai décidé de faire un script python se chargeant de nous simplifier la tache …

Vie de merde utilise un cookie pour permettre l’identification de l’utilisateur, pour pouvoir naviguer sur le site depuis notre script python il va donc falloir que nous nous identifions, pour cela rien de plus simple, après googlisation on tombe sur un bout de code tout fait ICI, qui donne une fois modifié ce code :

# -*- coding: utf-8 -*-
import cookielib, urllib, urllib2
 
login = 'nibbles'
password = 'r0oX!^_^"' # lettres + chiffre + symboles + mixed case : que demander de plus ?!
 
cookiejar = cookielib.CookieJar()
urlOpener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookiejar))
 
values = {'login':login, 'pass':password }
data = urllib.urlencode(values)
request = urllib2.Request("http://www.viedemerde.fr/apps/login.php", data)
url = urlOpener.open(request)
page = url.read(500000)
 
if not 'login' in [cookie.name for cookie in cookiejar]:
  raise ValueError, "Echec connexion avec login=%s, mot de passe=%s" % (login,password)
 
print "Nous sommes connecté !"

VDM nous simplifie la tache en nous mettant à disposition une capture d’écran de ce à quoi ressemble ce que nous sommes censés cherché (cf : la news)

La première version de mon script cherchera donc la chaine « ai trouv»  dans chaque page de vie de merde (j’évite de mettre l’accent dans la chaine, celui ci pouvant être codé différemment dans la page html)

On ajoute donc au code précédent le code suivant :

for i in range(0,545):
    url = "http://www.viedemerde.fr/?page=" + str(i)
    r = urlOpener.open(url)
    kikoo = r.read()
    if kikoo.find("ai trouv") != -1 :
        print i + 1

A ce stade nous avons bien sur des faux positifs à cause de tata suzanne qui écris qu’elle a trouvée son chat dans sa machine à laver (après essorage) mais on repère quand même les pages contenant les fameuses quotes.
Pour améliorer un peu mon script, j’ai décidé bien sur de supprimer toute possibilité de faux positif mais aussi d’automatiser le « clic»  sur le lien de validation du jeu (parce que c’est trop dur de c/c 10 adresses et de cliquer sur un lien)

Après un petit coup d’oeil au code de la page html on voit que le clic envoit un ID à la page  http://www.viedemerde.fr/apps/concoursDTC_valid.php via un petit code javascript situé à l’adresse http://cdn.betacie.com/viedemerde/js/viedemerde.js :

function DTCvalid(id){
	$.get("/apps/concoursDTC_valid.php?id="+id,function(html) {
		if(html == "ok")
			$('#dtc'+id).slideUp( function() { $('#dtc'+id).html('Mise à jour effectuée !'); $('#dtc'+id).slideDown(); });
	});
}

Voila donc le code final :

# -*- coding: utf-8 -*-
import cookielib, urllib, urllib2
 
login = 'nibbles'
password = 'r0oX!^_^"'
 
cookiejar = cookielib.CookieJar()
urlOpener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookiejar))
 
values = {'login':login, 'pass':password }
data = urllib.urlencode(values)
request = urllib2.Request("http://www.viedemerde.fr/apps/login.php", data)
url = urlOpener.open(request)
page = url.read()
 
if not 'login' in [cookie.name for cookie in cookiejar]:
    raise ValueError, "Echec connexion avec login=%s, mot de passe=%s" % (login,password)
 
print "Nous sommes connecté !"
 
for i in range(0,545):
    url = "http://www.viedemerde.fr/?page=" + str(i)
    r = urlOpener.open(url)
    kikoo = r.read()
    part = kikoo.partition("DTCvalid('")
    if part[1] != "" :
        part = part[2].split("')",1)[0]
        r = urlOpener.open("http://www.viedemerde.fr/apps/concoursDTC_valid.php?id="+ part)
        if r.read() != "ok" :
            print "nié ? problème lors de la validation de la quote ..."
        else :
            print "et une de plus page "+str(i+1)+" !"

J’aurai pu faire du multi thread etc. mais ca n’a au final que peu d’interet …

Le jeu se terminant finalement par un tirage au sort mon magnifique script ne vous permettra surement pas de remporter les 50 livres mais il vous aura au moin appris que python c’est le bien et que n’importe quel kéké (moi en l’occurence) est capable de faire un code un tant soit peu utile en python pourvu qu’il soit muni d’une connexion internet et d’un cerveau

Voili voilou ;)

SMP : IDT et GDT – Linux -- by j0rn

Un petit post rapide qui fait suite (ou non) à d’autres billets qu’on peut trouver sur ce même blog, juste un bout de code permettant de récupérer l’IDT et la GDT sur chaque processeur (si tant est qu’il y en ait plusieurs évidement), mais sous Linux.

#define _GNU_SOURCE
#define __USE_GNU
 
#include <errno.h>
#include <stdio.h>
#include <sched.h>
 
struct dt_struct {
   unsigned short limit;
   unsigned long base;
} __attribute__((packed));
 
unsigned int get_sidt (void) {
   struct dt_struct idt;
   asm volatile ("sidt %0\t\n" : "=m"(idt));
   return idt.base;
}
 
unsigned int get_sgdt (void) {
   struct dt_struct gdt;
   asm volatile ("sgdt %0\t\n" : "=m"(gdt));
   return gdt.base;
}
 
int main (void) {
   int result = 0, cpu = 0, cpu2;
   cpu_set_t cs, cs2;
 
   if (sched_getaffinity (getpid (), sizeof (cs), &cs) != 0) {
      printf ("sched_getaffinity() failed : %m\n");
      return -1;
   }
 
   while (CPU_COUNT (&cs) != 0) {
      if (CPU_ISSET (cpu, &cs)) {
         CPU_ZERO (&cs2);
         CPU_SET (cpu, &cs2);
         if (sched_setaffinity (getpid (), sizeof (cs2), &cs2) != 0) {
            printf ("setaffinity(%d) failed: %m\n", cpu);
            result = 1;
         }
         else {
            cpu2 = sched_getcpu ();
            if (cpu2 == -1 && errno == ENOSYS) {
               puts ("getcpu syscall not implemented");
               return -1;
            }
            if (cpu2 != cpu) {
               printf ("getcpu results %d not possible\n", cpu2);
               result = 1;
            }
         }
         printf ("CPU %d\nIDT : 0x%08x\nGDT : 0x%08x\n\n", cpu, get_sidt(), get_sgdt());
         CPU_CLR (cpu, &cs);
      }
      ++cpu;
   }
   return 0;
}

Réfs:
http://linux.die.net/man/2/sched_getaffinity
http://www.linux.com/learn/docs/man/2479-cpucount3
https://www.codeblog.org/viewsrc/glibc-2.6.1/sysdeps/unix/sysv/linux/tst-getcpu.c
http://lkml.org/lkml/2007/5/10/578
etc.

Ptite information… -- by Enila

… Et oui, y’a pas de petits profits et je passe donc par ici pour faire la pub du nouvel e-zine d’HZV qui est sorti dernièrement.

Pour l’occasion, j’ai rédigé un article concernant la dernière des plus célèbres Lois françaises du moment : l’Hadopi.

Anéfé, j’ai écrit un article sur ce sujet car il  est fort d’actualité et qui fait peur à plus d’un (pour ceux qui maitrisent mal le sujet soit parce qu’ils y connaissent pas grand chose, soit parce qu’il ont pas tout suivi).
J’ai alors tout mis en œuvre pour qu’il soit compréhensible de tous…  Autant des bébés fans de « Teletubbies»  que de vos grands-mères fans des « Feux de l’Amour»  :).

Je relate donc le parcours de la loi Hadopi, sa mise en pratique, son fonctionnement, ainsi que ses failles et quelques hypothèses sur les moyens disponibles pour la contourner.

Je remercie TboWan, et l’équipe d’arsouyes, qui a rajouté l’e-zine dans leur jolie « Bibliothèque de l’Underground» . Pour ceux qui ne connaissent pas encore cette belle bibliothèque, je suis certaine que quelques uns y trouveront leur bonheur dans les masses de documents que l’on peut y trouver.

Bien amicalement,

Enila.

=>  Links :

- Bibliothèque de l’Underground

- Article  « Hadopi, hadoptée (ou pas…?) »
(article indépendant du magasine téléchargeable à partir de cette adresse ;) )

- Télécharger l’e-zine HackerZVoice #02 complet

web fingerprint with 414 error -- by offw0rld

Hello, je sais, mon prochain article devait porter sur cryptsetup, mais manque de temps pour le préparer, et ayant un petit (tout petit) article sous la main, voilà quoi.

Si vous avez lu le titre, le but du jeu est de découvrir quel serveur est derrière un site, ou de découvrir s’il y a un proxy devant.

L’envoi d’une URL trop longue, génère une erreur HTTP 500, et encore plus longue, une 414.

Chaque serveur web renvoit une erreur 414 selon un nombre différent de caractères qui suivent le fqdn.

Vous avez compris où je veux en venir ?

Ok, vous savez donc ce qu’il vous reste a faire, pour vous aider, j’ai déjà testé quelques serveurs, voici les résultats :

Apache : 8177
ii$ : 16383
Squid :  32652
GWS (google) : 2048
Lighttpd : 90585, parfois 90584

J’ai pas codé de tool, je ne sais pas si c’est encore super interressant.
Pour faire des test, un simple :
wget -O – http://example.com/$(python -c « print ‘a’*8177″) suffit.

Le but de cet article est :
1) Récupérer les valeurs d’autres serveurs web,
2) Savoir, sans passer par une recompilation, si il est possible de changer cette valeur.

Cet article est from scratch, merci de ne pas me signaler mes erreurs, elles sont intentionnelles.

POSIX File Capabilities -- by StalkR

L’autre jour j’avais besoin de créer des socket raw pour envoyer des datagrammes IP bruts. L’inconvénient, c’est qu’il faut être root…

Alors oui, c’est faisable avec un sudo, ou avec le bit setuid (qui permet de lancer le programme avec l’uid du propriétaire, typiquement ici il faudrait que ce soit root). Cependant, le bit setuid peut poser des problèmes de sécurité… J’ai donc cherché un moyen plus propre, où on pourrait autoriser le programme à créer des socket raw sans pour autant lui donner l’uid 0.

Bingo ! C’est les POSIX File Capabilities qui reposent sur l’architecture des capabilities.
(Lire la suite…)

Mésaventures avec des miniatures… -- by j0rn

Ca en interressera peut-être certains, on peut assez facilement faire des aperçus de sites web, typiquement une page qui nous présente une liste de sites, et lorsque l’on passe la souris sur le lien, moyennant un bouchon d’ajax, on a l’aperçu en miniature du site en question

La solution la plus simple à mettre en oeuvre (et en vérité la seule que je connaisse, ou alors embarquer gecko peut-etre… ;o) est à base de khtml2png (et son pendant éventuel, khtmld), lequel s’installe très simplement, repose évidement sur les libs de base de KDE tout ça… du plus bel effet sur une machine de production…   (<– message glissé  subreptiscement sous la porte)

L’architechture dans le cas présent est assez simple, khtmld est un daemon en écoute sur une fifo, dans /tmp typiquement, on lui passe 2 arguments, le nom de fichier et l’url à miniaturiser/snapshot-er, pas forcément dans cet ordre, et il fait sa sauce comme un grand, ou presque, avec l’aide conjointe d’un simili-serveur X, typiquement Xvfb ou Xvncserver, le tout étant que les deux soient coordonnés par le même display X – bref.

La configuration est d’une simplicitude enfantesque, /etc/khtmldrc, éventuellement retoucher un poil l’entrée dans init.d et c’est tout quasiment, mon propos n’est même pas de la détailler ici

/!\ Néanmoins /!\

- ce truc m’a fait galerer un moment pour tout dire, et a même pour ainsi dire motivé cette brève dont la verve et le verbe n’ont d’égal que l’attrait du mangeur de choca^H^H^H^Héréales chocolatées pour le développement d’applications mobiles en Java – Il convient, surtout s’il s’agit d’un serveur (un truc sur lequel on ne se connecte pas avec une session X en théorie… parceque saimal, c’est tout.), de modifier quelques fichiers dans la conf KDE, à savoir :

~/.kde/share/config/kcookiejarrc :

[...]
[Cookie Dialog]
PreferredPolicy=2
ShowCookieDetails=false

[Cookie Policy]
CookieDomainAdvice=
CookieGlobalAdvice=Accept

et ~/.kde/share/config/khtml2pngrc :

[...]
[Java/JavaScript Settings]
PopupBlockerPassivePopup=false

En effet, c’est le browser Konqueror qui est utilisé (aucune vuln dans Konqueror, pis on contrôle les sites qu’on miniaturise, c’est une évidence… oupa.), par défaut le navigateur lorsqu’il reçoit un cookie propose à l’utilisateur de l’accepter ou non… et ce comportement est bloquant ! (Accepter le cookie ? Oui/Non/Toujours –> Toujours, en visuel)

Le site originel du projet : http://wiki.goatpr0n.de/projects/khtmld

ps: Certains me diront « oui mais c’est marqué dans la faq de khtmld ton truc» , en effet, je m’en veux d’autant plus d’avoir galéré et de publier ce billet ;P

S’amuser avec la VoIP -- by Silkut

Salut à tous,

Comme premier article voici quelques pistes pour s’amuser avec un réseau VoIP simple et plus spécifiquement les différentes étapes de découverte du réseau, ainsi que quelques attaques rigolotes. (Lire la suite…)

Page suivante »