• STATISTIQUES
  • Il y a eu un total de 0 membres et 26564 visiteurs sur le site dans les dernières 24h pour un total de 26 564 personnes!
    Membres: 2 605
    Discussions: 3 579
    Messages: 32 816
    Tutoriels: 78
    Téléchargements: 38
    Sites dans l'annuaire: 58


  • ANNUAIRE
  • [FR] InfoMirmo
    Apprentissage de l'informatique par l'intermédiaire de challenges de sécurité. Venez app...
    Hacking
    [EN] Reddit
    Subreddit dédié à la sécurité informatique.
    Hacking
    [FR] Zenk-Security
    La communauté zenk-security a pour objet principal la sécurité informatique, nous sommes des tou...
    Hacking
    [FR] apprendre-a-manipuler
    Site d'apprentissage de la manipulation d'autrui.
    Hacking
    [EN] Hack This Site
    Hack This Site est considéré comme un réel terrain d'entraînement légal pour le...
    Hacking
    [FR] frameip
    le site de partage des connaissances du monde TCPIP
    Protocole
    [EN] w3challs
    Ce site propose différents types de défis informatiques: piratage, craquage, cryptographie, stég...
    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] Erreur à la compilation
02-11-2012, 20h52 (Modification du message : 02-11-2012, 20h53 par welc0me.)
Message : #1
welc0me Hors ligne
Membre
*



Messages : 40
Sujets : 6
Points: 1
Inscription : Oct 2012
[C] Erreur à la compilation
J'essaie de réaliser un chall. Pour cela je dois coder un petit programme, mais j'obtiens des erreurs et des warnings. Comme je suis une nouille, je trouve pas de solution, quelqu'un pourrait-il me mettre sur la voie ?

Code :
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(int argc, char **argv)
{
        char pid[16], *str;

        pid = itoa(getpid());
        str = crypt(pid, "$1$awesome");

        execve("./~/binary4", str, NULL);
}

Bon j'pense quand même avoir compris que c'est une histoire de type, voici l'insulte :

Citation :lvl.c: In function ‘main’:
lvl.c:9: error: incompatible types in assignment
lvl.c:10: warning: assignment makes pointer from integer without a cast
lvl.c:12: warning: passing argument 2 of ‘execve’ from incompatible pointer type
"Tout ce que je sais, c'est que je ne sais rien." Socrate
+1 (0) -1 (0) Répondre
02-11-2012, 20h58
Message : #2
supersnail Hors ligne
Éleveur d'ornithorynques
*******



Messages : 1,609
Sujets : 71
Points: 465
Inscription : Jan 2012
RE: Erreur à la compilation
Bonjour,

Pour itoa déjà c'est cette syntaxe: http://www.cplusplus.com/reference/clibr...dlib/itoa/, et pour faire disparaître les warnings t'as juste à cast en (char*).

Ensuite , wtf ton "./~/binary4" ? C'est soit ~/binary4, soit ./binary4, pas un truc entre les deux :')
Mon blog

Code :
push esp ; dec eax ; inc ebp ; and [edi+0x41],al ; dec ebp ; inc ebp

"VIM est merveilleux" © supersnail
+1 (0) -1 (0) Répondre
03-11-2012, 01h41
Message : #3
welc0me Hors ligne
Membre
*



Messages : 40
Sujets : 6
Points: 1
Inscription : Oct 2012
RE: [C] Erreur à la compilation
./~/binary4 erreur d'inattention au temps pour moi x)
La syntaxe de itoa que tu m'as filé est en C++, là c'est du C, donc j'ai finalement juste fait un snprintf() Smile

Bon sinon j'ai tout bien regardé, exploré chaque fonction, et j'ai sorti un code qui marche bien.

