본문 바로가기

반응형

공부/보안

(14)
[dreamhack] basic_exploitation_000 wirteup 추억팔이 시작! basic_exploitation_000 (pwnable) url : https://dreamhack.io/wargame/challenges/2/ 아무런 보호 기법이 걸려있지 않은 것을 확인할 수 있다. basic_exploitation_000 을 실행시키면 buf 의 주소가 출력되고 입력을 기다린다. 입력을 받으면 종료된다. 취약점 찾기 #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_..
[dreamhack] System Exploitation 10강 거의 다쓴거 날라가서 멘탈이 터졌으니 짧게 하고 나중에 수정하겠다. 10강 Advanced Linux Exploitation 10.1 one-shot gadget 함수 포인터를 덮어쓸 수 있지만, ROP와 같이 코드를 연계해 셸을 획득하는 것이 불가능할 때 이런 상황에서 사용할 수 있는 가젯이 원샷 가젯이다. 원샷 가젯이란 라이브러리 내에 존재하는 가젯으로, 리눅스 시스템에서 특정 조건 하에 pc를 바꾸는 것 만으로 셸을 실행시켜 주는 코드 가젯이다. 원샷 가젯은 libc.so.6 라이브러리 파일 내부에 존재해 라이브러리가 매핑된 주소를 안다면 오프셋 계산을 통해 가젯의 주소를 찾을 수 있다. 원샷 가젯들 중 하나의 디스어셈블리 결과이다. do_system 함수 내부에 존재하는 코드로, system 함수..
[dreamhack] System Exploitation 7강 7강Linux Exploitation & Mitigation Part 2 7.1 Address Space Layout Randomization(ASLR) Address Space Layout Randomization(ASLR) : 라이브러리, 힙, 스택 영역 등의 주소를 바이너리가 실행될 때마다 랜덤하게 바꿔 정적 주소를 이용한 공격을 막기 위한 보호 기법 NX bit는 바이너리의 컴파일 옵션에 따라 적용 여부가 결정 이와 달리 ASLR은 서버의 설정 파일에 의해 보호 기법의 적용이 결정된다. Ubuntu 16.04 에서 /proc/sys/kernel/randomize_va_space 파일의 값을 확인하면 서버의 ASLR 설정 여부를 알 수 있다. 설정 파일의 값으로는 0, 1, 2가 있다. 0 : AS..
[dreamhack] System Exploitation 6강 - NX bit 6강 Linux Exploitation & Mitigation Part 1 6.4 NX bit의 등장 앞에서 프로그램 취약점을 이용해 실행 흐름을 조작한 뒤 스택 영역에 저장된 셸코드를 실행했다. 그러나 프로그램에서 스택 메모리는 코드실행 용도로 사용되는 것이 아니라, 데이터를 읽고 쓰는 데 사용되어 실행 권한이 필요가 없다. 이러한 이유로 프로그램의 공격을 어렵게 하기 위해, 메모리에 쓰기 권한과 실행 권한을 동시에 부여하지 않는 No-eXecute bit(NX bit)가 등장했다. NX bit가 설정되어 있을 경우 쓰기 권한과 실행 권한이 동시에 있는 메모리 영역이 존재하지 않는다. 그래서 위의 예제처럼 셸코드를 스택 메모리에 저장해 실행 흐름을 스택으로 바꾸는 공격은 불가능하다. 프로그램에 스택 버..
[dreamhack] System Exploitation 6강 - NOP Sled 6강 Linux Exploitation & Mitigation Part 1 6.3 NOP Sled 명령어 중 하나인 NOP(No OPeratrion)은 xchg eax, eax와 같이 프로그램의 실행에 영향을 주지 않아 프로그램 실행 중 NOP 명령어를 만나면 다음 명령어로 넘어가는 것과 같은 효과를 준다. (주로 명령어의 주소 alignment를 맞출 때 사용) x86 아키텍처의 NOP 명령어 바이트코드는 0x90 으로 NOP Sled(NOP Slide)는 주로 셸코드의 주소를 알기 힘든 경우 큰 메모리를 확보해 셸코드 주소의 오차 범위를 크게 만들 때 사용한다. 위 코드서 NOP Sled를 이용해 새로운 공격 코드를 만들어 보면 10000바이트의 NOP Sled가 포함된 셸코드를 argv[1]에 넣은..
[dreamhack] System Exploitation 6강 - Return Address Overwrite 6강 Linux Exploitation & Mitigation Part 1 6.2 Return Address Overwrite 스택 버퍼 오버플로우 취약점에서 주로 스택의 리턴 주소를 덮는 공격을 한다. -> 스택에 저장된 리턴 주소를 다른 값으로 바꾼다. 리턴 주소 : 함수가 끝나고 돌아갈 이전 함수의 주소 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 #include int vuln(char *src) { char buf[32] = {}; strcpy(buf, src); return 0; } int main(int argc, char *argv[], char *environ[]) { if (argc 위 익스플로잇 코드는 리턴 주소를 스택에 있는 셸코드의 주소로 덮지만, 스택의 ..
[dreamhack] System Exploitation 6강 - ELF 동적 분석 6강 Linux Exploitation & Mitigation Part 1 6.1 ELF 동적 분석 바이너리를 분석할 때, 바이너리가 실행되며 변화하는 상태를 보기 위해 동적 디버깅이 필요하다. 때문에 리눅스 실행 파일인 ELF 파일을 동적으로 디버깅하는 방법을 알아야한다. ELF의 동적 분석을 위한 도구로 gdb, strace, Itrace, IDA가 있고, 이 중 ELF 디버거인 gdb(GNU Debugger)는 AT&T와 intel 두 종류가 있다. 널리 쓰이는 디스어셈블리 문법은 intel이다. 1 2 3 4 5 6 7 8 9 10 #include int main(void){ int sum = 0; int val1 = 1; int val2 = 2; sum = val1 + val2; printf("..
[dreamhack] System Exploitation 5강 5강 Logical Bugs 5.1 Logical Bugs Logical Bugs (논리적 오류) : 프로그램이 부정확하게 동작하지만 크래시가 발생하지 않는 경우 프로그램의 메모리 관리 실수로 인해 발생하는 메모리 커럽션 취약점 버퍼오버플로우 :버퍼가 허용할 수 있는 양의 데이터보다 더 많은 값이 저장돼 버퍼가 넘치는 취약점 5.2 Command Injection Injection : 검증되지 않은 공격자의 입력을 셸 커맨드 또는 쿼리 일부로 처리해 정상적인 실행 흐름을 변경할 수 있는 취약점 분류 - SQL 인젝션 : 문자열을 Structured Query Language(SQL)의 일부로 처리해 발생하는 취약점 - 커맨드 인젝션 : 문자열 일부를 셸 커맨드에서 처리하면서 발생하는 취약점 (검증 없이 ..

반응형