전체 글
-
[FTZ]해커스쿨(HackerSchool) LEVEL14 풀이(Solution)미사용/##Security 2015. 8. 15. 01:19
HackerSchool FTZ WARGAME Solution Start : 15.07.03 LEVEL14 [그림 1] hint 를 열어보면 [그림 1]과 같이 출력 된다. 이번에는 이전 문제와는 다르게 fgets 함수를 사용했다. fgets는 입력받을 스트림을 선택할 수 있고, 입력받을 데이터의 크기도 선택할 수 있어 버퍼 오버플로우에 비교적 안전하다고 할 수 있지만 이 문제에서는 본 버퍼의 크기보다 많은 데이터를 입력받을 수 있도록 코딩해두었다. 그리고 이번에는 check 라는 변수에 0xdeadbeef 라는 값이 있어야 상위 권한의 쉘이 실행되도록 코딩이 되어 있다. [그림 2] gdb로 attackme 를 열어보면 [그림 2]와 같이 출력이 되는데 우선 buf는 [ebp-56] 부터 시작되고, ch..
-
[FTZ]해커스쿨(HackerSchool) LEVEL13 풀이(Solution)미사용/##Security 2015. 8. 15. 01:19
HackerSchool FTZ WARGAME Solution Start : 15.07.03 LEVEL13 [그림 1] level13의 hint 파일을 열어 보면 [그림 1]과 같이 출력이 된다. i 라는 long 형태의 변수에 0x1234567 이 저장되고 argv를 통해 전달된 값은 buf 배열에 저장된다. level11과 마찬가지로 strcpy 함수를 이용하기 때문에 main 함수 인자값으로 오버플로우를 일으켜서 RET 를 덮어쓰면 되는데 주의할 점이 변수 i 에 0x1234567 이 없다면 그냥 프로그램이 kill 되어서 강제 종료 되어 버린다. [그림 2] gdb 로 attackme를 열어서 확인해보면 변수 i는 [ebp-12] 영역으로 할당되어 있고, buf 배열은 [ebp-1048] 부터 시작..
-
[FTZ]해커스쿨(HackerSchool) LEVEL12 풀이(Solution)미사용/##Security 2015. 8. 15. 01:18
HackerSchool FTZ WARGAME Solution Start : 15.07.03 LEVEL12 [그림 1] hint 파일을 열어보면 [그림 1]과 같이 attackme 소스 코드가 출력이 된다. 이 프로그램의 특징은 gets 함수로 입력을 받아서 str 배열에 저장하는 방식으로 동작을 한다. level11의 경우 main 함수의 argv 로 값을 받아와서 strcpy 함수로 str 배열에 값을 저장했는데 level12는 그 데이터를 전달받는 방식이 다르다. gets 함수의 경우 사용자가 입력하는데로 크기의 제한 없이 데이터를 변수에 저장시키기 때문에 버퍼 오버플로우 공격에 취약한 함수이다. 그럼 우리가 생각해 볼 수 있는 것은 입력을 변수 공간 만큼 한 다음 RET 값을 쉘 코드가 있는 곳의 ..
-
[FTZ]해커스쿨(HackerSchool) LEVEL11 풀이(Solution)미사용/##Security 2015. 8. 15. 01:17
HackerSchool FTZ WARGAME Solution Start : 15.07.03 LEVEL11 [그림 1] hint 파일을 열어 attackme 프로그램의 소스를 확인 해 보면 main 함수에서 argv 값을 전달받아 str 배열에 복사하는 것을 확인할 수 있다. [그림 2] gdb를 이용해 attackme를 열어보면 sub esp, 0x108 즉 264byte 만큼 메모리 공간을 할당한다. 그리고 strcpy 함수 부분을 보면 [ebp-264]를 인자로 전달을 하는데 이게 곳 str 배열의 시작 주소라는 것을 확인할 수 있다. [그림 3] call strcpy를 하기 직전 stack을 간단하게 그려보면 [그림 3]과 같이 나타내지는데 strcpy 함수로 전달되는 인자값 중에 [ebp+12] ..
-
[SystemHacking] 버퍼 오버플로우(BufferOverflow)의 개념과 방법미사용/##Security 2015. 7. 28. 14:53
[버퍼 오버플로우의 개념과 방법] 버퍼 오버플로우는 시스템 해킹의 대표적인 공격 방법 중 하나이다. 버퍼(Buffer)라는 것은 보통 데이터가 저장되는 메모리 공간을 일컫는데 단순히 메인 메모리만이 아닌 다른 하드웨어에서 사용하는 임시 저장 공간 역시 버퍼라고 부른다. 오버플로우(Overflow)는 단어 뜻에서 유추할 수 있듯이 데이터가 지정된 크기의 공간보다 커서 해당 메모리 공간을 벗어 나는 경우 사용한다. 결론적으로 버퍼 공간의 크기보다 큰 데이터를 저장하게 해서 일어나는 오버플로우(Overflow)를 이용한 공격이다. 보통 개발된 프로그래밍 언어의 버퍼 오버플로우에 취약한 함수가 있는 경우 이를 이용해 공격을 시도하며 공격이 성공할 경우 시스템의 권한을 상승시키거나 악성 행위를 하도록 할 수 있기..
-
[SystemHacking] 간단한 쉘 코드(ShellCode) 제작하기미사용/##Security 2015. 7. 28. 14:51
[리눅스 쉘 코드 제작] - 쉘을 실행시키는 간단한 쉘 코드를 만들어 봄으로써 쉘 코드를 만드는 원리에 대해 이해한다. /bin/sh 혹은 /bin/bash 쉘을 실행시키는 프로그램 작성 gdb 및 objdump 등의 툴을 이용해 쉘을 실행 시키는 시스템 함수 분석, 어셈블리 확인 inline asm 을 이용해 시스템 함수의 주요 어셈블리어로 코딩 objdump 를 이용해 바이너리값 추출 NULL byte 제거 및 쉘 코드 다이어트 작업 [그림 1] execve 함수를 이용해 간단한 쉘을 실행시키는 프로그램을 코딩한다. ※ 흔히 사용하는 system 함수는 fork() + execve() 형태로 동작하므로 간단한 execve() 로 쉘 코드를 제작해 본다. 주의! gcc로 컴파일 할 때 –static –..
-
[FTZ]해커스쿨(HackerSchool) LEVEL10 풀이(Solution)미사용/##Security 2015. 7. 28. 14:49
HackerSchool FTZ WARGAME Solution Start : 15.07.03 LEVEL10 [그림 1] level10의 hint 를 확인 해 보면 공유 메모리에 두 사람이 대화한 내용이 기록되어 있는 것을 확인 할 수 있다. 우선 공유 메모리에 대해서 알아야 하는데 공유 메모리란 기존 프로세스가 독립된 메모리 공간을 할당 받고 다른 프로세스의 메모리 공간은 접근이 불가능 한데 반해 메모리 공간을 여러 프로세스가 함께 접근해서 데이터를 공유할 수 있는 공간을 말한다. sys/ipc.h 와 sys/shm.h 두 개의 헤더 파일이 필요하며 shmget() 함수는 임의의 key를 인자로 전달하면 해당 key 값에 대해 공유 메모리를 만들게 된다. 정상적으로 할당이 되면 공유 메모리에 대한 식별자 ..
-
[FTZ]해커스쿨(HackerSchool) LEVEL9 풀이(Solution)미사용/##Security 2015. 7. 28. 14:47
HackerSchool FTZ WARGAME Solution Start : 15.07.03 LEVEL9 [그림 1] level9의 hint 를 보면 [그림 1] 과 같이 /usr/bin/bof 프로그램의 소스 코드가 있다. 소스 코드를 보면 buf2와 bof 배열이 각각 10칸씩 선언이 되어있고, fgets 로 40byte 만큼 buf 배열에 입력받는다. 입력받는건 buf지만 strncmp 로 비교하는 배열은 buf2 인걸 보니 버퍼 오버플로우를 이용해서 buf2에 "go" 라는 문자열이 저장되도록 해야 하는 것 같다. [그림 2] gdb 를 이용해서 buf 배열에 할당 된 공간을 확인하려 했으나 허가 거부가 되었다. 이유를 보니 /usr/bin/bof 에 권한이 그룹에 포함된 계정의 경우 실행 권한만 ..