Enfin pas entièrement (ça m'aurais étonné).

Soit ce petit programme :
Code :
#include <stdio.h>
#include <stdlib.h>

int main()
{
        execve("~/binary", NULL, NULL);
}

avec "binary" un programme set-uid root.
Quand je lance le petit programme, rien ne se passe, et quand je remplace "binary" par "test" (qui contient juste un printf("ok") de vérification), ça fonctionne (et "ok" est affiché)

Donc execve lance pas binary parce qu'il est set-uid root ?
"Tout ce que je sais, c'est que je ne sais rien." Socrate
+1 (0) -1 (0) Répondre
03-11-2012, 02h49
Message : #4
ark Hors ligne
Psyckomodo!
*****



Messages : 1,033
Sujets : 48
Points: 317
Inscription : Sep 2011
RE: [C] Erreur à la compilation
Yop, alors, je viens de faire le test, execve() marche nickel chez moi sur un programme avec et sans sticky bit.

Preuve ici: (Le exec fait juste un exec, avec l'env a NULL. le programme sticky lui, ecrit simplement "I have a sticky bit!")
Code :
Ark|0140 ls -l
total 12K
-rwxr-xr-x 1 ark users 6.6K Nov  3 01:40 exec*
-rw-r--r-- 1 ark users  149 Nov  3 01:39 exec.c
Ark|0140 emacs sticky.c
Ark|0141 gcc sticky.c -o sticky
Ark|0141 ./exec ./sticky
I have a sticky bit!
Ark|0142 su
Password:
RooT|0142 chmod +s sticky
RooT|0142 ls -l
total 24
-rwxr-xr-x 1 ark users 6727 Nov  3 01:40 exec
-rw-r--r-- 1 ark users  149 Nov  3 01:39 exec.c
-rwsr-sr-x 1 ark users 6719 Nov  3 01:41 sticky
-rw-r--r-- 1 ark users   87 Nov  3 01:41 sticky.c
RooT|0142 exit
Ark|0142 ./exec ./sticky
I have a sticky bit!
Ark|0142 ./sticky
I have a sticky bit!
Ark|0142

Je remarque par contre dans ton code que le deuxième paramètre que tu passe a execve() est NULL. Or, il est impossible pour ce deuxième paramètre d’être NULL puisque qu'il représente les arguments passés au programme exécuté. Et, comme on le sait, on a toujours un argument argv[0] egal au nom du programme. C'est peut etre de la que vient ton erreur.
+1 (0) -1 (0) Répondre
03-11-2012, 09h35
Message : #5
supersnail Hors ligne
Éleveur d'ornithorynques
*******



Messages : 1,609
Sujets : 71
Points: 465
Inscription : Jan 2012
RE: [C] Erreur à la compilation
Wait... Par contre je pense qu'on perd le sticky bit si on fait execve... (vu qu'on est dans le contexte du processus courant).

Vaudrait mieux y aller à coup de system() du coup Wink
Mon blog

Code :
push esp ; dec eax ; inc ebp ; and [edi+0x41],al ; dec ebp ; inc ebp

"VIM est merveilleux" © supersnail
+1 (0) -1 (0) Répondre
03-11-2012, 14h54 (Modification du message : 03-11-2012, 15h41 par welc0me.)
Message : #6
welc0me Hors ligne
Membre
*



Messages : 40
Sujets : 6
Points: 1
Inscription : Oct 2012
RE: [C] Erreur à la compilation
@Ark: En effet ça marche chez toi... J'ai rectifié l'erreur que tu m'as dit (merci) mais ça fonctionne toujours pas pour moi... Ça doit donc venir d'ailleurs. Merci pour ta réponse Smile

@supersnail: Ah c'est possible, je vais vérifier ça alors Smile

Bon bah on perd pas le sticky bit avec un execve...

test.c
Code :
#include <stdio.h>
#include <stdlib.h>

int main()
{
    printf("effective uid : %d\n", geteuid());
    printf("real uid : %d\n", getuid());
}

test2.c
Code :
#include <stdio.h>
#include <stdlib.h>

int main()
{
    char *arg[] = {"test",NULL};
    execve("./test", arg, NULL);
}

Code :
$ ls -l test test2
-rwsrwxr-x 1 root root 7237 nov.   3 14:25 test
-rwxrwxr-x 1 welc welc 7161 nov.   3 14:28 test2
$ ./test
effective uid : 0
real uid : 1000
$ ./test2
effective uid : 0
real uid : 1000

Mon problème viendrait de la machine ?

Et j'ai essayé avec system() et le programme est lancé. Par contre la fonction n'invoque pas le programme avec le même contexte, et donc je n'ai pas le pid du programme lancé :/

Je pense que je vais m'orienter vers un script bash, ce serait sûrement plus simple.
"Tout ce que je sais, c'est que je ne sais rien." Socrate
+1 (0) -1 (0) Répondre


Atteindre :


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