일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- SWEA
- PHP 웹페이지 만들기
- CSS
- Sookmyung Information Security Study
- hackerrank
- siss
- Python
- The Loard of BOF
- BOJ
- XSS Game
- HTML
- 웹페이지 만들기
- 백준
- 머신러닝
- WarGame
- 기계학습
- c
- c++
- C언어
- 자료구조 복습
- hackctf
- 숙명여자대학교 정보보안동아리
- 생활코딩
- 파이썬
- 풀이
- 숙명여자대학교 정보보안 동아리
- 드림핵
- lob
- BOJ Python
- Javascript
- Today
- Total
목록무지성 공부방/Dreamhack SystemHacking (41)
혜랑's STORY
보호되어 있는 글입니다.
보호되어 있는 글입니다.
시작하며 스택의 반환 주소를 덮는 공격은 스택 카나리, NX, ASLR이 도입되며 점점 어려워졌다. 그래서 Exploit Tech: Return to Library에서 살펴본 것과 같이 pop rdi; ret 같은 코드 가젯과 라이브러리의 system 함수를 사용하는 공격 기법이 새롭게등장하였다. 지난 예제에서는 편의를 위해 바이너리의 PLT에 system 함수를 포함시켰지만, 실제 바이너리에 system 함수가 PLT에 포함될 가능성은 거의 없다. 따라서 현실적으로 ASLR이 걸린 환경에서 system 함수를 사용하려면 프로세스에서 libc가 매핑된 주소를 찾고, 그 주소로부터 system 함수의 오프셋을 이용하여 함수의 주소를 계산해야 한다. Return Oriented Programming(ROP)..
시작하며 지금까지 배운 공격 기법과 보호 기법을 순서대로 정리하면 다음과 같다. Return Address Overwrite : 반환 주소를 악성 함수의 주소로 덮어서 셸 획득 Stack Canary : 스택 프레임의 반환 주소 전에 랜덤한 카나리를 주입하여 반환 주소를 덮기 어렵게 함 Return to Shellcode : 카나리를 우회하고, 셸 코드를 주입한 버퍼의 주소로 반환 주소를 덮어서 셸 획득 ASLR : 임의 버퍼의 주소를 알기 어렵게 함 NX : 각 세그먼트에 불필요한 실행권한을 제거함으로써 공격자가 임의의 버퍼에 주입한 코드를 실행하기 어렵게함 이번에는 NX를 우회하는 공격 기법으로 알려진 Return To Library(RTL)에 대하여 알아볼 것이다. Return To Library ..
라이브러리(Library) 자주 사용되는 함수들의 정의를 묶어서 하나의 라이브러리 파일로 만들고, 이를 여러 프로그램이 공유해서 사용할 수 있도록 지원한다. 라이브러리를 사용하면 같은 함수를 반복적으로 정의해야 하는 수고를 덜 수 있어 코드 개발의 효율이 높아진다. 대표적으로 C의 표준 라이브러리인 libc는 우분투에 기본으로 탑재된 라이브러리이며, 실습환경에서는 /lib/x86_64-linux-gnu/libc-2.27.so에 있다. 링크(Link) 프로그램에서 어떤 라이브러리의 함수를 사용한다면, 호출된 함수와 실제 라이브러리의 함수가 링크 과정에서 연결된다. 아래 코드를 예로 자세히 알아보자. // Name: hello-world.c // Compile: gcc -o hello-world hello-..
ASLR(Address Space Layout Randomization) - 바이너리가 실행 될 때마다 스택, 힙, 공유 라이브러리 등을 임의의 주소에 할당하는 보호 기법 Exploit Tech: Return to shellcode에서 r2s는 ASLR이 적용되어 실행할 때마다 buf의 주소가 변경되었다. 실습의 편의를 위해 buf의 주소를 출력해주었으므로 buf를 공격하는 것은 어렵지 않았으나, 일반적인 바이너리의 경우 buf의 주소를 구하는 과정이 선행되어야 한다. ASLR은 커널에서 지원하는 보호 기법이며, 다음의 명령어로 확인할 수 있다. $ cat /proc/sys/kernel/randomize_va_space 각 ASLR이 적용되는 메모리 영역은 다음과 같다. No ASLR(0) : ASLR을..
ssp_001.c #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(30); } void get_shell() { system("/bin/sh"); } void print_box(unsigned char *box, int idx) { printf("Element of index %d is : %02x\n", idx, box[idx]); } void menu() { puts("[..
보호되어 있는 글입니다.