분류 전체보기115 해커스쿨 F.T.Z Level 16 level 16 로그인 후 hint를 본다. level 16에서는 함수를 선언해 main에서 함수를 불러 실행한다. hint에서는 shell 함수가 사용되지 않고 있고 printit 함수만 사용된다. 이 정도만 봐도 hint는 대충 파악이 될 것으로 생각한다. 이제 gdb를 열어본다. gdb에서 중요한 것은 main+3, main+6, main+36, main+39다. main+3에서 0x38(56)byte를 확보 후 main+6에서 0x8048500 주솟값을 ebp-16에 저장한다. main+36에서 ebp-16을 eax에 저장하고 main+39에서 call 한다. gdb를 보고 프로그램을 실행하면 0x8048500의 주소에 무슨 데이터를 가졌는지 알 수 있다. "Hello there!"가 나오는 거로.. 2020. 2. 27. 해커스쿨 F.T.Z Level 15 level 15 로그인 후 hint를 본다. level 14와 같은 코드지만 "int *check" 변수 check의 변수가 포인터로 쓰여있다. 이것은 변수 *check가 가리키는 주소에 0xdeadbeef가 들어있는지 봐야 한다. C 코드 분석은 level 14에서 했으므로 생략하고 gdb를 열어본다. main+3에서 0x38(56)byte만큼 공간을 확보하고 main+17에서 ebp-56의 주소를 eax에 넣은 뒤 fgets 함수를 call 한다. main+29에서 ebp-16의 주소를 eax에 넣고 그 결과를 main+32에서 0xdeadbeef와 비교한다. 이 사이에 *check 변수의 주소를 찾아 먼저 넣어주면 BOF가 일어나게 된다. 여기서 level 14와 같은 크기로 ebp-56에서 비교문.. 2020. 2. 26. 해커스쿨 F.T.Z Level 14 level 14 로그인 후 hint를 본다. 위 hint를 분석하면 아래와 같다. C 코드를 분석하고 gdb를 열어본다. gdb를 보면 0x38(56)byte만큼 공간을 확보하고 ebp-16에 0xdeadbeef를 저장한다. 이렇게 보면 level 13과 똑같이 분석할 수 있다. 확보한 공간보다 -16에 0xdeadbeef를 저장한다고 생각하면 쉽다. fegts으로 입력을 받고 있으니 level 12와 같이 pipe를 이용해 명령을 넣어 줘야 한다. 더보기 level 13문제와 비슷해서 쉽게 느껴질 수도 있다. 그래서 0xdeadbeef는 40byte 이후에 저장한다. 여기서는 코드에서 쉘을 실행시켜줘서 주소를 구할 필요는 없다. 공격 코드만 크기에 맞게 만들어 주면 되는데 도식화하면 이렇게 된다. 56.. 2020. 2. 24. 해커스쿨 F.T.Z Level 13 level 13 로그인 후 hint를 본다. level 11, level 12와 비슷하다. BOF에 취약한 strcpy 함수가 있다. hint를 분석하면 위와 같다. strcpy는 복사할 때 크기를 검사하지 않기 때문에 BOF에 취약하다. 이제 BOF를 일으켜야 하는데 level 11과 level 12와 다른 점은 변수 i로 BOF가 일어나는지 확인하는 보안코드라고 볼 수 있다. 하지만 너무 단순한 보안코드이다. gdb로 attackme를 분석해 프로그램이 어떻게 돌아가는지 본다. 처음 0x418(1048)byte만큼 공간을 확보하고 ebp-12에 0x1234567을 저장한다. 확보한 공간보다 -12에 변수 i를 저장한다고 생각하면 쉽다. 더보기 그렇다면 1036byte 이후에 변수 i가 저장된다. 변수.. 2020. 2. 24. 해커스쿨 F.T.Z Level 12 level 12 로그인 후 hint를 본다. level 12는 level 11과 비슷하지만 여기서는 gets 함수가 나왔다. gets 함수도 strcpy와 같이 BOF에 취약하므로 BOF를 일으켜야 한다. level 11과 다른 점은 level 11에서는 인자로 받았지만, level 12에서는 gets 함수로 입력받는다. level 12에서는 포맷 스트링 버그는 없다. 다른 건 이것밖에 없고 str 256byte, dummy 8byte까지 같다. gets 함수로 입력 전달 방식이 바뀌었으므로 어떻게 입력을 넘겨줘야 할지 생각해야 한다. pipe( | ) pipe란 2개의 프로세스를 연결해주는 연결 통로를 의미한다. 앞에 실행한 명령어의 출력 결과를 뒤에 실행하는 명령어의 입력 값으로 넣어준다. 앞의 출력.. 2020. 2. 23. 해커스쿨 F.T.Z Level 11 BOF(Buffer OverFlow) level 11 로그인 후 hint를 본다. 간단하게 보자면 256byte 크기의 문자열을 받는다. level 12 권한을 부여하고 문자열은 두 번째 인자로부터 받아온다. 받아온 인자를 출력한다. 간단하게 보면 이렇게 분석할 수 있다. hint 코드에는 두 개의 취약점이 존재한다. 첫 번째는 Break Time인 BOF,GDB기초에서 BOF(버퍼 오버플로) 취약 함수에서 말했던 "strcpy"함수의 BOF 취약점이다. 두 번째는 "printf( str );"에서 포맷 스트링 버그가 발생할 수 있다. 포맷 스트링 버그(Format String Bug)는 더 어려운 내용이고 뒤에서 다루기 때문에 링크로 대체 하고 BOF를 이용한다. 어느 정도 파악해야 할 것은 끝난 것 같다. 일단 프로그램을 실행할 때 두 .. 2020. 2. 23. 해커스쿨 F.T.Z 쉘코드(Shell Code) 실습 level 11을 하기에 앞서 쉘코드에 대해 배우고 간단한 실습을 하는 시간을 가진다. 쉘코드에 대해서 처음 알았고 구글링을 통한 실습을 했다. 어셈블리 언어에 대해서는 Break Time에서 아주 조금이나마 들여다보았고 나중에 해야 할 것으로 생각하고 검색조차 해보지 않은 상태에서 하는 실습이므로 이해한 만큼 작성한 것이니 이해하고 읽어주길 바란다. 쉘코드(Shell Code) 쉘코드란 쉘을 실행시키는 기계어 코드다. 주로 BOF, FSB 공격에서 메모리에 쉘코드를 올리고 Return Address를 쉘코드가 저장된 메모리의 주소로 덮어씌우면 쉘을 실행하게 한다. 많은 사람이 쉘코드를 만들어 놓아서 검색만으로도 쉘코드를 얻을 수 있다. 하지만 공격할 때 쉘코드가 없고 검색을 하지 못하는 상황이라면 쉘코.. 2020. 2. 22. 해커스쿨 F.T.Z Level 10 level 10 로그인 후 hint를 본다. 여기서는 공유메모리(Shared Memory)에 대해 알아야 한다. 공유메모리에 대해서는 yundream님의 블로그 공유메모리의 사용, 리눅스 시스템 프로그래밍 IPC를 참조하였다. yundream님의 블로그에는 질 높은 좋은 글들이 많으니 한 번 둘러보는 것도 좋다. 공유메모리(Shared Memory) 보통 프로세스에서 사용되는 메모리 영역은 해당 프로세스만이 사용할 수 있다. 하지만 때때로 여러 개의 프로세스가 특정 메모리 영역을 사용했으면 하는 때가 있다. 이때 System V IPC 설비 중 하나인 "공유메모리"를 통해 사용할 수 있다. System V IPC(Inter-Process Communication)에서 대표적으로 제공하는 설비의 형태는 P.. 2020. 2. 19. 해커스쿨 F.T.Z Level 9 level 9에는 새로운 것들이 많이 나오고 이후부터는 GDB로 분석을 해야 한다. 그렇기에 Break Time을 가지고 level 9로 넘어왔다. level 9를 바로 보고 이해가 된다면 괜찮지만 안된다면 이전 포스트 Break Time을 보고 오는 것이 이해가 더 잘 된다. level 9에 로그인 후 hint를 본다. "/usr/bin/bof"를 이용해 level 10의 권한을 얻어야 한다. 일단 실행시켜보고 시작하자. bof 실행 후 아무거나 입력했다. 아무 반응이 없으므로 코드를 분석해야 한다. fgets 함수를 이용해 buf 변수에 40바이트 입력받을 수 있게 했다. 이때 buf의 크기인 10바이트를 초과해서 입력하면 버퍼 오버플로가 발생한다. 버퍼 오버플로 기초적인 설명 bof의 권한이 lev.. 2020. 2. 18. 해커스쿨 F.T.Z BOF(Buffer OverFlow), GDB 기초 level 9를 하기에 앞서 Break Time을 가져야겠다는 생각을 했다. 그 이유는 level 9에는 BOF(Buffer OverFlow)가 나오고 GDB를 통해 분석해야 하므로 간단한 설명과 정보를 주기 위함이다. BOF를 잘 이해하기 위해서는 메모리 구조와 스택 프레임을 이해해야 하는데 동빈나님의 유튜브를 참고하여 이해했다. 동빈나님의 좋은 강좌가 있어 소개하자면 해커스쿨 실습과 같은 시스템 해킹 강좌다. GDB를 통해 분석하기 위해서는 어셈블리언어를 알아야 한다. 어셈블리에 대해 간단히 설명한다. BOF(Buffer OverFlow) BOF(Buffer OverFlow)란 버퍼 오버플로라고 부르고 이는 메모리를 다루는 데에 오류가 발생하여 잘못된 동작을 하는 프로그램 취약점이다. 컴퓨터 보안과 .. 2020. 2. 15. 이전 1 ··· 5 6 7 8 9 10 11 12 다음