일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 숙명여자대학교 정보보안 동아리
- hackerrank
- 백준
- c
- 웹페이지 만들기
- 기계학습
- 자료구조 복습
- Javascript
- XSS Game
- PHP 웹페이지 만들기
- 숙명여자대학교 정보보안동아리
- The Loard of BOF
- 드림핵
- Sookmyung Information Security Study
- BOJ
- hackctf
- c++
- 풀이
- 생활코딩
- 파이썬
- lob
- CSS
- 머신러닝
- Python
- SWEA
- HTML
- siss
- WarGame
- C언어
- BOJ Python
- Today
- Total
목록2021 SISS 21기 활동 (136)
혜랑's STORY
_int_malloc _int_malloc과 _int_free는 개방자의 실수, 악의적인 행위 등으로 힙이 정상적으로 동작하지 않는 것을 방지하기 위해 검증 코드가 존재한다. (검증 코드를 이해하고 있다면 익스플로잇을 할 때 이를 우회하여 공격할 수 있게 된다.) 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 = "mall..
ptmalloc2 allocator ptmalloc2는 리눅스 GLIBC에서 사용하는 메모리 할당자이다. 운영체제마다 메모리 할당자가 동작하는 방식은 각각 다르며, ptmalloc2는 리눅스 유저 모드에서 주로 사용하는 할당자이다. ptmalloc2는 glibc 2.23 버전과 glibc 2.26(Tcache) 이후 버전 동작 방식이 조금 달라졌기 때문에 두 라이브러리 코드를 각각 비교하며 분석할 예정이다. 대부분의 운영 체제에서는 동적 할당을 하게 되면 힙 페이지가 생성된다. (운영체제마다 페이지의 명칭이 다를 수 있다.)동적 할당은 프로그램 실행 중에 메모리가 필요하게 되면 때에 따라 할당하고, 해제하는 방식으로 사용된다. ptmalloc2 메모리 할당자의 구현을 알아보기 위해 다음과 같이 GLIBC..
Practice > Algorithms > Greesy > Maximum Perimeter Triangle code vector maximumPerimeterTriangle(vector sticks) { vector result; int sum; sort(sticks.begin(), sticks.end(), greater()); for(int i=0; i
Practice > Algorithms > Greedy > Luck Balance code int luckBalance(int k, vector contests) { int sum = 0; sort(contests.begin(), contests.end(), greater()); for(int i=0; i0){ k--; sum += contests[i][0]; } else if(contests[i][1] == 0) sum += contests[i][0]; else sum -= contests[i][0]; } return sum; } 최대한 남은 행운 포인트를 높게 만드는 문제이다. 규칙은 이기면 필요한 행운 포인트만큼 차감하고 지면 필요한 행운 포인트만큼 더해준다. 이때 중요도가 1인 것은 k만큼 경기에..
Practice > Algorithms > Greedy code string gridChallenge(vector grid) { string str; for(int i=0; i
Practice > Algorithms > Greedy code long marcsCakewalk(vector calorie) { long sum = 0; sort(calorie.begin(), calorie.end(), greater()); for(int i=0; i
Practice > Algorithms > Warmup code void staircase(int n) { for(int i=1; ii; j--) printf(" "); for(int j=n; j>n-i; j--) printf("#"); printf("\n"); } } n개의 계단의 모습(보라색)을 출력하는 문제이다. 위와 같이 출력하기 위해 각 줄로 나누어 생각하면 j번째 줄은 n-j 만큼의 공백이 필요하고 j만큼 "#"이 필요하다. 이를 생각하며 제일 처음 for문은 몇 번째 계단줄인지를 나타내며, 두번째 for문은 공백을 출력, 마지막 for문은 "#"을 출력하게 된다. 이때 두 번째 for문과 세 번째 for문의 종료 조건을 잘 살펴보아야 한다. 결과
일단 바이너리 파일을 실행시켜 보았다. > 뒤에 입력을 받아서 AAAAAAAAAA를 입력해 주었고, Thank you! 라는 문장이 출력되며 프로그램이 종료되었다. checksec으로 바이너리 파일을 열어보자. 64bit 바이너리 파일이었고, Partial RELRO와 NX가 적용되어 있었다. Partial RELRO가 적용되어 있는 것으로 보아 got overwrite가 가능하다. IDA로 바이너리 파일을 열어보니 pwnm() 함수를 호출하고 있었고 pwnme() 함수는 read() 함수를 통해 s를 입력받은 때 선언된 s보다 더 많은 값을 입력받을 수 있어 overflow 취약점이 발생하게 된다. 함수 목록에서 usefulFunction() 함수를 발견하였다. print_file() 함수를 반환하여 ..