본문 바로가기

PWNABLE/HITCON TRAINING

[HITCON TRAINING] LAB9 [HITCON TRAINING] LAB9 → WRITE UP 해당 바이너리의 보호기법을 확인해본다. 해당 바이너리의 보호기법으로는 NX bit가 적용되어 있다. 해당 바이너리의 소스코드를 확인해보자. #include #include #include char buf[200] ; void do_fmt(){ while(1){ read(0,buf,200); if(!strncmp(buf,"quit",4)) break; printf(buf); } return ; } void play(){ puts("====================="); puts(" Magic echo Server"); puts("====================="); do_fmt(); return; } int main(){ setvbu.. 더보기
[HITCON TRAINING] LAB8 [HITCON TRAINING] LAB8 → WRITE UP 해당 바이너리의 보호기법을 확인해본다. 해당 바이너리는 인텔 기반의 32비트 바이너리이며,보호기법으로는 Stack Canary와 NX bit 및 Partial RELRO가 설정되어 있다. 주어진 소스코드를 확인해보자. #include int magic = 0 ; int main(){ char buf[0x100]; setvbuf(stdout,0,2,0); puts("Please crax me !"); printf("Give me magic :"); read(0,buf,0x100); printf(buf); if(magic == 0xda){ system("cat /home/craxme/flag"); }else if(magic == 0xfaceb00c.. 더보기
[HITCON TRAINING] LAB7 [HITCON TRAINING] LAB7 → WRITE UP 먼저 해당 바이너리의 보호기법을 확인해본다. 해당 바이너리는 인텔 기반의 32비트 바이너리이며 보호기법(mitgation)으로는 Stack Canary와 NX bit가 적용되어 있는 것으로 확인된다. 해당 바이너리의 소스코드를 확인해보자. #include #include #include #include unsigned int password ; int main(){ setvbuf(stdout,0,2,0); char buf[100]; char input[16]; int fd ; srand(time(NULL)); fd = open("/dev/urandom",0); read(fd,&password,4); printf("What your name ? .. 더보기
[HITCON TRAINING] LAB6 [HITCON TRAINING] LAB6 → WRITE UP 먼저 해당 바이너리의 보호기법을 확인해본다. 해당 바이너리는 인텔 기반의 32비트 바이너리이며 보호기법(mitgation)으로 Full RELRO 및 NX Bit가 적용되어 있다. 바이너리의 소스코드가 주어져있어 이를 확인해보자. #include int count = 1337 ; int main(){ if(count != 1337) _exit(1); count++; char buf[40]; setvbuf(stdout,0,2,0); puts("Try your best :"); read(0,buf,64); return ; } 소스코드의 Line 12에서 40바이트 크기의 buf 배열 버퍼에 64바이트를 입력받으므로 취약점이 존재할 것으로 예상된다... 더보기
[HITCON TRAINING] LAB5 [HITCON TRAINING] LAB5 → WRITE UP 먼저 해당 바이너리의 보호기법을 확인해본다. 해당 바이너리는 인텔 기반의 32비트 바이너리로 확인되며 보호기법(mitgation)으로는 Partion RELRO 및 NX bit가 적용되어 있는 것으로 확인된다. 바이너리의 소스코드는 #include int main(){ char buf[20]; puts("ROP is easy is'nt it ?"); printf("Your input :"); fflush(stdout); read(0,buf,100); } 다음과 같이 간단한 바이너리이며 buf 배열의 크기가 20바이트로 선언되었지만 read함수를 통해 100바이트 길이의 데이터를 입력받으므로 Buffer Over Flow가 발생하는 취약점이 존재.. 더보기
[HITCON TRAINING] LAB4 [HITCON TRAINING] LAB4 → WRITE UP 먼저 해당 바이너리의 보호기법을 확인해본다. 해당 바이너리는 인텔 기반의 32비트 바이너리이며 보호기법으로는 Partial RELRO와 NX bit가 적용되어 있는 것을 확인할 수 있다. 또한 해당 문제의 추가적인 정보로는 바이너리의 소스코드가 주어진 것을 확인할 수 있다. 바이너리의 소스코드를 확인해보자. #include void See_something(unsigned int addr){ int *address ; address = (int *)addr ; printf("The content of the address : %p\n",*address); }; void Print_message(char *mesg){ char buf[48]; s.. 더보기
[HITCON TRAINING] LAB3 [HITCON TRAINING] LAB3 → WRITE UP 먼저 해당 바이너리의 보호기법을 확인해본다. 해당 바이너리는 인텔 32비트 기반의 바이너리이며 바이너리 보호기법을 확인한 결과 어떠한 형태의 보호기법도 적용되지 않은 것으로 확인된다. 바이너리의 전체적인 실행흐름 파악을 위하여 해당 바이너리를 아이다7.0을 이용하여 확인해보겠다. 해당 바이너리를 분석해본 결과 권한을 설정한 뒤 두 차례의 입력을 받는 것으로 확인된다. 핵스레이를 이용하여 의사코드를 복원해보아도 다음과 같은 형태이다. 눈에 띄는 함수는 gets()를 이용하여 두번째 문자열을 입력받는 형태의 함수이다. gets()함수는 문자열의 길이를 확인하지 않으며 개행문자가 나올 때까지 입력받으므로 취약점이 발생할 수 있다. 이러한 점을 고려하.. 더보기
[HITCON TRAINING] LAB2 미완료 보호되어 있는 글입니다. 더보기