목록분류 전체보기 (66)
ghkdtlwns987
# 24_np.yaml apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: np-backend namespace: project-snake spec: podSelector: matchLabels: app: backend policyTypes: - Egress # policy is only about Egress egress: - # first rule to: # first condition "to" - podSelector: matchLabels: app: db1 ports: # second condition "port" - protocol: TCP port: 1111 - # second rule to: # first conditio..
비오비 교육생일 때 너무 바빠서 교육 들으면서 블로그를 적었던게 마지막이었던 것 같다. (이마저도 비공개로 올림..) 공부를 안하고 있는게 아니라 요즘 블로그 대신 개인 노션으로 갈아타서 글을 안적고 있습니다. 근데 공부했던 걸 기록하고 더 많은 사람들이 봤으면 좋겠어서 다시 블로그를 쓰고자 합니다. 근데 티스토리 말고 velog 에다가 쓸 예정임... https://velog.io/@ghkdtlwns987/ ghkdtlwns987 (황시준) - velog 포스트가 없습니다. velog.io 한번씩 놀러오세요~
drozer 은 python2.7 버젼을 필요로 한다. 하지만 기존에 python2.7 버젼이 설치되어있을 경우 다음과 같이 에러가 뜬다 그렇기에 난 python 가상 환경을 구축해 설치했다. 먼저, virtualenv 가 설치 되어있어야 한다. 그렇지 않다면 설치하자. $ pip install virtualenv 설치가 되었다면 $virtualenv env 위와 같이 구축이 완료되었다. python 가상 환경이 구축되었으니, source bin/activate actiavte 환경으로 진입 후 pip를 이용해 drozer 설치 $pip install drozer 설치가 완료되었다. 이후 adb forward 를 통해 bridge 연결 drozer console connect 했더니 에러가 떳다 이제부턴..
그래프에 대해 간단히 찍먹하는 느낌으로 알아보자. 먼저, 그래프를 공부하는데 정점과 간선에 대해 알아야 한다. 그림을 보면 알겠지만 정점은 노드 자체를 가리키고, 간선은 노드를 잇는 선을 간선 이라고 한다. 예를 들면 위 그림은 일명 다리 문제라고 불리는데, 여기서 A,B,C,D 는 정점이라 푸를 수 있고, 그 점들을 잇는 선을 간선이라 부를수 있다. 다음으론 방향 그래프와 무방향 그래프이다. 먼저 방향 그래프는 정점과 간선 사이에 방향을 표시해 놓은 그래프이고 무방향 그래프는 정점과 간선 사이를 그냥 연결만 되어 있다고 생각하면 된다. 표현 방법은 아래와 같다. 무방향 그래프 V(G1) = {0, 1, 2, 3} E(G1) = { (0,1), (0,3), (1,3), (2,3)} 방향 그래프 V(G1)..
허프만 코드에 대해 알아보자. 이번 글은 허프만 코드를 주제로 했지만, 우선순위 큐(Priority Queue) 를 먼저 선행하고 와야 한다. 먼저 허프만 코딩이 무엇인지 알아보자. 허프만 코딩은 문자의 빈도 또는 확률정보를 압축하는 알고리즘이다. 예를 들어 aaaabbbc 라는 문자가 있다고 가정했을 때, a = 4 , b = 3 , c = 1 로 표현하고 이를 통해 빈도가 높은 문자(a) 빈도가 낮은 문자(c) 로 표현할 수 있다. 여기서 a 에 111(2) 이란 값을 부여하고 b 와 c 는 111(2) 를 부여하면 중복되는 문제가 발생한다. 이는 복호화할 때 문제가 발생할 수도 있기 때문에, 값이 겹치면 안된다. 허프만 코드를 만들기 위해선 다음과 같은 과정을 거쳐야 한다. 1. 주어진 텍스트에서 ..
우선순의 큐에 대해 알아보자. 큐(Queue) 라고 하면 흔히 먼저 들어온게 먼저 나간다는(First in First out)구조이다. 하지만 우선순위 큐(Priority Queue) 는 들어간 순서에 상관없이 우선순위가 높은 데이터가 먼저 나오는 것을 의미한다. 우선순위 큐는 힙(Heap) 이라는 자료구조를 가지고 구현할 수 있다. 우선순위 큐는 배열을 이용해 구현할 수 있고, 연결리스트, 힙 기반 으로도 구현할 수 있다. 들어가기 전 각 기반에 따른 시간 복잡도에 대해 알아보자. 배열 기반 삽입 : O(n) 배열 기반 삭제 : O(1) 힙 기반 삽입 : O(log2n) 힙 기반 삭제 : O(log2n) 그럼 본격적으로 시작해 보겠다. 힙(Heap) 은 완전 이진 트리를 배열로 만든 자료구조이다. 이는..
//fastbin dup into stack #include #include #include int main(){ unsigned long long chunk_size = 0x21; unsigned long long * a = (unsigned long long*)malloc(8); unsigned long long * b = (unsigned long long*)malloc(8); printf("%p %p \n",a,b); free(b); free(a); unsigned long long * c = (unsigned long long*)malloc(8); printf("%p \n",c); *b = (unsigned long long)(((char *)&chunk_size) - sizeof(b)); un..
Heap 으로 Memory leak 하는 방법은 무엇일까? 그 방법은 여러가지가 존재한다. (포인터에 특정 함수의 GOT 를 넣어 출력되게 하거나, File * 를 활용하거나... 등등) 이번에 Heap Exploit 할때, 가장 많이 쓰이는 방법을 하나 소개하려 한다. small bin 이나 large bin 을 해제하게 되면 unsorted bin 에 들어가게 된다. unsorted bin 에 들어가게 된 chunk 는 FD, BK 에 main_arena 의 주소가 들어가게 되는데, main_arena 는 libc.so.6 라이브러리에 존재하는 구조체이기 때문에, libc_leak 이 가능해 진다. 다음은 드림핵에 나와있는 코드를 컴파일 했다. 내가 보여줄 환경은 glibc2.23 버젼이다. (gli..
UAF vs Double free Bug UAF(Use After free) 는 malloc() 하고 free() 했을때 , 또다시 동일 size를 malloc() 하게 되면 기존에 존재하던 heap 영역을 재사용 할 수 있다. 근데 만약 heap 에 포인터가 존재한다면 그 포인터를 system() 과 같은 주소로 덮게 되면 exploit 이 된다. 하지만 UAF 는 glibc2.23 이상은 막혔다. Double free Bug DFB는 free() 를 연속으로 하게되면 발생하는 버그이다. free(ptr1) free(ptr1) -> glibc 2.23 까지는 이와같이 free() 해도 무방했는데, 이제 더이상 위와같이 free()하게 되면 오류가 발생한다. free(ptr1) free(ptr2) fre..
large bin large bin 은 512 바이트 이상의 크기의 chunk가 해제 되었을 때 사용되는 bin이다. large bin 은 이중연결리스트를 사용하고, FIFO 구조를 사용한다. large bin 만의 특성이 있는데 이는 fd_nextsize , bk_nextsize 를 사용한다 if (!in_smallbin_range (nb))// large bin >= 512 { bin = bin_at (av, idx); /* skip scan if empty or largest chunk is too small */ if ((victim = first (bin)) != bin && (unsigned long) (victim->size) >= (unsigned long) (nb)) { victim = ..