• STATISTIQUES
  • Il y a eu un total de 1 membres et 28434 visiteurs sur le site dans les dernières 24h pour un total de 28 435 personnes!


    Membres: 2 604
    Discussions: 3 579
    Messages: 32 816
    Tutoriels: 78
    Téléchargements: 38
    Sites dans l'annuaire: 58


  • ANNUAIRE
  • [FR] Developpez.net
    Un forum communautaire qui se veut pour les développeurs en générale. Avec presque 500 000 membr...
    Programmation
    [EN] CS Tutoring Center
    Site de challenge spécialisé dans les challenges de programmation C++ et java cependant, d'autres langages pe...
    Challenges
    [EN] Dare your mind
    JavaScript: 6, Crypto: 44, Stegano: 36, Logic: 13, Special: 27, Science: 11, Realistic: 7, Programming: 10, Crack It: 6,...
    Challenges
    [FR] Zenk-Security
    La communauté zenk-security a pour objet principal la sécurité informatique, nous sommes des tou...
    Hacking
    [EN] Defcon
    Lancé en 1992 par Dark Tangent, DEFCON est la plus ancienne et la plus grande conférence underground de...
    Hacking
    [EN] HackQuest
    Logic: 12, JavaScript: 14, Applet: 6, CrackIt: 13, Crypto: 11, Internet: 3, Exploit: 7, Stegano: 12, Flash: 1, Programmi...
    Challenges
    [FR] Cyber-Hacker
    CH - Cyber Hacker est un jeu par navigateur de simulation de hack, programmez et envoyez vos virus et piratez les aut...
    Hacking

  • DONATION
  • Si vous avez trouvé ce site internet utile, nous vous invitons à nous faire un don du montant de votre choix via Paypal. Ce don servira à financer notre hébergement.

    MERCI!




Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
[C] Découverte du réseau
24-05-2014, 19h37
Message : #1
Ekroz Hors ligne
Membre actif
*



Messages : 77
Sujets : 13
Points: 43
Inscription : May 2013
[C] Découverte du réseau
Bonsoir N-PN,

J'ai codé un petit outil en C, grâce à l'API WNet de Windows qui permet de découvrir un réseau.
La petite bêbête ne s'arrête pas là, puisqu'elle va tenter de se connecter sur tous les médias de stockage détectés où vous vous êtes déjà identifié lors de votre session et vous les afficher à l'écran un par un.
Par contre je ne sais pas pour les médias sans mot de passe si elle les détecte, ou si il faut rajouter une seconde directive avec comme arguments "" au lieu de NULL pour le mot de passe et l'identifiant, car selon la doc MSDN cela n'a pas tout à fait le même comportement.
A tester plus en profondeur donc, vu que je l'ai fais sur une VM Windows 7 sans SP1 ni aucune MAJ dans mon propre réseau, mais en tout cas il suffirait de faire tourner ce programme en boucle et il n'y aurait même pas besoin de brute-forcer les mots de passe pour qu'un ver puisse se répandre sur votre réseau.

Voici donc le code, toujours fait méticuleusement en contrôlant le retour de chaque fonction et sans fuite de mémoire :p :

Code C :
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

int wnet_enum(LPNETRESOURCE lpNetResource);

int main(int argc, char *argv[])
{
    int code = 0;

    if ((code = wnet_enum(NULL)) != EXIT_SUCCESS) {
        printf("wnet_enum(NULL): %d\n", code);
        goto end;
    }

    code = EXIT_SUCCESS;

    end:
        if (code != EXIT_SUCCESS)
            printf("code: %d\n", code);

        return code;
}

