일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- C언어
- BOJ Python
- hackerrank
- 드림핵
- 기계학습
- hackctf
- WarGame
- 생활코딩
- c
- CSS
- Python
- c++
- lob
- 백준
- 풀이
- 머신러닝
- 파이썬
- 웹페이지 만들기
- BOJ
- Sookmyung Information Security Study
- Javascript
- 숙명여자대학교 정보보안동아리
- SWEA
- siss
- PHP 웹페이지 만들기
- The Loard of BOF
- 숙명여자대학교 정보보안 동아리
- HTML
- XSS Game
- 자료구조 복습
- Today
- Total
목록2021 SISS 21기 활동 (136)
혜랑's STORY
5주차 자유 문제 Prepare > Algorithms > Sorting 풀이 삽입 정렬 코드를 완성하는 문제이다. 삽입 정렬의 기본 알고리즘은 다음과 같다. 1. 리스트의 인덱스 0번 위치의 항목 한 개는 이미 정렬이 완료된 리스트로 취급한다. 2. 정렬 리스트의 오른쪽에 있는 정렬되지 않은 원소(1번 위치의 원소)는 자신의 앞에 있는 원소와 크기를 비교하여 앞쪽 원소가 더 크면 자리를 바꾼다. 3. 동일하게 2번 위치에 있는 원소도 왼쪽으로 전진하면서 자기 자리를 찾을 때까지 왼쪽으로 전진한다. 4. 이 과정을 더 이상 비교 대상 원소가 없을 때까지 반복한다. 위 알고리즘을 바탕으로 코드를 작성해 보았다. int main() { int n, temp, i, j; vector arr; cin >> n;..
이번주에 해결할 문제는 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..
4주차 자유문제 Prepare > Mathematics > Algebra 풀이 문제에서 구해야하는 Fixed Profit 계산하는 수식은 다음과 같다. bugger + fixed_profit = x soda + fixed_profit = y bugger + soda + fixed_profit = z -> fixed_profit = (x + y) - z 따라서 처음 주어진 두 값의 합에서 마지막 값을 빼면 Fixed_Profit이다. 전체적인 코드는 다음과 같다. int profit(int b, int s, int c) { // Return the fixed profit. return (b + s) - c; } 실행 결과는 다음과 같다.
4주차 자료구조 복습 Prepare > Algorithms > Implementation 풀이 예산 내에서 살 수있는 가장 높은 금액 구성으로 물건을 구매하는 것이 목표이다. 따라서 가질 수 있는 모든 경우의 수를 계산해 주었다. 이때 예산 내에서 살 수 있는 구성이 없다면 -1을 리턴하면 된다. 전체적인 코드는 다음과 같다. int getMoneySpent(vector keyboards, vector drives, int b) { int maxB = -1; for(int i=0; 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..