본문 바로가기

System Hacking46

해커스쿨 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.
해커스쿨 F.T.Z Level 8 level 8 로그인 후 hint를 본다. find 명령어로 파일을 찾아야 한다. 아주 간단한 find / -user level9로 찾아보았지만 찾은 결과가 없다. 1차원적으로 find / -name shadow를 찾아보았다. 찾아본 결과 이 파일을 서버에서 관리하는 파일인 것 같다. level 8이나 level 9에서 나온 것이 아닌 것 같다. 일단 1차원적으로 찾아볼 수 있는 건 찾아보았지만 나오지 않는다. 파일에 대해서 우리가 정확히 아는 건 용량이 2700이라는 것이다. 여기서 알아야 할 것은 find의 옵션이다. 단, 필요한 옵션만 다룬다. find 옵션 -size 옵션 중 -size 옵션을 알아야 한다. 용법은 find [찾을 디렉터리 경로] [찾기 옵션]이다. -size [+파일 크기 / -.. 2020. 2. 14.
해커스쿨 F.T.Z Level 7 level 7을 로그인 후 hint를 본다. 일단 무슨 파일인지 알아보기 위해 찾는다. user는 level8, group은 level7 현재 level7에 있으니 SetUID가 걸린 프로그램을 변경할 수 없으니 권한에 따라 실행을 할 수밖에 없다. 실행하면 비밀번호를 입력하라고 한다. 입력하면 오류가 난다. 이 오류는 개인이 F.T.Z 서버를 열어서 하는 경우 생기는 것이라고 한다. 이때 직접 root 계정으로 접속해 wrong.txt를 만들어주면 된다. bin 디렉터리에는 level7 계정으로는 파일을 만들 수 없으므로 root 계정에 로그인해야 한다. root 계정의 로그인은 su root 명령어로 로그인하고 비밀번호는 레드햇에 root에 들어가는 같은 비밀번호인 hackerschool이다. wro.. 2020. 2. 13.
해커스쿨 F.T.Z Level 6 level 6을 로그인하면 바로 힌트가 나온다. 의미 없는 아무 글자 또는 명령어를 입력해도 PuTTY가 종료가 되어 버린다. 다시 로그인 후 엔터만 입력하면 텔넷 접속 서비스가 나온다. 아무 곳이나 시도해봐도 같은 결과가 나온다. 접속을 시도 하는 것 같지만 이내 PuTTY가 종료된다. 이로써 결론이 나온다. 더보기 로그인 후 힌트가 나온 화면에서 쉘 프롬프트가 나오도록 해야 한다. 생활코딩 강좌를 보면서 리눅스 쉘을 사용하면서 단축키를 사용했을 것이다. 생활코딩에서 배운 Ctrl + Z로 백그라운드 실행을 했다. 그래서 백그라운드로 돌려보려고 했지만 아무 반응이 없다. 또 다른 간단한 설명으로는 정상 종료를 뜻하는 Ctrl + D도 사용해봤을 것이다. 이 단축키도 사용해봤지만, 텔넷 서비스로 넘어가 .. 2020. 2. 13.
해커스쿨 F.T.Z Level 5 구글링 결과 level 5부터는 C언어가 필요하다는 소문이 있다. level 5는 "심볼릭 링크(Symbolic Link)"와 "레이스 컨디션(Race Condition)" 해킹기법을 알아야 풀 수 있는 문제다. level 5문제 출제자 의도는 "레이스 컨디션"이라는 말이 많다. level 5는 제작 단계 코드 실수로 인해 오류가 있다는 소문이 있다. Geundi님의 글이 해킹기법부터 오류에 대한 정보까지 모든 정보가 들어있는 글이다. 이 글을 참고했다. 심볼릭 링크(Symbolic Link) 심볼릭 링크란 어떤 파일을 가리키고 있는 파일을 말한다. 윈도우에서 바로 가기와 비슷한 개념이다. 원본 파일이 있고 심볼릭 링크 파일이 있을 때 심볼릭 링크 파일은 원본 파일을 가리키는 것이다. 이때, 심볼릭 링크.. 2020. 2. 11.
해커스쿨 F.T.Z Level 4 level 4에 로그인하고 hint를 본다. 백도어(Backdoor) 백도어란 정상적인 인증 절차를 거치지 않고, 컴퓨터와 암호 시스템 등에 접근할 수 있도록 하는 장치다. 설계자나 관리자에 의해 남겨진 시스템의 보안 허점을 말한다. 설계자가 일부러 남겨놓은 경우는 개발 단계에서 테스트를 위해 유지 보수 시의 효율성을 위해 특수 계정을 허용하는 것이다. 하지만 이런 개발을 위한 의도를 비양심적으로 활용하거나 개발이 완료된 후 삭제되지 않은 백도어를 다른 사용자가 발견해 악용하게 될 경우는 아주 위험하다. 그렇게 되면 누군가 나의 접속 기록 및 로그인 정보 등 시스템 사용 내용을 모두 볼 수 있고 금전적인 손해까지 입을 수 있다. backdoor 파일이 있는 것을 확인했다. backdoor가 finger를.. 2020. 2. 7.