학사 나부랭이

Hacker School - level6 본문

Dot-Gabi/Hacker School Prob.

Hacker School - level6

태양왕 해킹 (14세) 2021. 3. 25. 22:12

처음 로그인하면 무작정 힌트만 나오고 프롬프트도 나오질 않았어요.

그래서 그냥 아무 키를 누르면

이렇게 접속하다가 종료되어버려요. 처음에는 갈피도 못 잡고 있었는데 BBS 해킹하는 방법이 ctrl + c이라고 해요.

그래서 시도를 해봤는데

이 화면으로 넘어오면 ctrl + c가 먹히질 않는 거 같아요. 그렇게 우왕좌왕하다가

힌트가 나오는 화면에서 ctrl + c를 입력하면 빠져나올 수 있었어요. 그리고 내부 디렉토리를 확인해보니 password라는 누가 봐도 수상쩍은 파일이 있길래 읽어보니

level7의 패스워드가 바로 나왔어요. 그런데 여기서 끝내기에는 영 뒤숭숭해서 어떻게 돌아가는지 확인해보려고 해요.

먼저 tn이라는 파일이 궁금해서 실행을 해봤더니

처음에 시작할 때 나오는 화면이네요. 아무래도 시작하자마자 이 프로그램이 실행되는 거 같아요. 그럼 이걸 뜯어볼까요?

ⓐ 0x80486f2에 있는 어떤 내용을 스택에 넣어요.

ⓑ 시스템 함수로서 스택에 있는 내용을 실행해요.

ⓒ getchar로서 아무 키나 입력을 받는 부분이에요.

어떤 내용이 있는지 확인하니 cat hint가 있었어요. 그리고 다음 시스템의 콜에서 사용될 내용을 보면 clear가 있어요. 즉, 먼저 push로 cat hint를 스택에 쌓은 후 시스템을 콜 해서 cat hint를 실행, getchar로 아무 키를 입력받고 다시 clear를 스택에 쌓은 후 시스템을 다시 콜 해줘서 한 번 클리어해주고 종료하게 돼요.

그리고 그 아래로 텔넷 접속 서비스 선택지가 있는 박스를 프린트해주고 좀 더 밑으로 가면

scanf가 있어요. 아마 여기서 하이텔 나우누리 천리안을 선택하는거 같은데

정수형 데이터를 입력받는 것을 보니 맞는거 같아요.

첫 번째 줄에서 fffffffc(가변 인자)에 있는 scanf 받은 값과 1을 비교하여 맞으면 true값이 나오는데 false인 경우 jne로 인해서 main+263으로 점프당해요.

마찬가지로 다음 cmpl이 있는 두 개도 2와 3이랑 scanf 받은 값을 비교하고 특정한 장소로 점프시켜요. 우리는 1을 입력받았다고 가정할 때, true값이므로 처음 jne는 무사히 넘어가고 시스템 콜로 push 받은 ip에 접속을 시도한다는 메시지를 프린트한 후 그 이후 cmpl에서 main+285로 점프하니까 다른 push와 콜은 수행하지 못하고 다시 cmpl에서 걸려서 main+307로 점프당해요.

main+307에서 1이 맞으니 true를 받고 je에서 341로 점프당하고 leave로 인해 스택을 비워요.

leave는 mov ebp, esp + pop ebp인데 여기서 ebp는 스택의 시작 주소를 가지고 있어요. esp, 즉 스택의 끝을 가리키는 포인터가 스택에 데이터가 쌓이며 증가하는데 leave의 pop ebp에 의해 시작 주소로 돌아오게 되어요.

프롬프트를 통해 들어갔으면 스택의 시작주소가 프롬프트로 돌아올 수 있게 해 주지만 프롬프트가 아니라 그냥 로그인하자마자 들어오면 스택의 시작 주소가 아무것도 안 가리키고 있어서 아예 종료가 되어요.

'Dot-Gabi > Hacker School Prob.' 카테고리의 다른 글

Hacker School - level8  (0) 2021.03.27
Hacker School - level7  (0) 2021.03.26
Hacker School - level5  (0) 2021.03.25
Hacker School - level4  (0) 2021.03.25
Hacker School - level3  (0) 2021.03.23
Comments