FC4 cruel -> enigma

ret 영역 다음에 canary가 있다는 걸 생각하야 한다. fake ebp를 이용해서 stdin의 임시버퍼 영역을 공략한다. 이 영역의 주소가 계속 바뀌긴 하지만 경우의 수 [Read More]

FC3 evil_wizard -> dark_stone

dark_stone 코드 /* The Lord of the BOF : The Fellowship of the BOF - dark_stone - Remote BOF on Fedora Core 3 - hint : GOT overwriting again - port : TCP 8888 */ #include <stdio.h> // magic potion for you void pop_pop_ret(void) { asm("pop %eax"); asm("pop %eax"); asm("ret"); } int main() { char buffer[256]; char saved_sfp[4]; int length; char temp[1024]; printf("dark_stone : how fresh meat you are!\n"); [Read More]

FC3 hell_fire -> evil_wizard

pop pop ret을 어떻게 쓰는 건지 이 문제를 풀고 알게 됐다. 리턴을 이용해서 인자가 2개 필요한 함수를 호출할 때 스택에 아래와 같이 배치시킨다. [함수주소] [ㅁㄴㅇ [Read More]

FC3 iron_golem -> dark_eyes

ret sleding에 대해 쓰는 글 아래는 코드 /* The Lord of the BOF : The Fellowship of the BOF - dark_eyes - Local BOF on Fedora Core 3 - hint : RET sleding */ int main(int argc, char *argv[]) { char buffer[256]; char saved_sfp[4]; if(argc < 2){ printf("argv error\n"); exit(0); } // save sfp memcpy(saved_sfp, buffer+264, 4); // [Read More]

The Lord of the BOF - assassin -> zombie_assassin

코드는 이렇다. /* The Lord of the BOF : The Fellowship of the BOF - zombie_assassin - FEBP */ #include <stdio.h>#include <stdlib.h> main(int argc, char *argv[]) { char buffer[40]; if(argc < 2){ printf("argv error\n"); exit(0); } if(argv[1][47] == '\xbf') { printf("stack retbayed you!\n"); exit(0); } if(argv[1][47] == '\x40') { printf("library retbayed you, too!!\n"); exit(0); } // strncpy instead of strcpy! strncpy(buffer, argv[1], 48); printf("%s\n", buffer); [Read More]

The Lord of the BOF - darkknight -> bugbear

return to library 개념 이해하기 아래는 문제의 코드 /* The Lord of the BOF : The Fellowship of the BOF - bugbear - RTL1 */ #include <stdio.h>#include <stdlib.h> main(int argc, char *argv[]) { char buffer[40]; int i; if(argc < 2){ printf("argv error\n"); exit(0); } if(argv[1][47] == '\xbf') { printf("stack betrayed you!!\n"); exit(0); } strcpy(buffer, argv[1]); printf("%s\n", buffer); } 이전 단 [Read More]

Pwnable KR - simple login

문제 50점 문제 풀이 아이다로 열어서 main 함수를 보면 Base64Decode 함수를 거쳐서 그 글자가 12글자를 넘지 않았을 때, memcpy 함수와 auth 함수를 실행할 수 있다. auth 함수를 보면 위에 calc_md5 함 [Read More]

TU CTF 2016 - WoO2

TU CTF 2016에서 못푼 문제 $ ./WoO2 Welcome! I don't think we're in Kansas anymore. We're about to head off on an adventure! Select some animals you want to bring along. Menu Options: 1: Bring a lion 2: Bring a tiger 3: Bring a bear 4: Delete Animal 5: Exit Enter your choice: 5 $ 실행하면 이렇게 뜬 [Read More]

Pwnable KR - memcpy

문제 10점 문제. // compiled with : gcc -o memcpy memcpy.c -m32 -lm memcpy.c 첫줄에 이런 주석이 있어서 가상머신 우분투에서 컴파일해서 풀기로 했다. 나는 -g 옵션도 추가로 줬다. 64비트에서 안되 [Read More]

Pwnable KR - uaf

문제 8점 문제. Use After Free를 몰라서 또 찾아봐야했다. $ ls -l total 24 -rw-r----- 1 root uaf_pwn 22 Sep 25 2015 flag -r-xr-sr-x 1 root uaf_pwn 15463 Sep 25 2015 uaf -rw-r--r-- 1 root root 1431 Sep 25 2015 uaf.cpp uaf.cpp #include <fcntl.h>#include <iostream>#include <cstring>#include <cstdlib>#include <unistd.h>using namespace std; classHuman{ private: virtual void [Read More]