본문 바로가기

HITCON Training

HITCON Training Lab15 Lab15 소스코드를 살펴보자. 이번에는 나눠서 설명하겠다. char nameofzoo[100]; class Animal { public : Animal(){ memset(name,0,24); weight = 0; } virtual void speak(){;} virtual void info(){;} protected : char name[24]; int weight; }; class Dog : public Animal{ public : Dog(string str,int w){ strcpy(name,str.c_str()); weight = w ; } virtual void speak(){ cout 더보기
HITCON Training Lab13 Lab13 #include #include #include void read_input(char *buf,size_t size){ int ret ; ret = read(0,buf,size); if(ret content = (char *)malloc(size); if(!heaparray[i]->content){ puts("Allocate Error"); exit(2); } heaparray[i]->size = size ; printf("Content of heap:"); read_input(heaparray[i]->content,size); puts("SuccessFul"); break ; } } } void edit_heap(){ int idx ; char buf[4]; printf("Index :");.. 더보기
HITCON Training lab12 Lab12 #include #include #include #include #include #include #include #include #define TIMEOUT 60 struct flower{ int vaild ; char *name ; char color[24] ; }; struct flower* flowerlist[100] ; unsigned int flowercount = 0 ; void menu(){ puts(""); puts("☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ "); puts("☆ Baby Secret Garden ☆ "); puts("☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ "); puts(""); puts(" 1 . Raise a .. 더보기
House of Force, Unsafe Unlink 원래 HITCON Training Lab11 문제풀이를 정리하려고 했는데, 내 서버 환경의 GLIBC 버전이 2.31이어서 다 막혔다. 그래서 그냥 내가 이해할 수 있게 공격기법만 정리하고 나중에 실습할 수 있는 다른 문제를 풀어볼 예정이다. Lab11 #include #include #include #include #include #include struct item{ int size ; char *name ; }; struct item itemlist[100] = {0}; int num ; void hello_message(){ puts("There is a box with magic"); puts("what do you want to do in the box"); } void goodbye_mess.. 더보기
HITCON Training lab10 (first fit, uaf) First fit? 메모리 할당 알고리즘 중 하나로 First-fit 뿐만 아니라 Best-fit, Worst-fit이 있다. Best Fit은 사용가능한 메모리를 찾고, 그 중 가장 작은 메모리에 할당한다. Worst Fit은 사용가능한 메모리를 찾고, 그 중 가장 큰 메모리에 할당한다. First Fit은 사용가능한 메모리에서 가장 처음 발견한 곳에 할당하는 것을 의미한다. How2Heap, First #include #include #include int main() { fprintf(stderr, "This file doesn't demonstrate an attack, but shows the nature of glibc's allocator.\n"); fprintf(stderr, "glibc .. 더보기
HITCON Training lab6 lab6 #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 ; } 간단한 소스코드다. buf[40] 변수가 있는데 read 함수를 통해 64 길이만큼 입력받아서 BOF 취약점이 발생한다. ROP를 통해 쉘을 획득하려고 했는데 64 크기만큼만 입력할 수 있다는 것이 문제가 생겼다. 일단, puts의 got를 통해 실제 함수를 구하고 offset 계산을 통해 system 함수를 구하는 것까지 했다. 하지만 길이의 제한으로 더 이상 입력할 수 없어서 .bss 영역을 fake.. 더보기
HITCON Training lab4 ~ 5 lab4 #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]; strcpy(buf,mesg); printf("Your message is : %s",buf); } int main(){ char address[10] ; char message[256]; unsigned int addr ; puts("###############################"); puts("Do you know return to library .. 더보기
HITCON Training lab1 ~ 3 Lab1 #include #include void get_flag(){ int fd ; int password; int magic ; char key[] = "Do_you_know_why_my_teammate_Orange_is_so_angry???"; char cipher[] = {7, 59, 25, 2, 11, 16, 61, 30, 9, 8, 18, 45, 40, 89, 10, 0, 30, 22, 0, 4, 85, 22, 8, 31, 7, 1, 9, 0, 126, 28, 62, 10, 30, 11, 107, 4, 66, 60, 44, 91, 49, 85, 2, 30, 33, 16, 76, 30, 66}; fd = open("/dev/urandom",0); read(fd,&password,4); prin.. 더보기