Hacking/LOB(RedHat)

    HackerSchool LOB Level 19

    /* The Lord of the BOF : The Fellowship of the BOF - xavius - arg*/ #include #include #include main(){char buffer[40];char *ret_addr; // overflow!fgets(buffer, 256, stdin);printf("%s\n", buffer); if(*(buffer+47) == '\xbf'){printf("stack retbayed you!\n");exit(0);} if(*(buffer+47) == '\x08') { printf("binary image retbayed you, too!!\n"); exit(0); } // check if the ret_addr is library function or..

    HackerSchool LOB Level 18

    /* The Lord of the BOF : The Fellowship of the BOF - nightmare - PLT*/ #include #include #include #include main(int argc, char *argv[]){char buffer[40];char *addr; if(argc < 2){printf("argv error\n");exit(0);} // check addressaddr = (char *)&strcpy; if(memcmp(argv[1]+44, &addr, 4) != 0){ printf("You must fall in love with strcpy()\n"); exit(0); } // overflow! strcpy(buffer, argv[1]);printf("%s\n..

    HackerSchool LOB Level 17

    /* The Lord of the BOF : The Fellowship of the BOF - succubus - calling functions continuously */ #include #include #include // the inspectorint check = 0; void MO(char *cmd){ if(check != 4) exit(0); printf("welcome to the MO!\n"); // olleh!system(cmd);} void YUT(void){ if(check != 3) exit(0); printf("welcome to the YUT!\n"); check = 4;} void GUL(void){ if(check != 2) exit(0); printf("welcome to..

    HackerSchool LOB Level 16

    ※소스분석 buffer 40스택영역과 라이브러리 영역에 쉘코드를 올릴수없음argv[1] 은 48까지 입력할수있음이 문제는 Fake ebp를 활용해 풀어야한다 Fake EBP란?leave ret의 명령어 구성leave mov esp, ebppop ebp ret pop eipjmp eip 간단하게말해서 sfp에 buf+4 부분을 덮고 ret에 ret을 덮는것이다 Ret 영역에 leave ret 가젯을 넣어주면 leave mov esp ebp // mov esp ebp가 수행되면서 ebp가 esp로 들어감 -> esp가 ebp로 바뀜 -> pop ebp // pop eip가 수행되면서 스택주소가 +4됨ret pop eip // 조작해둔 leave가젯이 eip로 들어간다 jmp eip // leave 가젯으로 ..

    HackerSchool LOB Level 15

    코드를 보자※ No Stack No RTL스택영역과 라이브러리 영역에 코드를 올릴수가없다 풀이법은 RET에다 코드로서의(RET)을 넣는것이다.어셈블리 RET은 POP EIPJMP EIP 로 이루어져있다.해석해보자면 EIP를 POP한다음 EIP로 점프하는것이다.RET에다가 어셈블리RET을 넣으면 RET이 실행되면서 안의 POP EIP가 실행되 주소가 +4 되고 +4된 주소로 점프한다.우리는 환경변수에 코드를 올리고 공격해보겠다. 환경변수 test에 놉과 쉘코드를 올려준다. getenv함수를 이용하여 환경변수 test의 주소를 구해준다. gdb로 assasin을 복사한 assasi1을 열어 디스어셈블해주면 ret의 주소를 알수있다. RET의 주소는 0x804851e 이다. 페이로드를 짜보자자면 ./assas..

    HackerSchool LOB Level 14

    코드를 해석해보자면간단히말해서 execve함수를 사용해서 풀라는 뜻이다.페이로드는 [non 44] [&execve] [non 4] [/bin/sh] [argv0] [nob]./$"`python -c 'print "\xf9\xbf\x0f\x40"'`" "`python -c 'print "\x90"*44+"\x48\x9d\x0a\x40"+"\x90"*4+"\xf9\xbf\x0f\x40"+"\xf7\xff\xff\xbf"+"\xfc\xff\xff\xbf"'`" 비밀번호는 one step closer 이다

    HackerSchool LOB Level 13

    ※ argc가 2보다 커야함 ※ argv[1][47]이 \xbf가 아니여야함 조건을 해석해보자면 ret에 스택의 주소가 오면 안된다는 조건임을 알수있다.이 문제는 RTL(Return To Libc) 기법을 이용하여 풀어야한다 RTL의 특징은 쉘코드가 없이 Exploit 하는것이다.RTL의 핵심은 RET에 Libc라고 하는 공유 라이브러리 내의 함수를 덮어씌우는 것이다. 시스템 함수의 주소를 알아내기위해 gdb로 bugbear를 복사한파일을 열고 p system으로 주소를 출력한다주소는 0x40058ae0 이다이제 인자로 들어갈 "/bin/sh"의 주소를 알아보자 "/bin/sh"의 주소를 구하는 간단한 파일을 만들어준다. /bin/sh 의 주소는 0x400fbff9 이다 아까 구한 주소들을 이용해 페이로..

    HackerSchool LOB Level 12

    이 문제는 FPO기법을 이해해야하는 문제라서 푸는데 오래 걸렸다.코드를 보면 ※ argc가 2보다 커야함 ※ problem_child 함수에 argv[1]이 인자로 들어간다 ※ problem_child 함수를 보면 버퍼가 40이고 인자값이 stp를 1바이트 침범함 위를 종합해보면 stp를 침범한 1바이트가 핵심인거같다.함수의 에필로그는 LEAVE mov esp, ebp pop ebp // esp를 ebp에 복사하고 ebp를 스택에서 꺼낸다RETpop eip jmp eip // eip를 꺼내고 eip로 점프한다 eip를 pop하면 +4가된다 -> 버퍼가 0에서 4가됨 darkknight.c를 복사해서 printf("0x%x\n",buffer-4); 코드를추가해준다eip가 4이기때문에 버퍼에서 -4로 설정해..