목록Dot-Gabi/Hacker School Prob. (9)
학사 나부랭이
먼저 코드를 자세히 알아볼까요? fgets: 스트림(여기서는 아래의 stdin)에서 \n까지 또는 n-1개(여기서는 39개, 마지막은 null문자가 들어가야 해서 그래요.)까지 읽어 들이고 buf에 저장해요. \n이 있는 경우 \n까지 저장하죠. stdin: 표준 입력 버퍼, 그러니까 입력받은 데이터를 잠시 담아두는 메모리예요. 반대로 stdout은 출력할 데이터를 잠시 담아두는 메모리죠. strncmp: strcmp와 같은데 대신 범위를 지정하는 것만 달라요. 그래서 아래처럼 goo를 넣어도 2개만 비교하니까 go와 같다고 판단하죠. setreuid: 원형은 setreuid(ruid, euid)이며 ruid와 euid는 바로 아래에 다시 설명할게요. 여기서 setreuid는 ruid와 euid를 모두 ..
오랜만에 find 명령어를 다시 써보죠. find -size 옵션 2700: 2700 크기인 파일을 찾아요. -2700: 2700 이하의 크기인 파일을 찾아요. +2700: 2700 이상의 크기인 파일을 찾아요. 사이즈 단위 b: 블록 c: 바이트 k: 키로바이트 w: 2바이트 워드 m: 메가바이트 g: 기가바이트 저기 found.txt라는 수상한 파일이 눈에 띄네요. 한 번 읽어볼까요? shadow 파일 중 level9 라인만 따온 듯한 내용으로 차있네요. 얘네는 어떤 걸 의미하냐면... ⓐ User 이름이에요. ⓑ 암호에 관한 부분이에요. ⓒ 마지막으로 암호를 바꾼 날이에요. 1970.01.01 + ⓒ일에 암호를 바꿨네요. ⓓ 암호를 바꾸기 전의 암호를 사용한 기간이에요. ⓔ 암호를 수정 안 하고 버..
일단 이번에는 무작정 어떤 프로그램이 실행되는 게 아니라 한시름 놓았네요.ㅋㅋㅋ 힌트를 보니 일단 /bin/level7을 실행해야 뭘 알 수 있겠어요. 그래서 실행을 해보면 wrong.txt가 생성되어 아래 모스부호 같은 텍스트가 작성됐어야 했는데 FTZ 서버가 닫힌지 오래라서 팀장님한테서 직접 카톡으로 받았어요.ㅋㅋㅋㅋㅋ --_--_- --____- ---_-__ --__-_- 보자마자 - = 1, _ = 0으로 치환하여 1101101 1100001 1110100 1100101라는 텍스트를 만들었어요. 그리고 이걸 2진수로 바꾸면... 109 97 116 101 어라? 97은 a이고 다 알파벳 소문자 대역을 벗어나지 않네요? 누가 봐도 아스키코드죠? 아스키코드 테이블을 보고 변환시키니까 mate 가 나..
처음 로그인하면 무작정 힌트만 나오고 프롬프트도 나오질 않았어요. 그래서 그냥 아무 키를 누르면 이렇게 접속하다가 종료되어버려요. 처음에는 갈피도 못 잡고 있었는데 BBS 해킹하는 방법이 ctrl + c이라고 해요. 그래서 시도를 해봤는데 이 화면으로 넘어오면 ctrl + c가 먹히질 않는 거 같아요. 그렇게 우왕좌왕하다가 힌트가 나오는 화면에서 ctrl + c를 입력하면 빠져나올 수 있었어요. 그리고 내부 디렉토리를 확인해보니 password라는 누가 봐도 수상쩍은 파일이 있길래 읽어보니 level7의 패스워드가 바로 나왔어요. 그런데 여기서 끝내기에는 영 뒤숭숭해서 어떻게 돌아가는지 확인해보려고 해요. 먼저 tn이라는 파일이 궁금해서 실행을 해봤더니 처음에 시작할 때 나오는 화면이네요. 아무래도 시작..
일단 한 번 들어가보시죠. level5 프로그램을 보러가죠. level6 권한에 SetUID가 걸려있고 level5 그룹이 실행만 가능한 파일이 있네요. 그럼 이제 이 파일을 실행하고 tmp에 가서 임시파일을 한 번 볼까요? 아무래도 실행하면서 임시파일이 생기고 종료되기 전에 삭제되는거 같아요. 그럼 여기서 손 좀 봐주면 달라질까요? 먼저 tmp파일을 우리가 직접 만들어주고 level5 프로그램을 실행하면, 임시파일이 이미 있어서 level6로 실행되어야 할 파일이 level5로 덮어쓰기가 된 후 실행이 되어 임시파일에 비밀번호가 남겨지고 종료될 때 SetUID로 인해서 level5로 실행되던 프로그램이 그 권한이 박탈되며 level6로 돌아가서 삭제를 못 하게 되는거죠. 심볼릭 링크 어떤 파일을 가리키..
여기서 잠깐! 백도어란? 뒷문, 즉 ID나 패스워드를 사용해서 사용권한을 획득하는 기능을 무허가로 이용하기 위해 시스템 내에 몰래 설치된 통신접속의 기능을 말해요. 여기서는 누군가 level5의 계정을 탈취해 거기에 백도어를 설치했다... 정도로 이해하면 될 것 같아요. 일단 백도어가 있다는 곳으로 가보죠! 읽을 수만 있는 백도어 파일이 있네요. 여기서 의아해할 수 있는게 백도어라서 SetUID가 안 걸려있어요. 몰래 설치한 거니까요! 일단 한 번 읽어보면... ⓐ 서비스의 이름이에요. finger가 실행되면 이 백도어도 실행된다는 의미예요. ⓑ xinetd의 제어를 받을 것인가를 결정해요. yes는 제어를 받지 않고 no는 제어를 받아요. 여기서 xinetd(eXtended InterNET Daemon..
흠... 낯선 명령어와 변수가 보이네요. 일단 검색해서 나온 결과, argc는 옵션의 개수, argv는 그 옵션의 문자열이 저장된 것 같아요. autodig를 실행할 때, 일단 옵션 두 개를 줘야 strcat로 cmd에 뭐가 입력이라도 되네요. 그럼 먼저 이 친구를 보러 가죠. 위의 cmd에 뭐가 입력이 되는 과정에서 level4의 권한으로 입력이 되겠네요. 그럼 my-pass나 /bin/bash를 넘겨줘야겠어요. 이제 코드에 대해 뭘 알아야 죽을 하든 밥을 하든 할 수 있겠죠? 이거는 제가 guest 계정에서 c언어로 작성한 유사 파일인데요. 프로그램을 실행하는 명령어도 하나의 옵션으로 치는 거 같아요. 그럼, 만약 ./autodig를 한다 하면 바로 다음 my-pass가 포함되어 있는 문장이 넘어가야..
이번에도 힌트가 있으려나용? 5252 그게 무슨 말이냐구~ 그럼 그 편집기는 level2도 쓸 수 있고 level3나 root의 권한을 가져올 수 있겠지? find / -perm -4000 -group level2 level2 그룹에 속한 s+rwx 권한을 가진 파일을 찾아봤어요. 이제 혼내주러 가보자고요! /usr/bin으로 가서 ls -al로 리스트를 쫙 뽑아보니 level3으로 SetUID가 걸린, level2 group에서도 읽기/실행 가능한 editor라는 파일 겟또다제! 저는 Trainer10에서 나온 필요한 만큼만 root 권한을 제공하고 일이 끝나면 그 권한을 박탈해버립니다. 라는 말 때문에 editor의 특정 기능이 작동하는 순간에만(예: 저장하는 순간) SetUID를 줄 가능성이 있나?..