일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- The Loard of BOF
- WarGame
- BOJ
- hackctf
- 드림핵
- BOJ Python
- Python
- 파이썬
- 머신러닝
- Sookmyung Information Security Study
- 자료구조 복습
- C언어
- 생활코딩
- 풀이
- 백준
- 웹페이지 만들기
- 숙명여자대학교 정보보안 동아리
- c
- 숙명여자대학교 정보보안동아리
- XSS Game
- PHP 웹페이지 만들기
- siss
- CSS
- c++
- lob
- hackerrank
- HTML
- 기계학습
- Javascript
- Today
- Total
목록무지성 공부방/Dreamhack SystemHacking (41)
혜랑's STORY
셸코드와 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..
역시 가장 먼저 문제 파일을 다운받은 후 c 파일을 열어 보았다. basic_explotation_000.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); } int main(int argc, char *argv[]) { char buf[0x80]; initialize(); printf("buf = (%p)\n", buf); scanf("%141s", buf); r..
문제 파일을 다운 받고, c 파일을 열어 취약점을 찾아 보았다. // Name: rao.c // Compile: gcc -o rao rao.c -fno-stack-protector -no-pie #include #include void init() { setvbuf(stdin, 0, 2, 0); setvbuf(stdout, 0, 2, 0); } void get_shell() { char *cmd = "/bin/sh"; char *args[] = {cmd, NULL}; execve(cmd, args, NULL); } int main() { char buf[0x28]; init(); printf("Input: "); scanf("%s", buf); return 0; } scanf("%s", buf) 사용; ..
스택 버퍼 오버플로우 취약점 발생 코드 // Name: rao.c // Compile: gcc -o rao rao.c -fno-stack-protector -no-pie #include #include void init() { setvbuf(stdin, 0, 2, 0); setvbuf(stdout, 0, 2, 0); } void get_shell() { char *cmd = "/bin/sh"; char *args[] = {cmd, NULL}; execve(cmd, args, NULL); } int main() { char buf[0x28]; init(); printf("Input: "); scanf("%s", buf); return 0; } 취약점 분석 프로그램의 취약점은 scanf("%s", buf)에..
스택 버퍼 오버플로우 스택 버퍼 오버플로우는 스택의 버퍼에서 발생하는 오버플로우를 말한다 버퍼(buffer) 버퍼는 컴퓨터 과학에서 '데이터가 목적지로 이동되기 전에 보관되는 임시 저장소'의 의미를 갖는다. 수신 측과 송신 측 사이에 버퍼라는 임시 저장소를 두고, 이를 통해 간접적으로 데이터를 전달하게 한다. 송신 측은 버퍼로 데이터를 전송하고, 수신 측은 버퍼에서 데이터를 꺼내 사용한다. 이렇게 하면 버퍼가 가득 찰 때까지는 유실되는 데이터 없이 통신할 수 있다. 빠른 속도로 이동하던 데이터가 안정적으로 목적지에 도달할 수 있도록 완충 작용을 하는 것이 버퍼의 역할이라고 할 수 있다. 버퍼 오버플로우(Buffer Overflow) 버퍼 오버플로우는 문자 그대로 버퍼가 넘치는 것을 의미한다. 버퍼는 제작..
함수 호출 규약 함수 호출 규약은 함수의 호출 및 반환에 대한 약속이다. 한 함수에서 다른 함수를 호출할 때, 프로그램의 실행 흐름은 다른 함수로 이동한다. 그리고 호출한 함수가 반환하면, 다시 원래의 함수로 돌아와서 기존의 실행 흐름을 이어나간다. 그러므로 함수를 호출할 때는 반환된 이후를 위해 호출자(caller)의 상태(Stack frame) 및 반환 주소(Return Address)를 저장해야 한다. 또한, 호출자는 피호출자(Callee)가 요구하는 인자를 전달해줘야 하며, 피호출자의 실행이 조요될 때는 반환 값을 전달 받아야 한다. 함수 호출 규약을 적용하는 것은 일반적으로 컴파일러의 몫이다. 그러나 컴파일러의 도움 없이 어셈블리 코드를 작성하려 하거나, 또는 어셈블리로 작성된 코드를 읽고자 한..