본문 바로가기

전체 글

(62)
[ProjectH4C] 해커스쿨 LOB(BOF 원정대) Level3 cobolt에 로그인하자마자 역시 실행 파일과 소스코드가 보인다. 소스 코드부터 보았다. [cobolt@localhost cobolt]$ cat goblin.c /* The Lord of the BOF : The Fellowship of the BOF - goblin - small buffer + stdin */ int main() { char buffer[16]; gets(buffer); printf("%s\n", buffer); } LEVEL 1, 2와는 다르게 gets를 이용해 입력을 받는다. gets도 strcpy와 같이 입력 받은 문자열의 길이를 확인하지 않아서 오버플로우 취약점이 존재하는 함수이다. [cobolt@localhost cobolt]$ ./goblin AAAAAAAAAAAAAAAAA..
[ProjectH4C] 해커스쿨 LOB(BOF 원정대) Level2 로그인 하자마자 홈 디렉토리에 cobolt 실행파일과 cobolt.c 소스 파일이 보인다. 소스 파일을 먼저 확인해보았다. [gremlin@localhost gremlin]$ cat cobolt.c /* The Lord of the BOF : The Fellowship of the BOF - cobolt - small buffer */ int main(int argc, char *argv[]) { char buffer[16]; if(argc < 2){ printf("argv error\n"); exit(0); } strcpy(buffer, argv[1]); printf("%s\n", buffer); } 이번에도 argv 값을 buffer에 복사하는데 strcpy 함수를 이용한다. 이번엔 버퍼가 16바이트..
[ProjectH4C] 해커스쿨 LOB(BOF 원정대) Level1 LOB란 Lord Of Buffer overflow의 약자로, 1단계부터 20단계까지 있으며, 버퍼 오버플로우 관련 문제들을 모아놓은 것이라고 한다. 우선 시작하기 전에 root 계정으로 로그인 후 /etc/passwd에서 :%s/bash/bash2/를 입력해서 bash를 모두 bash2로 바꾸어주어야 한다. bash는 \xFF를 NULL로 인식하기 때문이라고 한다. 첫 단계의 id/pw 는 gate/gate이다. FTZ와 동일하게 my-pass 명령어가 존재하는데, 로그인 한 계정의 패스워드를 출력해주는 명령어라고 한다. 텔넷을 통해 로그인 한 뒤에 ls를 입력해보았다. 소스 파일 하나와 실행파일이 보인다. gremlin을 실행해보았다. argv 에러가 출력된다. 입력 값이 무언가 있어야 하는 것 같다..
[ProjectH4C] 코딩도장 Python Write-up (3) 예외 처리 예외(Exception)란 코드를 실행하다가 발생하는 에러를 뜻한다. 실행할 때마다 에러가 발생하는 것이 아니고, 특수한 경우에만 발생하는 에러가 있는데, 이러한 상황들을 예외라고 한다. def ten_div(x): return 10 / x 위의 함수는 10을 매개변수로 나눈 값을 리턴하는 함수이다. 평소에는 잘 동작하지만, 매개변수로 0을 넘겨주면 실행하는 도중에 에러가 발생한다. #tenDiv.py def ten_div(x): return 10 / x a = int(input()) print(ten_div(a)) $ python tenDiv.py 0#0을 입력 Traceback (most recent call last): File "tenDiv.py", line 5, in print(ten..
[ProjectH4C] [Write-up] 해커스쿨 FTZ Level 9 로그인하자마자 ls -al과 find / -group level9를 실행해보았다. 아래는 find의 결과이다. $ find / -group level9 2>/dev/null /proc/10693 /proc/10694 /proc/10694/fd /proc/10694/fd/0 /proc/10694/fd/1 /proc/10694/fd/2 /proc/10694/fd/255 /proc/10694/environ /proc/10694/status /proc/10694/cmdline /proc/10694/stat /proc/10694/statm /proc/10694/maps /proc/10694/mem /proc/10694/cwd /proc/10694/root /proc/10694/exe /proc/10694/moun..
[ProjectH4C] [Write-up] 해커스쿨 FTZ Level 8 level8로 들어오자마자 어김없이 ls -al과 find / -group level8 2>/dev/null을 실행해보았다. ls -al은 별 문제 없어보이고, find의 결과 중에 /etc/rc.d/found.txt라는 것이 보인다. 해당 파일의 내용을 보니 아래의 내용이 36번 반복해서 출력되었다. level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524 어디서 많이 본 형태인데, 바로 /etc/passwd에 사용자들의 정보를 저장하는 형태와 같다. 하지만 /etc/passwd는 7개의 필드가 존재하는데, 위의 내용은 총 9개의 필드로 구성되어 있다. 실제 사용자의 패스워드를 저장하는 /etc/shadow 파일이 총 9개의 필..
[ProjectH4C] [Write-up] 해커스쿨 FTZ Level 7 level6에선 접속하자마자 평소와 다른 화면에 적잖이 당황했는데, level7은 다시 쉘 하나만 나온다. 먼저 level7 디렉토리에서 ls -al을 실행해보았는데, 특별한 점은 없어 보인다. 그렇다면 level7 그룹의 파일을 찾아봐야겠다. /proc는 제끼고, level7 디렉토리도 이상없었기에 제끼면, /bin/level7 파일이 보인다. 권한을 한번 봐야겠다. SetUID가 설정되어 있고, level8 소유의 프로그램이다. 이걸 이용하면 되겠다 싶어서 일단 실행해보았다. 내 패스워드를 입력하라는 건가? 우선 level7의 패스워드를 입력했다. 패스워드 입력하라면서, 갑자기 cat 명령어의 에러가 출력된다. 뭔데요 그래서 이게? 갑자기 cat /bin/wrong.txt 을 왜 실행하는데?? 디버깅..
[ProjectH4C] 코딩도장 Python Write-up (2) 파일 입출력 파이썬에서도 파일을 열어서 수정하는 것이 가능하다. 먼저 open 함수로 파일을 열고, write 함수를 이용해 파일을 수정하면 된다. 파일 수정을 마쳤다면 close 함수를 이용해 파일을 닫아주어야 한다. open(file_name, file_mode) 열고자 하는 파일의 이름을 첫 번째 인자로, 해당 파일의 모드를 두 번째 인자로 넘겨준다. 만약 파일을 읽기만 할 거라면 'r', 파일을 쓰고자(수정하고자)한다면 'w' 모드로 실행하면 된다. write('내용') 파일에 내용을 쓰고자 한다면 write 함수를 이용해서 추가해주면 된다. 이 때, 쓰고자 하는 파일에 대해 write 함수를 실행해야 하기 때문에 만약 파일 객체의 이름을 file로 만들었다면 file.write('내용')와 같은..