IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

problème de conception


Sujet :

Python

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 4
    Points : 1
    Points
    1
    Par défaut problème de conception
    Bonjour,

    Premièrement je suis relativement débutant dans ce language que je trouve merveilleux, alors allez-y molo !

    Voilà mon problème est le suivant, je veux faire un programme qui se connecte et éffectue plusieurs test intélligents à répétition sur une connection DCERPC.

    je me suis fait une fonction qui se connecte, et se déconnecte une fois la query éffectué, jusqu'ici tout va bien.
    Maintenant je voudrais que 2 arguments change aléatoirement sur une fonction qui se connecte:
    fuz_func = [0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09]
    fuz_query = ['a'*(1024+4), 'a'*(4096+4), 'a'*(256+4), 'a'*(556+4), '%s'*128]
    dcerpc.connect(fuz_func, fuz_query)
    dcerpc.close

    fuz_func étant la fonction dcerpc à tester et fuz_query les tests successif à tester sur cette fonction.
    donc l'on se connecte, on test la fonction 0x00 avec 'A'*(1024+4), on déconnecte, on se reconnecte et on test toujours 0x00 avec 'B'*(4096+4), ainsi de suite jusqu'a ce que tout les tests soient éffectué pour cette fonction.
    Ensuite on recommence la même chose mais avec 0x01, jusqu'a la fin de la liste de fuz_func.
    Je suis sur que la solution est simple, mais comme je vous l'ai dis je débute en python.
    Merci à vous !

  2. #2
    Membre émérite
    Avatar de DelphiManiac
    Homme Profil pro
    Homme à tout faire
    Inscrit en
    Mars 2002
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Homme à tout faire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 147
    Points : 2 533
    Points
    2 533
    Par défaut
    D'après ce que j'ai compris, c'est juste 2 boucles 'for' imbriqué :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    def test(func_list, param_list):
        for f in func_list:
            for p in param_list:
                print 'fonction %s, param %s' % (f, p[:10])
     
     
    fuz_func = [0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09]
    fuz_query = ['a'*(1024+4), 'a'*(4096+4), 'a'*(256+4), 'a'*(556+4), '%s'*128]
    test(fuz_func, fuz_query)
    Je ne connais pas le code de connexion, donc j'ai juste fais un 'print' des 2 valeurs.

    Ça c'est le principe de base, il y des manières plus 'pythonienne' de faire cela.

    A toi d'adapter pour te connecter et effectuer les tâches qu'il faut.

    Si tu veux être plus 'pythonien' :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    def testalamodepython1(func_list, param_list):
        for f, p in [(f, p) for f in func_list for p in param_list]:
            print 'fonction %s, param %s' % (f, p[:10])
     
     
    def mafonctiondetest((une_fonction, un_param,)):
        print 'fonction %s, param %s' % (une_fonction, un_param[:10])
     
    def testalamodepython2(func_list, param_list):
        map(mafonctiondetest, [(f, p) for f in func_list for p in param_list])
     
    fuz_func = [0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09]
    fuz_query = ['a'*(1024+4), 'a'*(4096+4), 'a'*(256+4), 'a'*(556+4), '%s'*128]
    print 'fonction testalamodepython1'
    testalamodepython1(fuz_func, fuz_query)
    print 'fonction testalamodepython2'
    testalamodepython2(fuz_func, fuz_query)

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Tout d'abort merci beaucoup pour ta réponse !
    J'utilise impacket une exellente librairie pour forger des requêtes SMB/RPC
    Voici mon code préliminaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    import time
    from impacket.dcerpc import transport
    from impacket import uuid
    from impacket.structure import Structure
     
     
    class PNP_QueryResConfList(Structure):
      alignment = 4
      structure = (
    ('treeRoot', 'w'),
    ('resourceType','<L=0x800000'),
    ('resourceLen1','<L-resource'),
    ('resource', ':'),
    ('resourceLen2','<L-resource'),
    )
    stringbinding = "ncacn_np:%(host)s[\\pipe\\%(pipe)s]"
    stringbinding %= {
    'host': '192.168.0.107',
    'pipe': 'browser',
    'port': 445, 
    }
     
    print "Using stringbinding: %r" % stringbinding
    # default port for SMB is 445
    trans = transport.DCERPCTransportFactory(stringbinding)
    print trans.connect()
    dce = trans.DCERPC_class(trans)
    dce.bind(uuid.uuidtup_to_bin(('8d9f4e40-a03d-11ce-8f69-08003e30051b','1.0')))
    #
    query = PNP_QueryResConfList()
    query['treeRoot'] = "\x20"*120
    query['resource'] = '\x00'*8+'\x00\x01\x00\x00'+str(fuz_query)## ? le fuz_query dois être ajouté ici
     
     dce.call(0x00, query)
     dce.disconnect()
    Ce que je voudrais fuzzer serais donc dce.call de la manière que j'ai décris dans mon post.
    Comment implémenterais-tu l'exemple que tu m'as donné ?

    Merci pour tout !

  4. #4
    Membre émérite
    Avatar de DelphiManiac
    Homme Profil pro
    Homme à tout faire
    Inscrit en
    Mars 2002
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Homme à tout faire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 147
    Points : 2 533
    Points
    2 533
    Par défaut
    Et bien tu créer 2 liste comme dans l'exemple du début, tu parcours tes 2 listes dans une boucle fort et tu appelles la fonction dce.call après avoir construit le query complété du paramètre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    fuz_func = [0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09]
    fuz_query = ['a'*(1024+4), 'a'*(4096+4), 'a'*(256+4), 'a'*(556+4), '%s'*128]
    
    for f in func_list:
        for p in param_list:
            query = PNP_QueryResConfList()
            query['treeRoot'] = "\x20"*120
            query['resource'] = '\x00'*8+'\x00\x01\x00\x00' + p
            dce.call(f, query)
    
    dce.disconnect()
    Si j'ai bien compris le code, ça devrais fonctionner, ou pas loin :p

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Merci pour ton aide, c'est fortement apprécié.

    Je comprends bien le principe, cependant je me demande comment faire pour que il se connecte, test le 1er string, se déconnecte, se reconnecte et test le 2eme string, et ainsi de suite, une fois la fonction (0x00) testé, on recommence avec 0x01 avec le meme principe.

    Aussi j'ai une erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        for f in func_list:
    NameError: name 'func_list' is not defined
    J'ai peut-être fait une erreur à quelque part ?
    voici mon code modifié:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    import time
    from impacket.dcerpc import transport
    from impacket import uuid
    from impacket.structure import Structure
     
     
    class PNP_QueryResConfList(Structure):
      alignment = 4
      structure = (
    ('treeRoot', 'w'),
    ('resourceType','<L=0x800000'),
    ('resourceLen1','<L-resource'),
    ('resource', ':'),
    ('resourceLen2','<L-resource'),
    )
    stringbinding = "ncacn_np:%(host)s[\\pipe\\%(pipe)s]"
    stringbinding %= {
    'host': '192.168.0.107',
    'pipe': 'browser',
    'port': 445, 
    }
     
    print "Using stringbinding: %r" % stringbinding
    # default port for SMB is 445
    trans = transport.DCERPCTransportFactory(stringbinding)
    print trans.connect()
    dce = trans.DCERPC_class(trans)
    dce.bind(uuid.uuidtup_to_bin(('8d9f4e40-a03d-11ce-8f69-08003e30051b','1.0')))
     
    fuz_func = [0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09]
    fuz_query = ['a'*(1024+4), 'a'*(4096+4), 'a'*(256+4), 'a'*(556+4), '%s'*128]
     
    for f in func_list:
        for p in param_list:
            query = PNP_QueryResConfList()
            query['treeRoot'] = "\x20"*120
            query['resource'] = '\x00'*8+'\x00\x01\x00\x00' + p
            dce.call(f, query)
     
    dce.disconnect()
    Merci encore !

  6. #6
    Membre émérite
    Avatar de DelphiManiac
    Homme Profil pro
    Homme à tout faire
    Inscrit en
    Mars 2002
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Homme à tout faire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 147
    Points : 2 533
    Points
    2 533
    Par défaut
    Essayes un peu de chercher aussi, le forum, à la base, n'est pas là pour coder à ta place, mais pour répondre à des questions après une recherche de ta part; mais bon, je vais répondre tout de même !!

    Le problème de ma réponse est surtout le fait que je ne peut pas tester ce que je te propose, donc pas certains que cela fonctionne, mais suis les tutriaux python, debug et si vraiment tu coinces, redemande, mais après avoir chercher

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    import time
    from impacket.dcerpc import transport
    from impacket import uuid
    from impacket.structure import Structure
     
     
    class PNP_QueryResConfList(Structure):
      alignment = 4
      structure = (
    ('treeRoot', 'w'),
    ('resourceType','<L=0x800000'),
    ('resourceLen1','<L-resource'),
    ('resource', ':'),
    ('resourceLen2','<L-resource'),
    )
    stringbinding = "ncacn_np:%(host)s[\\pipe\\%(pipe)s]"
    stringbinding %= {
    'host': '192.168.0.107',
    'pipe': 'browser',
    'port': 445, 
    }
     
    print "Using stringbinding: %r" % stringbinding
    # default port for SMB is 445
    trans = transport.DCERPCTransportFactory(stringbinding)
    print trans.connect()
    dce = trans.DCERPC_class(trans)
    dce.bind(uuid.uuidtup_to_bin(('8d9f4e40-a03d-11ce-8f69-08003e30051b','1.0')))
     
    fuz_func = [0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09]
    fuz_query = ['a'*(1024+4), 'a'*(4096+4), 'a'*(256+4), 'a'*(556+4), '%s'*128]
     
    for f in fuz_func:
        for p in fuz_query:
            query = PNP_QueryResConfList()
            query['treeRoot'] = "\x20"*120
            query['resource'] = '\x00'*8+'\x00\x01\x00\x00' + p
            print trans.connect()
            dce = trans.DCERPC_class(trans)
            dce.bind(uuid.uuidtup_to_bin(('8d9f4e40-a03d-11ce-8f69-08003e30051b','1.0')))
            dce.call(f, query)
            dce.disconnect()

  7. #7
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    J'ai réussi à faire en sorte de le faire fonctionner.
    ton exemple est exellent, ca démontre bien à quel point python est simple et performant.

    Merci encore pour ton aide !

Discussions similaires

  1. Méthode Finalize et problème de conception
    Par phryos dans le forum Langage
    Réponses: 4
    Dernier message: 19/04/2006, 11h04
  2. [VB6][UserControl et OCX]Problème de conception
    Par jacma dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 19/01/2006, 22h37
  3. Petit problème de conception sur access
    Par coooookinette dans le forum Modélisation
    Réponses: 3
    Dernier message: 18/12/2005, 18h24
  4. Gestion des départements problème de conception
    Par snoopy69 dans le forum Modélisation
    Réponses: 7
    Dernier message: 11/10/2005, 13h08
  5. Problème de conceptions de tables
    Par dtavan dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 23/05/2004, 23h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo