2014. 8. 5. 04:56

Level 0

Your goal is to connect to port 5842 on vortex.labs.overthewire.org and read in 4 unsigned integers in host byte order. Add these integers together and send back the results to get a username and password for vortex1. This information can be used to log in using SSH.

Note: vortex is on an 32bit x86 machine (meaning, a little endian architecture)



Translation

vortex.labs.overthewire.org의 5842번 포트에 연결해서 4개의 unsigned integer들을 차례로 읽어내는 것이 목표입니다. 그리고 그 integer들을 더해서 다시 호스트로 보내서 username과 password를 알아낼 수 있습니다. 그 정보를 이용해서 ssh에 접속할 수 있습니다.

Note: vorvex 서버는 32비트 x86 머신을 사용중입니다. (little endian 아키텍쳐)



풀이

우선 vortex 서버에 연결하기 위한 프로그램을 짜야 합니다.

socket 통신을 할 수 있는 모든 언어로 풀이 가능합니다.

여기서는 python을 사용해서 풀어보겠습니다.


일단 socket을 이용해서 vortex.labe.overthewire.org:5842에 연결해줍니다.

from socket import *
from struct import * #for unpack()

sock = socket(AF_INET, SOCK_STREAM)
sock.connect(("vortex.labs.overthewire.org", 5842))


그리고, 4개의 정수를 읽어오고 더해줍시다.

from socket import *
sum = 0

for i in range(4): #loop 4 times
    data = sock.recv(4) # 서버로부터 4바이트 읽기
    sum += unpack("<I", data)[0]


서버는 little-endian 형식의 머신을 사용중이기 때문에 받아온 data를 "<I"를 사용하여 unsigned integer 형식으로 풀어준 후, sum에 더해줍니다.

이렇게 만들어진 sum을 다시 vortex 서버로 보내줍시다.

sock.send(pack("<I", (sum & 0xFFFFFFFF)))
print sock.recv(512)
sock.close()

우선 만들어진 sum 값을 8자리 hex 값으로 변환한 후, little-endian unsigned integer 형식으로 pack해줍니다.

그리고 sock.send를 사용하여 서버로 전송하면 서버가 username과 password를 응답해줍니다.


만들어진 python 파일을 실행하면 vortex level 1의 username과 password를 받아올 수 있습니다.



Posted by KCBS