일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Python
- c++
- CSS
- 풀이
- Javascript
- 생활코딩
- c
- 파이썬
- BOJ Python
- 웹페이지 만들기
- hackerrank
- 자료구조 복습
- 기계학습
- 숙명여자대학교 정보보안동아리
- lob
- siss
- 숙명여자대학교 정보보안 동아리
- The Loard of BOF
- SWEA
- HTML
- Sookmyung Information Security Study
- 머신러닝
- BOJ
- C언어
- PHP 웹페이지 만들기
- WarGame
- 드림핵
- 백준
- XSS Game
- hackctf
- Today
- Total
목록전체 글 (346)
혜랑's STORY
시작하며 지금까지 배운 공격 기법과 보호 기법을 순서대로 정리하면 다음과 같다. 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("[..
보호되어 있는 글입니다.
셸코드와 Return Address Overwrite을 이용하여 셸을 획득하는 실습을 해보자. 예제 코드; r2s.c // Name: r2s.c // Compile: gcc -o r2s r2s.c -zexecstack #include #include int main() { char buf[0x50]; printf("Address of the buf: %p\n", buf); printf("Distance between buf and $rbp: %ld\n", (char*)__builtin_frame_address(0) - buf); printf("[1] Leak the canary\n"); printf("Input: "); fflush(stdout); read(0, buf, 0x100); printf("Yo..
스택 카나리(Stack Canary) ; 스택 버퍼 오버플로우로부터 반환 주소를 보호 스택 카나리는 함수의 프롤로그에서 스택 버퍼와 반환 주소 사이에 임의의 값을 삽입하고, 함수의 에필로그에서 해당 값의 변조를 확인하는 보호기법이다. 카나리 값의 변조가 확인되면 프로세스는 강제로 종료된다. 스택 버퍼 오버플로우로 반환 주소를 덮으려면 반드시 카나리를 먼저 덮어야 하므로 카나리 값을 모르는 공격자는 반환 주소를 덮을 떄 카나리 값을 변조하게 된다. 이 경우, 에필로그에서 변조가 확인되어 공격자는 실행 흐름을 획득하지 못한다. 카나리의 작동 원리 카나리 정적 분석 // Name: canary.c #include int main() { char buf[8]; read(0, buf, 32); return 0; ..
가장 먼저 문제 파일을 다운받은 후 c파일을 열어 보았다. basic_exploitation_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 read_flag() { system("cat /flag"); } int main(int argc, char *argv[]) { char buf[0x80]; initialize(); gets(buf); r..