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

 C Discussion :

[sécurité] C Dump Process


Sujet :

C

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2013
    Messages : 31
    Points : 38
    Points
    38
    Par défaut [sécurité] C Dump Process
    Bonjour

    J'ai récemment commencer à travailler sur la sécurité des programme C en réalisant des LD_PRELOAD afin de d'utiliser mes lib et les preload en mémoire avant la lib normal.

    Assez fun à faire je dois avouer.

    Seulement je me retrouve maintenant devant un exercice d'un tout autre genre, la règle du jeux reste la même afficher une clé "PASS"

    bref je me retrouve pour cet exo devant un flot d'information assez important et ne sait par où commencer à chercher.

    Parmis les info d'aide:

    -des info sur l'architecture x86 avec ces 4 niveaux et leurs droits cela je l'avoue je ne vois pas ce que je peux en faire

    -ktruss : permettant de connaitre les appel système d'un binaire et leur valeur de retour

    -Une explication succincte du format elf : composé de plusieurs structure avec présentation de sa principal

    -objdump : malheureusement le binaire de test ne permet pas son utilisation.

    -notion sur les constructor et destructor : je comprend l'utilisation, mais je dois avouer que leurs utilité concrète m'échappe complètement.
    Avec tout ceci je doit donc afficher le "PASS" du code suivant...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #include <stdio.h>
    #include <string.h>
     
    int main(int ac, char **av)
    {
      char text[] = "PASS";
     
      printf("Try this one :)\n");
      return (0);
    }
    je ne demande pas de réponse, mais plutôt des pistes vers lesquels creusé, ou bien si vous avez, des sites utiles pour ce genre d'application.

    ktruss m'est peu utile, car PASS n'est utilisé par aucun syscall, objdump n'est pas possible donc je passe, et les constructor/destructor ne peuvent pas à ce que je sache utiliser le contenu de la fonction main.
    Quand au LD_PRELOAD je ne peux recoder un printf pour appeller text vu que text est hors de la fonction printf...

    bref je suis dans une impasse.

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Tu dois utiliser la description du format ELF pour faire ce que objdump fait.
    Il y a des chances que la chaîne se trouve dans la section "rodata" du programme.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2013
    Messages : 31
    Points : 38
    Points
    38
    Par défaut
    Je me servais mal de objdump apparemment, pas étonnant que je n'obtenais rien.

    Donc pour enlever les librairie dynamique je fais un preload de ma lib.so contenant constructor et destructor et je redirige vers mon objdump avec la bonne option...
    me reste plus qu'a trouver la bonne \o/

    malheureusement un me donne ceci...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ps_strings missi
    ng..NULL Obj_Ent
    ry pointer in GO
    T...Corrupt Obj_
    Entry pointer in
     GOT....Dynamic
    linker version m
    ismatch.....main
    .dtor.ctor.
    Plus qu'a chercher d'ou provient ce problème et voir si je me suis pas gourré dans mes options de objdump

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Ça ressemble à un objdump du loader de .so, et non un objdump de a.out...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2013
    Messages : 31
    Points : 38
    Points
    38
    Par défaut
    Je viens de vérifier, et j'ai bien objdump le bon binaire et non pas le loader .so
    Après compilation de l'exemple source, et objdump de ce dernier j'ai effectivement un message sensiblement différents mais seulement dans le fait qu'à la place de main .dtor.ctor. j'ai le string donné a printf a savoir "try this one \n"

    il y a certainement un point que j'ai mal compris...

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    L'optimiseur peut-être? Si ta chaîne text n'est pas référencée, elle sera éliminée, et avec elle la chaîne littérale "PASS"...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2013
    Messages : 31
    Points : 38
    Points
    38
    Par défaut
    Qu'est ce que l'optimiseur?

    Dans le cas de ce main, il n'y a aucun référencement, on à un char* text créer comprenant la valeur "PASS" mais ca n'est utlisé à aucun moment et est effectivement supprimé à la fin du main.

    le soucis de l'objdump c'est que je n'ai que des droit d'execution sur le binaire tester.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/04/2011, 11h53
  2. La Sécurité dans Access
    Par Maxence HUBICHE dans le forum Sondages et Débats
    Réponses: 81
    Dernier message: 24/06/2007, 01h07
  3. Réponses: 4
    Dernier message: 01/07/2003, 15h47
  4. [DOM] Ajout d'une instrution de processing
    Par corwin_d_ambre dans le forum Format d'échange (XML, JSON...)
    Réponses: 9
    Dernier message: 06/05/2003, 11h51
  5. Pb de sécurité
    Par xtrips dans le forum Débuter
    Réponses: 6
    Dernier message: 16/04/2003, 07h50

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