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 :

lire un fichier contenant plusieurs shellcode pour pouvoir les exécuter


Sujet :

Python

  1. #1
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Octobre 2016
    Messages : 17
    Par défaut lire un fichier contenant plusieurs shellcode pour pouvoir les exécuter
    Bonjour,
    J'ai actuellement un shellcode whoami. Ma problématique est d'executer ce shellcode selon l'OS sur laquelle il se lance.

    J'ai donc actuellement un script avec une confition if elif qui vérifie si je suis sur linux ou windows.

    Pour que vous compreniez mieux la suite, voici mon script python :
    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
    43
    44
    import ctypes
    import platform
     
    print(platform.platform())
     
    if ( "Linux" in platform.platform() or "linux" in platform.platform()):
            print("Tu es sur linux")
     
            shellcode_data = ( "\x6a\x3b\x58\x99\x48\xbb\x2f\x62\x69\x6e\x2f\x73\x68\x00\x53"
    "\x48\x89\xe7\x68\x2d\x63\x00\x00\x48\x89\xe6\x52\xe8\x10\x00"
    "\x00\x00\x2f\x75\x73\x72\x2f\x62\x69\x6e\x2f\x77\x68\x6f\x61"
    "\x6d\x69\x00\x56\x57\x48\x89\xe6\x0f\x05");
            shellcode = ctypes.create_string_buffer(shellcode_data)
            function = ctypes.cast(shellcode, ctypes.CFUNCTYPE(None))
            addr = ctypes.cast(function, ctypes.c_void_p).value
            libc = ctypes.CDLL('libc.so.6')
            pagesize = libc.getpagesize()
            addr_page = (addr // pagesize) * pagesize
            for page_start in range(addr_page, addr + len(shellcode_data), pagesize):
                    assert libc.mprotect(page_start, pagesize, 0x4) == 0
            function()
     
    elif ( "Windows" in platform.platform() or "windows" in platform.platform()):
            print("Tu es sur windows")
     
            ptr = ctypes.windll.kernel32.VirtualAlloc(ctypes.c_int(0),
            ctypes.c_int(len(shellcode)),
            ctypes.c_int(0x3000),
            ctypes.c_int(0x40))
     
            buf = (ctypes.c_char * len(shellcode)).from_buffer(shellcode)
     
            ctypes.windll.kernel32.RtlMoveMemory(ctypes.c_int(ptr),
            buf,
            ctypes.c_int(len(shellcode)))
     
            ht = ctypes.windll.kernel32.CreateThread(ctypes.c_int(0),
            ctypes.c_int(0),
            ctypes.c_int(ptr),
            ctypes.c_int(0),
            ctypes.c_int(0),
            ctypes.pointer(ctypes.c_int(0)))
     
            ctypes.windll.kernel32.WaitForSingleObject(ctypes.c_int(ht),ctypes.c_int(-1))
    Mon problème est le suivant :

    J'aimerais plutot que d'avoir à remplacer à chaque fois le contenu de la variable shellcode_data lire un fichier txt contenant le shellcode afin de pouvoir l'executer et rendre mon script utilisable par plusieurs shellcode en modifiant juste le chemin du txt

    Supposons que mon fichier txt s'appelle shellcode.txt, comment puis-je faire cela ?

    Merci d'avance

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 760
    Par défaut
    Salut,

    Citation Envoyé par dzerko Voir le message
    Supposons que mon fichier txt s'appelle shellcode.txt, comment puis-je faire cela ?
    Ouvrir un fichier en mode binaire et associer son contenu dans une variable sont des opérations de base qu'on apprend en ouvrant un tuto.
    Et pour modifier un code récupéré sur Internet, il faut quand même avoir fait l'effort d'avoir acquis ces bases là.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Octobre 2016
    Messages : 17
    Par défaut
    Bonjour,

    Alors tout d’abord pour rester dans une neutralité, je te remercie pour le lien que tu m’as envoyé. Par la suite j’aimerais que tu portes des jugements un peu moins facilement car non ça n’est pas un code pris sur internet Mais un code fait à partir d’un cours de master dans lequel je suis. J’aimerais savoir du coup pourquoi faut-il convertir le txt en binaire pour l’envoyer dans un paramètre.

    Merci d’avance

  4. #4
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    salut,

    à moins d'avoir une bestiole exotique multiplateforme, un shellcode c'est en général spécifique à 1 plateforme (et même une architecture en fait)

    ici ton shellcode on sait pas trop ce qu'il fait mais il pushq /bin/sh d'un coté et il a /usr/bin/whoa à la fin; à moins d'avoir un env type Cygwin ça risque déjà de bloquer, restera ensuite j'imagine à invoquer un exec d'une façon ou d'une autre, ce qui entre nux et win ne se passe pas de la même manière non plus, partant de là ton shellcode devient déjà pas mal boiteux

    ajoute à ça que -même à travers ctypes- modifier le flux d'exécution de Python est souvent une mauvaise idée, ne serait-ce que parce que tu ne pars pas d'un contexte neutre, la stack et les registres contiennent déjà des infos, ton shellcode est probablement stocké dans le heap etc.

    enfin je suis assez d'accord avec l'idée selon laquelle il est étonnant de voir des shellcodes dans du ctypes le tout enroulé dans du Python où on ne sait apparemment pas ouvrir un simple fichier, on est sur deux niveaux de complexité très éloignés, et imaginer que le code a été pompé sur le net n'est finalement pas si étrange...

  5. #5
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Octobre 2016
    Messages : 17
    Par défaut
    Le but du tp est de faire une vérification d’os pour exécuter de la bonne forme l’os et la seconde consigne est de récupérer le shellcode d’un fichier texte.

    Donc outre le fonctionnement parfait du shellcode pour l’instant ne m’intéresse pas je veux seulement savoir si cela est possible et par quel moyen car même en mettant un read() sur le fichier j’ai une erreur lorsque je le passe à la variable Shellcode_data

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 760
    Par défaut
    Citation Envoyé par dzerko Voir le message
    Donc outre le fonctionnement parfait du shellcode pour l’instant ne m’intéresse pas je veux seulement savoir si cela est possible et par quel moyen car même en mettant un read() sur le fichier j’ai une erreur lorsque je le passe à la variable Shellcode_data
    Tout cela est expliqué dans des tutos (que vous êtes supposé avoir lu avant de poster). Et vu le type de programmation qu'on vous propose dans votre master, vous feriez bien d'en choisir un pour apprendre ces bases (et pouvoir y revenir pour les revoir le cas échéant).
    Après si vous voulez de l'aide, il faut poster le code que vous avez essayé d'écrire, histoire qu'on puisse se mettre à votre niveau et comprendre les difficultés rencontrées.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. comment chopper le nb de lignes d'une table dans un script python?
    Par Mydriaze dans le forum Général Python
    Réponses: 9
    Dernier message: 21/12/2007, 14h16
  2. Utilisation de C++ dans un script python.
    Par Ekinoks dans le forum Interfaçage autre langage
    Réponses: 8
    Dernier message: 18/01/2007, 19h03
  3. import dans les script python (objet zope)
    Par cronos6 dans le forum Zope
    Réponses: 5
    Dernier message: 10/09/2006, 14h47
  4. Radio boutton dans un script python
    Par Abla23 dans le forum Zope
    Réponses: 17
    Dernier message: 12/07/2006, 17h12
  5. Réponses: 3
    Dernier message: 05/04/2005, 14h26

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