일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- HTML
- Javascript
- 기계학습
- 생활코딩
- C언어
- BOJ
- 백준
- WarGame
- Sookmyung Information Security Study
- 숙명여자대학교 정보보안 동아리
- hackctf
- BOJ Python
- PHP 웹페이지 만들기
- 머신러닝
- SWEA
- 숙명여자대학교 정보보안동아리
- 자료구조 복습
- lob
- CSS
- 파이썬
- siss
- 웹페이지 만들기
- hackerrank
- 풀이
- XSS Game
- 드림핵
- c
- Python
- c++
- The Loard of BOF
- Today
- Total
목록2021 SISS 21기 활동/2학시 시스템 (12)
혜랑's STORY
먼저 주어진 파일을 다운받아 코드의 흐름을 살펴보자. hook.c // gcc -o init_fini_array init_fini_array.c -Wl,-z,norelro #include #include #include #include void alarm_handler() { puts("TIME OUT"); exit(-1); } void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGALRM, alarm_handler); alarm(60); } int main(int argc, char *argv[]) { long *ptr; size_t size; initialize(); printf("..
먼저 주어진 파일을 다운받아 코드의 흐름을 살펴보자. basic_heap_overflow.c #include #include #include #include #include struct over { void (*table)(); }; void alarm_handler() { puts("TIME OUT"); exit(-1); } void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGALRM, alarm_handler); alarm(30); } void get_shell() { system("/bin/sh"); } void table_func() { printf("overwrite_me!"..
우분투 버전이 16.04라 tcache를 실행할 수 없어 드림핵에 있는 자료를 가져와서 사용함!! Heap Feng Shui 힙의 레이아웃을 조작하여 원하는 객체를 덮어쓸 수 있게 하는 기법 리얼 월드에서는 프로그램의 코드가 큰만큼 동적 할당도 많이 이루어지기 때문에 힙 오버플로우 취약점이 있다하더라도 힙 원하는 객체를 덮어쓰는 것이 쉽지 않다. 덮어쓸 객체의 낮은 주소에 힙 오버플로우가 발생하는 힙을 할당하여 덮어써야 한다. C++의 경우 특정 클래스가 불리면 생성자가 호출되고, vtable이 힙과 같은 특정 메모리에 할당이 될 것이다. 이때 힙 오버플로우 취약점을 이용하여 vtable 객체를 덮기 위해서는 해당 객체보다 낮은 주소에 힙을 할당하여야 한다. // gcc -o fengshui1 fengs..
이번주에 해결할 문제는 Dreamhack Wargame에 있는 house_of_force 문제이다. 앞서 house_of_force 기법에 대하여 학습한 내용을 떠올리며 문제를 해결하면 될 것 같다. 문제 정보를 통해 32bit 바이너리 파일이며, Canary, NX, Partial RELRO가 설정되어 있는 것을 알 수 있다. 문제 파일을 다운로드 받아 주었다. force.c // gcc -o force force.c -m32 -mpreferred-stack-boundary=2 #include #include #include #include #include int *ptr[10]; void alarm_handler() { puts("TIME OUT"); exit(-1); } void initialize..
House of Force House of Force 기법은 top chunk의 size를 조작함으로써 임의의 주소에 힙 청크를 할당 할 수 있는 공격 기법이다. 이 기법을 사용하기 위해서는 공격자가 top chunk의 size를 조작하고, 원하는 크기의 힙 청크를 할당 할 수 있어야 한다. 아래는 top chunk를 처리하는 _int_malloc 코드의 설명이다. static void * _int_malloc (mstate av, size_t bytes) { INTERNAL_SIZE_T nb; /* normalized request size */ ... mchunkptr remainder; /* remainder from a split */ unsigned long remainder_size; /* i..
1️⃣ checksec 64 bit 바이너리 파일이고, Partial RELRO와 Canary, NX가 설정되어 있다. 2️⃣ IDA main() player의 이름을 입력받고, 메뉴에 있는 info, malloc, free, key, exit 중 입력받은 번호를 실행하고 있다. fastbin dup을 사용하여 풀이하는 문제인 것 같다. 역시 player는 전역 변수로 선언되어 있다. Malloc() 위 코드는 0x20 크기의 힙을 할당하고 데이터를 입력할 수 있다. Free() Key() 최종적으로 실행하여 셸을 획득할 것이다. 이때 꼭 필요한 target 또한 전역 변수로 선언되어 있다. 3️⃣ Exploit Scenario 검증 우회를 위해 두 개의 힙을 할당한다. old와 p 포인터를 다르게 하여..
fastbin dup consolidate fastbin dup consolidate는 fastbin에 들어간 힙 청크들을 병합시켜 smallbin에 넣어 Double Free 검증을 우회하는 기법이다. smallbin에 들어간 fastbin 크기의 힙 청크를 한 번 더 해제하면 다시 fastbin에 들어가기 대문에 검증을 우회할 수 있다. _int_malloc #define have_fastchunks(M) (((M)->flags & FASTCHUNKS_BIT) == 0) else { idx= largebin_index (nb); if (have_fastchunks (av)) malloc_consolidate (av); } 위 코드를 확인해보면, malloc 함수 내부에서 largebin 크기의 할당 ..
fastbin dup fastbin dup은 Double Free 버그를 이용하여 fastbin freelist를 조작해 이미 할당된 메모리에 다시 힙 청크를 할당하는 공격 기법이다. 이를 이용하면 fastbin의 FD 포인터를 조작해 임의 주소에 힙 청크를 할당할 수 있다. 그러나 이를 방지하기 위해 FD 포인터가 가리키는 영역의 size와 할당하려는 bin의 크기를 비교하는 코드가 존재한다. 해당 코드를 이해하고 우회하는 방법 또한 알아보자. fastbin_dup.c // gcc -o fastbin_dup fastbin_dup.c #include #include int main(void){ char *ptr1 = (char *)malloc(0x40); char *ptr2 = (char *)malloc..