From ae889caae47e8e6d51e0657d349a9b36a3ca4158 Mon Sep 17 00:00:00 2001 From: xamidev Date: Fri, 5 Sep 2025 15:57:26 +0200 Subject: [PATCH] ELF32: stack canary --- a.out | Bin 15992 -> 16176 bytes helpelf | Bin 22384 -> 23576 bytes main.c | 129 +++++++++++++++++++++++++++++++++++++++++++++---------- makefile | 2 +- 4 files changed, 107 insertions(+), 24 deletions(-) diff --git a/a.out b/a.out index 5e9a6d4dcbd68f33b4bcb5af89bc13c6bd5181ab..33fe0fcec0856b9da5af6f014406e1da332d3bed 100755 GIT binary patch literal 16176 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 XrZTqI$nTV=IZhYhv8p=-;pYDUVmp{H diff --git a/helpelf b/helpelf index 6a1f727c7a813a89f2947fa9e94e69e34cbc6e46..62041bf11ccc0ffca9a2cd5fd2c84e034a706136 100755 GIT binary patch literal 23576 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 W_A9w`PdB{&wri!t)+~iAl>L7cwhpBL literal 22384 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 GO~#Jiok%@{H3> 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 Vkd~P;L #include +// Data structures as per ELF specification: +// https://refspecs.linuxfoundation.org/elf/elf.pdf +// Only what we need (no elf.h) + #define MAX_FILENAME 256 #define EI_NIDENT 16 #define MAX_HEADER_LEN 2048 #define PF_X 1 #define PT_GNU_STACK 0x6474e551 +#define SHT_DYNSYM 11 +#define SHT_SYMTAB 2 #define Elf32_Half uint16_t #define Elf32_Word uint32_t @@ -52,6 +58,7 @@ bool verbose = false; bool pie = false; bool nx = false; +bool canary = false; struct Elf32_Ehdr { @@ -83,6 +90,30 @@ struct Elf32_Phdr Elf32_Word p_align; }; +struct Elf32_Shdr +{ + Elf32_Word sh_name; + Elf32_Word sh_type; + Elf32_Word sh_flags; + Elf32_Addr sh_addr; + Elf32_Off sh_offset; + Elf32_Word sh_size; + Elf32_Word sh_link; + Elf32_Word sh_info; + Elf32_Word sh_addralign; + Elf32_Word sh_entsize; +}; + +struct Elf32_Sym +{ + Elf32_Word st_name; + Elf32_Addr st_value; + Elf32_Word st_size; + unsigned char st_info; + unsigned char st_other; + Elf32_Half st_shndx; +}; + struct Elf64_Ehdr { unsigned char e_ident[EI_NIDENT]; @@ -155,29 +186,35 @@ void display_elf32(struct Elf32_Ehdr* header) printf("32-bit ELF "); display_elf_common(header->e_ident); - switch (header->e_type) + if (verbose) { - case 0x00: - printf("(no file type),"); - break; - case 0x01: - printf("(relocatable file),"); - break; - case 0x02: - printf("(executable file),"); - break; - case 0x03: // (ET_DYN, prob means PIE) - printf("(shared object file),"); - pie = true; - break; - case 0x04: - printf("(core file),"); - break; - default: - printf("(unknown),"); - break; + switch (header->e_type) + { + case 0x00: + printf("(no file type),"); + break; + case 0x01: + printf("(relocatable file),"); + break; + case 0x02: + printf("(executable file),"); + break; + case 0x03: // (ET_DYN, prob means PIE) + printf("(shared object file),"); + pie = true; + break; + case 0x04: + printf("(core file),"); + break; + default: + printf("(unknown),"); + break; + } + printf(" "); + } else if (header->e_type == 0x03) + { + pie = true; } - printf(" "); switch (header->e_machine) { @@ -231,13 +268,13 @@ void display_elf32(struct Elf32_Ehdr* header) void check_sec32(struct Elf32_Ehdr* header, FILE* fp) { - fseek(fp, header->e_phoff, SEEK_SET); /* * Browse thru program header table (e_phnum items) from e_phoff (program header offset) * if its stack and has executable bit then we know NX isnt there */ - for (size_t i=0; i < header->e_phnum; i++) + fseek(fp, header->e_phoff, SEEK_SET); + for (size_t i=0; ie_phnum; i++) { struct Elf32_Phdr p_header; fread (&p_header, 1, sizeof(struct Elf32_Phdr), fp); @@ -253,6 +290,51 @@ void check_sec32(struct Elf32_Ehdr* header, FILE* fp) } } } + + /* + * Same for section header table (e_shnum items) from e_shoff (section header offset) + * find sections .dynsym or .symtab: + * and look for __stack_chk_fail (call for stack smashing) + */ + fseek(fp, header->e_shoff, SEEK_SET); + + // Read section headers + struct Elf32_Shdr *s_headers = malloc(header->e_shnum * sizeof(struct Elf32_Shdr)); + fread(s_headers, sizeof(struct Elf32_Shdr), header->e_shnum, fp); + + // Find section name string table (at e_shstrndx) and read it + struct Elf32_Shdr s_header_str = s_headers[header->e_shstrndx]; + char* s_header_strtab = malloc(s_header_str.sh_size); + fseek(fp, s_header_str.sh_offset, SEEK_SET); + fread(s_header_strtab, 1, s_header_str.sh_size, fp); + + for (size_t i=0; ie_shnum; i++) + { + if (s_headers[i].sh_type == SHT_DYNSYM || s_headers[i].sh_type == SHT_SYMTAB) + { + // load symbol table + unsigned int nsyms = s_headers[i].sh_size / s_headers[i].sh_entsize; + struct Elf32_Sym *syms = malloc(s_headers[i].sh_size); + fseek(fp, s_headers[i].sh_offset, SEEK_SET); + fread(syms, s_headers[i].sh_size, 1, fp); + + // load string table + struct Elf32_Shdr str_header = s_headers[s_headers[i].sh_link]; + char* strtab = malloc(str_header.sh_size); + fseek(fp, str_header.sh_offset, SEEK_SET); + fread(strtab, 1, str_header.sh_size, fp); + + // iterate through symbols, check for __stack_chk_fail + for (size_t j=0; j