분류 전체보기

    baby1

    checksec 64bit NX bit Pseudo Code int __cdecl main(int argc, const char **argv, const char **envp) { char buf; // [rsp+0h] [rbp-30h] setvbuf(_bss_start, 0LL, 2, 0LL); write(1, "Welcome to securinets Quals!\n", 0x1DuLL); return read(0, &buf, 0x12CuLL); } buf 변수에 0x30 byte 를 처음 할당하고 read 함수를 통해 0x12C 만큼 읽는다. >> buffer overflow 취약성 발생 0x30byte 이상 문자를 입력하면 return address를 덮어쓸 수 있다. Payload gadget ga..

    [DS] Insert a Node at the Tail of a Linked List

    https://www.hackerrank.com/challenges/insert-a-node-at-the-tail-of-a-linked-list/problem 연결리스트의 tail, 끝 부분에 노드를 삽입하는 함수를 작성해야 한다. SinglyLinkedListNode* insertNodeAtTail(SinglyLinkedListNode* head, int data) { SinglyLinkedListNode* node = head; SinglyLinkedListNode* tmp = malloc(sizeof(SinglyLinkedList)); tmp->data = data; tmp->next = NULL; if(head==NULL){ head = tmp; return head; } while(node->n..

    Breaking the Records

    https://www.hackerrank.com/challenges/breaking-best-and-worst-records/problem 문제는 쉬운 문제인데 함수의 리턴 타입을 고려해서 풀어야하는 문제이다. int* breakingRecords(int scores_count, int* scores, int* result_count) { int *breaking=malloc(sizeof(int)*2); breaking[0]=0; breaking[1]=0; int min=scores[0], max=scores[0]; for(int i=1;iscores[i]) { breaking[1]++; min=scores[i]; } if(max

    오디오 서비스가 응답하지 않음

    Windows10 >> 상관있는지는 모르겠지만.... 원래는 이 상태(←)가 정상상태인데 여기에 음량표시 대신 빨간색 동그라미에 X 표시가 뜨면서 음량 조절도 안되고 소리가 계속 안나와서 문제 해결 마법사(?)를 실행시켰다. 이렇게 "오디오 서비스가 응답하지 않음" 문제가 나타나고 해결안됨 상태로 확인됐다. 자세한 정보를 혹시 몰라 확인해봤다. 기대도 안했지만 어떻게 해야될지 더 막막해지기만 할 뿐... https://m.blog.naver.com/PostView.nhn?blogId=sskheisse&logNo=221431754235&proxyReferer=https:%2F%2Fwww.google.com%2F 그래서 "오디오 서비스 응답없음""으로 구글링 한 결과 위의 너무 감사한 블로그를 발견했다./ ..

    Print the Elements of a Linked List

    https://www.hackerrank.com/challenges/print-the-elements-of-a-linked-list/problem /* * For your reference: * * SinglyLinkedListNode { * int data; * SinglyLinkedListNode* next; * }; * */ void printLinkedList(SinglyLinkedListNode* head) { SinglyLinkedListNode *node=head; while(node!=NULL){ printf("%d\n",node->data); node=node->next; } } △ 작성한 부분 연결 리스트의 원소들의 값을 출력하는 함수로, 해당 노드의 값이 NULL이 되기 전까지 연결 ..

    Kangaroo

    https://www.hackerrank.com/challenges/kangaroo/problem 두 캥거루가 같은 시간에 같은 지점에 도착하는 경우에 대해 판단하는 문제이다. 어려운 문제는 아니지만 캥거루들이 움직일 수 있는 길이의 한도가 정해져있지 않아 그 부분을 어떻게 해야하나 고민했다. char* kangaroo(int x1, int v1, int x2, int v2) { int s1=0, s2=0; if((x1v2)) return "NO"; else{ for(int i=0;;i++){ s1= x1+v1*i; s2 = x2 + v2 *i; if(s1 == s2) return "YES"; if(x1s2) return "NO"; } else{ if(s1> return "NO" 그 다음 만날 수도 있고..

    Return to csu (ft. Return-to-vuln, Just-In-Time Code Reuse)

    return-to-csu x64 https://doongdangdoongdangdong.tistory.com/62?category=869864 return-to-vuln ROP 코드를 실행한 후 취약성이 있는 코드로 다시 이동 gcc로 컴파일된 파일 "leave ; ret ;" gadget을 이용해 return-to-dl-resolve 기법으로 스택의 흐름을 변경할 수 있다. clang으로 컴파일된 파일 "leave ; ret ;" gadget을 찾을 수 없다. clang 으로 컴파일된 바이너리는 스택(entry point)을 정리할 때 "leave" 명령어가 사용되지 않는다. ▶ Return-to-vuln 기법을 사용해 ROP 코드 실행 후 취약성이 있는 함수를 다시 호출해 공격 Just-In-Time..

    Return to csu (ft. JIT ROP)

    return-to-csu __libc_csu_init() 함수의 일부 코드를 gadget으로 이용하는 기술 void __libc_csu_init (int argc, char **argv, char **envp) { ... const size_t size = __init_array_end - __init_array_start; for (size_t i = 0; i < size; i++) (*__init_array_start [i]) (argc, argv, envp); } ( https://code.woboq.org/userspace/glibc/csu/elf-init.c.html#__libc_csu_init ) __libc_csu_init()함수 : 프로그램 실행 시, __init() 함수와 __preini..

    Find the Merge point of two joined linked lists

    https://www.hackerrank.com/challenges/find-the-merge-point-of-two-joined-linked-lists/problem 두 연결 리스트의 연결지점을 찾는 문제 마지막에 return tmp1->data 또는 return tmp2->data 둘다 된다. (어차피 합병 포인트는 같으니까) int findMergeNode(SinglyLinkedListNode* head1, SinglyLinkedListNode* head2) { SinglyLinkedListNode *temp1=head1; SinglyLinkedListNode *temp2=head2; while(temp1!=temp2){ if(temp1->next==NULL){ temp1=head2; } else ..

    Apple and Orange

    https://www.hackerrank.com/challenges/apple-and-orange/problem #include #include #include #include #include #include #include #include #include char* readline(); char** split_string(char*); // Complete the countApplesAndOranges function below. void countApplesAndOranges(int s, int t, int a, int b, int apples_count, int* apples, int oranges_count, int* oranges) { for(int i=0;i