미사용
-
[FTZ]해커스쿨(HackerSchool) LEVEL16 풀이(Solution)미사용/##Security 2015. 8. 15. 01:20
HackerSchool FTZ WARGAME Solution Start : 15.07.03 LEVEL16 [그림 1] hint 를 확인해 보면 [그림 1]과 같이 출력이 된다. 코드를 분석해보면 shell 함수와 printit 함수가 정의되어 있고, main 함수에서는 void 타입의 call 함수 포인터가 선언되어 있다. 그리고 해당 함수 포인터에는 printit 함수의 포인터가 저장되어 있으며 나중에는 call에 저장된 포인터로 함수를 호출한다. shell 함수에 상위 권한으로의 쉘을 실행시키는 코드가 포함되어 있으므로 우리는 이 shell 함수가 실행되도록 해야한다. [그림 2] gdb로 열어서 info functions 를 입력하면 정의된 함수 정보가 출력이 되는데 그 중 shell 함수의 주소값..
-
[FTZ]해커스쿨(HackerSchool) LEVEL15 풀이(Solution)미사용/##Security 2015. 8. 15. 01:20
HackerSchool FTZ WARGAME Solution Start : 15.07.03 LEVEL15 [그림 1] hint를 열어보면 [그림 1]과 같이 출력이 되는데 앞에 level14와 코드가 같은 것 처럼 보이나 사실 일부분이 조금 다르다. 우선 check 변수가 int * 형태이며, if에서 check 변수 값과 비교한 것이 아니고, check 변수에 있는 값을 역참조 한 값과 비교한다. [그림 2] gdb로 attackme를 열어보면 [그림 2]와 같이 출력이 되는데 buf 는 level14와 같이 [ebp-56] 부터 시작되고, cmp 를 보면 level14는 eax, 0xdeadbeef 였던 반면 이번엔 [eax], 0xdeadbeef 로 eax의 값을 역참조한 값과 비교하는 것을 확인할..
-
[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 –..