int wnet_enum(LPNETRESOURCE lpNetResource)
{
    HANDLE hEnum = NULL;
    LPNETRESOURCE lpBuffer = NULL;

    DWORD code = 0;
    DWORD bufferSize = 16 * 1024;
    DWORD cCount = -1;
    DWORD i = 0;
    DWORD code2 = 0;

    /* Starts an enumeration of network resources */
    if ((code = WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0,
                             lpNetResource, &hEnum)) != NO_ERROR) {
        switch (code) {
            case ERROR_ACCESS_DENIED:
            case ERROR_NO_NETWORK:
                code = EXIT_SUCCESS;
                goto end;
        }

        printf("WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, %p, %p): "
               "%ld\n", lpNetResource, &hEnum, code);
        goto end;
    }

    /* Allocates memory blocks for the buffer */
    if ((lpBuffer = malloc(bufferSize)) == NULL) {
        printf("malloc(%ld): NULL\n", bufferSize);
        code = EXIT_FAILURE;
        goto end;
    }

    do {
        /* Continues the enumeration of network resources that was started by
         * the call to the WNetOpenEnum function */

        if ((code = WNetEnumResource(hEnum, &cCount, lpBuffer, &bufferSize)) !=
            NO_ERROR && code != ERROR_NO_MORE_ITEMS) {
            printf("WNetEnumResource(%p, %p, %p, %p): %ld\n", hEnum, &cCount,
                         lpBuffer, &bufferSize, code);
            goto end;
        }

        for (i = 0; i < cCount; i++) {
            if ((lpBuffer[i].dwUsage & RESOURCEUSAGE_CONTAINER) ==
                RESOURCEUSAGE_CONTAINER) {
                if ((code = wnet_enum(&lpBuffer[i])) != EXIT_SUCCESS) {
                    printf("wnet_enum(%p): %ld\n", &lpBuffer[i], code);
                    goto end;
                }
            }

            if (lpBuffer[i].dwType == RESOURCETYPE_DISK) {
                /* Makes a connection to a network resource */
                if ((code = WNetAddConnection2(&lpBuffer[i], NULL, NULL,
                                                                             CONNECT_UPDATE_PROFILE)) != NO_ERROR)
                {
                    switch (code) {
                        case ERROR_ACCESS_DENIED:
                        case ERROR_BAD_NET_NAME:
                            goto next;
                    }

                    printf("WNetAddConnection2(%p, NULL, NULL, "
                                 "CONNECT_UPDATE_PROFILE): %ld\n", &lpBuffer[i], code);
                    goto end;
                }

                printf("lpBuffer[%ld].dwScope: %ld\n", i, lpBuffer[i].dwScope);
                printf("lpBuffer[%ld].dwType: %ld\n", i, lpBuffer[i].dwType);
                printf("lpBuffer[%ld].dwDisplayType: %ld\n", i,
                        lpBuffer[i].dwDisplayType);
                printf("lpBuffer[%ld].dwUsage: %ld\n", i, lpBuffer[i].dwUsage);
                printf("lpBuffer[%ld].lpLocalName: %s\n", i,
                       lpBuffer[i].lpLocalName);
                printf("lpBuffer[%ld].lpRemoteName: %s\n", i,
                       lpBuffer[i].lpRemoteName);
                printf("lpBuffer[%ld].lpComment: %s\n", i, lpBuffer[i].lpComment);
                printf("lpBuffer[%ld].lpProvider: %s\n", i, lpBuffer[i].lpProvider);
                system("PAUSE");
            }

            next:
                continue;
        }
    } while (code == NO_ERROR);

    code = EXIT_SUCCESS;

    end:
        if (hEnum != NULL) {
            /* Ends the network resource enumeration started by the call to the
             * WNetOpenEnum function */

            if ((code2 = WNetCloseEnum(hEnum)) != NO_ERROR)
                printf("WNetCloseEnum(%p): %ld\n", hEnum, code2);
        }

        if (lpBuffer != NULL) {
            /* Deallocates the buffer memory block */
            free(lpBuffer);
        }

        return code;
}
+1 (4) -1 (0) Répondre
24-05-2014, 19h57
Message : #2
gruik Hors ligne
gouteur de savon
*



Messages : 757
Sujets : 44
Points: 482
Inscription : Oct 2012
RE: [C] Découverte du réseau
mais mais mais... c'est quoi ce main() tout crado ?! Big Grin
Avant donc que d'écrire, apprenez à penser.
Selon que notre idée est plus ou moins obscure, l'expression la suit, ou moins nette, ou plus pure.
Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément.
(Nicolas Boileau, L'Art poétique)
+1 (0) -1 (1) Répondre
25-05-2014, 11h12 (Modification du message : 25-05-2014, 11h13 par ark.)
Message : #3
ark Hors ligne
Psyckomodo!
*****



Messages : 1,033
Sujets : 48
Points: 317
Inscription : Sep 2011
RE: [C] Découverte du réseau
(24-05-2014, 19h57)gruik a écrit : mais mais mais... c'est quoi ce main() tout crado ?! :D

Bah, le main en soi, ca va.
Apres il y a beaucoup de goto, ce qui ne facilite pas la lecture du code, mais bon :p

Merci pour le partage en tout cas ! :)
+1 (1) -1 (0) Répondre
25-05-2014, 12h18
Message : #4
gruik Hors ligne
gouteur de savon
*



Messages : 757
Sujets : 44
Points: 482
Inscription : Oct 2012
RE: [C] Découverte du réseau
(25-05-2014, 11h12)Ark a écrit : Bah, le main en soi, ca va.

c'est une blague ?

Code :
if b != a
    goto Z

b = a

Z:
   return b

alors bon je sais pas j'ai pas pris de cours de C j'avoue... tu mets ça dans un devoir, le prof en dit quoi ? Big Grin
Avant donc que d'écrire, apprenez à penser.
Selon que notre idée est plus ou moins obscure, l'expression la suit, ou moins nette, ou plus pure.
Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément.
(Nicolas Boileau, L'Art poétique)
+1 (0) -1 (0) Répondre
25-05-2014, 13h05
Message : #5
Ekroz Hors ligne
Membre actif
*



Messages : 77
Sujets : 13
Points: 43
Inscription : May 2013
RE: [C] Découverte du réseau
A la base le code était dans le main, mais quand j'ai lu dans la doc qu'il fallait faire un appel récursif, j'ai foutu ça dans une fonction sans changer le main, pure flemmardise.
+1 (0) -1 (0) Répondre
26-05-2014, 09h13
Message : #6
sakiir Hors ligne
[sakiir@Ubuntu]:~$ ./ExploitMe ShellC0de
*



Messages : 411
Sujets : 51
Points: 34
Inscription : Sep 2012
RE: [C] Découverte du réseau
à la sortie j'obtient ceci qui ne me parait pas très intéressant c'est normal ? Wink
Citation :lpBuffer[1].dwScope: 2
lpBuffer[1].dwType: 1
lpBuffer[1].dwDisplayType: 3
lpBuffer[1].dwUsage: 1
lpBuffer[1].lpLocalName: (null)
lpBuffer[1].lpRemoteName: \
lpBuffer[1].lpComment:
lpBuffer[1].lpProvider: M
Appuyez sur une touche pour continuer...
+1 (0) -1 (0) Répondre


Sujets apparemment similaires…
Sujet Auteur Réponses Affichages Dernier message
  [C] Calculs réseau. Kiwazaru 16 493 29-10-2013, 16h31
Dernier message: 0pc0deFR

Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)
N-PN
Accueil | Challenges | Tutoriels | Téléchargements | Forum | Retourner en haut