raisep0wn

Geek Stuff & IT Security

NDH 2K10 public wargame level1

with 2 comments

Maintenant que la NDH 2k10 commence à dater, et que la NDH 2011 arrive à grand pas, je pense qu’il est temps de publier les quelques exploits qui nous permettent d’arriver à nos fins. Plusieurs articles ont été publiés peu de temps après la publication du WarGame, Infond, m_101 pour ne citer qu’eux. Pour changer des write-up j’ai décidé de réaliser des vidéos pour les 10 niveaux du WarGame. J’ai choisi le WarGame de la NDH pour sa relative simplicité (pas d’ASLR), mais aussi parce qu’il permet de se familiariser avec les grands principes du hacking applicatif, du simple buffer overflow au rop, et passant par race conditions, stack canary, brute force, format string, et  ret2libc. C’est donc un bon WarGame pour débutant, qui vous donnera une vision générale de l’exploitation de failles applicatives, à vous d’approfondir les domaines qui vous tiennent à cœur…

Code source de l’épreuve :

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void dummy()
{
setresuid(geteuid(),geteuid(),geteuid());
system("sleep 1; cat /home/level2/passwd;");
exit(0);
}

int *p;
void func(char *arg)
{
char buf[16];
p = (int *)&buf[sizeof(buf)];

printf("dummy() is at: 0x%08x\n", dummy);
printf("before:   SEBP=%p\n\t  SEIP=0x%08x\n", *p, *(p+1));
strcpy(buf, arg);
printf("after:    SEBP=%p\n\t  SEIP=0x%08x\n", *p, *(p+1));

}
int main(int argc, char *argv[])
{
if(!argv[1]) {
printf("No command found...\n");
return;
}
func(argv[1]);
}

Le level1 est une introduction aux buffers overflow. Le premier argument passé au programme est copié sans ménagement ni vérification dans un buffer de 16 octets. Si la zone mémoire réservée (16 octets) n’est pas suffisante, strcpy continuera en écrasant les données situées après la fin du buffer. Le buffer étant alloué sur la pile, nous risquons d’écraser ce qui a été précédemment empilé. Ici, les valeurs sauvegardées de EIP, puis EBP ont été empilés juste avant la création du buffer. A la fin de la fonction func(), l’instruction leave réinitialisera la stack frame, et l’instruction ret mettra SEIP dans EIP (POP->EIP). L’exploitation consistera a écraser SEIP par l’adresse de la fonction dummy, afin de rediriger le flow d’exécution et afficher le mot de passe du prochain niveau.

Références :

Publicités

Written by Ralph

28/05/2011 à 08:09

Publié dans IT Security

Tagged with , ,

2 Réponses

Subscribe to comments with RSS.

  1. hello, ou peut-on trouver le public wargame 2k10 svp ?

    Quintinou

    30/06/2012 at 00:44

    • mouarf, c’est bon j’ai trouvé 🙂

      Quintinou

      30/06/2012 at 13:06


Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment cette page :