본문 바로가기

전체 글

unlink (10points) 해당 문제를 확인해 본 결과 unlink를 이용하여 memory corruption을 일으키는 것으로 예상된다. 해당 문제의 디렉토리 내부를 확인해 본 결과 flag로 예상되는 파일과 솔루션 텍스트 그리고 실제 바이너리와 해당 바이너리에 대한 소스코드가 있는 것으로 확인된다. 바이너리를 실행해본 결과 stack과 heap의 주소를 보여주며, 입력을 받은 뒤 종료되는 것으로 확인된다. 소스코드를 확인해보자. #include #include #include typedef struct tagOBJ{ struct tagOBJ* fd; struct tagOBJ* bk; char buf[8]; }OBJ; void shell(){ system("/bin/sh"); } void unlink(OBJ* P){ OBJ* B.. 더보기
asm (6points) 해당 문제를 확인해본 결과 쉘코드를 만드는 문제로 예상된다. 해당 문제에 접속해보자. 해당 디렉토리를 확인해본 결과 문제 바이너리와 소스코드, readme, 플래그 파일이 주어져있다. readme 파일을 확인해본 결과 once you connect to port 9026, the "asm" binary will be executed under asm_pwn privilege. make connection to challenge (nc 0 9026) then get the flag. (file name of the flag is same as the one in this directory) 다음과 같은 설명이 주어져있다. 실제 문제를 풀기 위해서는 포트 9026으로 접속하면 될 것으로 확인된다. 주어진 바.. 더보기
[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.. 더보기