분류 전체보기
Divisible Sum Pairs
www.hackerrank.com/challenges/divisible-sum-pairs/problem int divisibleSumPairs(int n, int k, int ar_count, int* ar) { int pair=0; int sum=0; for(int i=0;i
[Heap] Security Check
_int_malloc, _int_free는 heap이 정상동작 하지 못하는 경우를 방지하기 위해 검증 코드가 존재한다. 이 검증 코드를ㄹ 이해하고 있어야 익스플로잇 할 때 우회해서 공격할 수 있다. _int_malloc malloc(): memory corruption (fast) #define fastbin_index(sz) \ ((((unsigned int) (sz)) >> (SIZE_SZ == 8 ? 4 : 3)) - 2) idx = fastbin_index (nb); if (victim != 0) { if (__builtin_expect (fastbin_index (chunksize (victim)) != idx, 0)) { errstr = "malloc(): memory corruption (f..
centOS 텍스트 모드(Server(B)) 설치 및 설정
wget 프로그램 패키지 설치 # dnf -y install bind-utils net-tools wget unzip bzip2 dnf 저장소 설정 # cd /etc/yum.repos.d/ # rm -f *.repo # ls # wget http://download.hanbit.co.kr/centos/8/This.repo # ls -l #dnf clean all 네트워크 설정 # cd /etc/sysconfig/network-scripts # ls # vi ifcfg-ens160 BOOTPROTO="none" IPADDR=192.168.111.200 NETMASK=255.255.255.0 GATEWAY=192.168.111.2 DNS1=192.168.111.2 [A] → 위의 내용으로 수정 → [ESC]..
[Heap] ptmalloc2
Memory Allocator dlmalloc, ptmalloc2, jemalloc, tcmalloc, libumem 등의 메모리 할당자 대부분의 운영체제에서 동적할당 시, 힙 페이지 생성 ptmalloc2 리눅스 GLIBC (GNU C Library)에서 사용하는 메모리 할당자 서로 다른 스레드가 서로 간섭X ,서로 다른 메모리 영역에 접근 dlmalloc 코드를 기반으로 멀티 스레드에서 사용되도록 확장; 한 번에 두개 이상의 메모리 영역을 활성화 해 멀티 스레드 효율적으로 처리복수의 스레드가 동시에 malloc을 호출: 각 스레드는 별도의 heap segment 생성 + 해당 heap을 유지 보수하는 데이터 구조 분리해 메모리에 할당 $ wget https://ftp.gnu.org/gnu/glibc/..
centOS 네트워크 설정
isoredirect.centos.org/centos/8.0.1905/isos/x86_64/ 에서 CentOS 8 (1905) 다운로드 dnf 명령을 사용할 때도 CentOS8 (1905) 출시 시점의 SW가 설치되도록 하기 # cd /etc/yum.repos.d/ # mkdir backup # ls # mv *.repo backup //~~.repo 형식의 파일들을 모두 backup 디렉터리로 이동 # ls # gedit This.repo cafe.naver.com/thisislinux/5833
first
checksec 64bit Pseudo Code int __cdecl main(int argc, const char **argv, const char **envp) { puts("This is my FIRST PWNABLE!!"); return load(10); } ssize_t __fastcall load(int a1) { unsigned int v2; // [rsp+Ch] [rbp-14h] int v3; // [rsp+1Ch] [rbp-4h] v2 = a1; puts("How Many Bullets do you have?"); scanf("%d", &v3); if ( a1 > v3 ) v2 = v3; printf("You have %dbullets\n", v2); return bang(); } ssi..
first
▽ C 소스코드 더보기 #define _CRT_SECURE_NO_WARNINGS #define _GNU_SOURCE #include #include #include #include #include #include void bang(); void load(int); void main(int argc, char *argv[]) { //seteuid(geteuid()); int v2 = 10; puts("This is my FIRST PWNABLE!!"); load(v2); } void load(int v) { int v1; puts("How Many Bullets do you have?"); scanf("%d", &v1); if (v > v1)v = v1; printf("You have %dbullets\n..
[DS] Insert a node at the head of a linked list
www.hackerrank.com/challenges/insert-a-node-at-the-head-of-a-linked-list/problem 지난 번 DS 문제는 말단 노드에 새로운 노드를 삽입하는 문제였다면 이번 문제는 head 노드에 새로운 노드를 삽입하는 문제이다. 이 경우가 말단에 삽입할 때보다 더 간단한 것 같다. SinglyLinkedListNode* insertNodeAtHead(SinglyLinkedListNode* llist, int data) { SinglyLinkedListNode* node = malloc(sizeof(SinglyLinkedListNode)); node->data = data; node->next = NULL; if(llist == NULL) llist = nod..
Birthday Chocolate
www.hackerrank.com/challenges/the-birthday-bar/problem m(month)와 d(day) 값을 이용해서 정수배열 s에서 연속된 m개의 숫자의 합이 d인 경우의 수를 출력하는 코드이다. 전체적으로 쉽고 주의해야 할 부분은 반복문의 횟수(조건 부분)이다. #include #include #include #include #include #include #include #include #include #include char* readline(); char* ltrim(char*); char* rtrim(char*); char** split_string(char*); // Complete the birthday function below. int birthday(int s..
[HackCTF] RTC
checksec Pseudo Code int __cdecl main(int argc, const char **argv, const char **envp) { char buf; // [rsp+0h] [rbp-40h] setvbuf(stdin, 0LL, 2, 0LL); write(1, "Hey, ROP! What's Up?\n", 0x15uLL); return read(0, &buf, 0x200uLL); } 0x40byte만큼 할당받은 buf 변수에 0x200byte만큼 read함수를 통해 읽어들이려하면서 overflow 발생가능 >> read함수를 이용해 buf변수에 0x40 + 8 byte 만큼 문자열을 채워주면 return address를 덮어 쓸 수 있을 것이다 Payload gadget gadget..