JSON 오브젝트만 서버에서 입력받는 것 같다. 제공받은 챌린지 파일인 telnetlib_example.py 파일을 수정해서 뭘 해야하는 것 같은데..
일단 칼리에서 nc socket.cryptohack.org 11112로 접속했다.
그냥 아무말이나 입력했더니 에러 났다.
내가 사고싶은 걸 알려줘야하는 것 같다.
#!/usr/bin/env python3
import telnetlib #telnet 원격 접속 제어용 모듈
import json
HOST = "socket.cryptohack.org" #telnet으로 접속할 대상
PORT = 11112 #TCP 포트
tn = telnetlib.Telnet(HOST, PORT)
def readline():
return tn.read_until(b"\n")
def json_recv():
line = readline()
return json.loads(line.decode())
def json_send(hsh):
request = json.dumps(hsh).encode()
tn.write(request)
print(readline())
print(readline())
print(readline())
print(readline())
request = {
"buy": "clothes"
}
json_send(request)
response = json_recv()
print(response)
코드를 보면
request = { "buy": "clothes"}
json_send(request)
라는 코드가 있는데 이제 살 것 = 옷 이런 식으로 서버에 json 형식으로 요청을 하고, json으로 응답을 받아오는 것 같다.
readline 함수 = 개행 문자까지 서버 내용을 읽어오는 것 같음.
json_recv() : readline으로 읽은 데이터를 json문자열에서 python 객체로
json_send(hsh) : hsh라는 인자를 인코딩하고 json으로 덤프를 한 걸 request라고 한다. tn에 request를 작성한다.
loads() 함수 : JSON 문자열을 파이썬 객체로 변환한다.
dumps() : 파이썬 객체 -> json 문자열
load() : json 파일에 저장된 데이터를 파이썬 객체로 불러오는 함수.
telnetlib은 텔넷 서버를 제공하는 파이썬 모듈이라고 한다.
request 는 json 문자열인것 같다.
지금 requset를 보내서 tn 서버에 쓰는 것 같은데, 그러면 저 json 문자열을 바꿔줘야하는거 아닐까?
그러니까 정리하자면,
request = 내가 사고 싶은 것
response = 요청에 대한 응답(from tn 서버)
일단 수정없이 그냥 파이썬 파일을 실행해봤다.
플래그만 판다는 문구가 나온다. 원래 코드에는 "buy" : "clothes"라고 돼있으니 그런듯하다.
한번 "flags"로 고쳐봤더니 또 에러가 떴다.
그래서 "flag"라고 했더니 그제야 플래그가 출력됐다.
crypto{sh0pp1ng_f0r_fl4g5}
'INCOGNITO 2022' 카테고리의 다른 글
RSA 암호화 알고리즘 분석 (0) | 2022.08.13 |
---|---|
Cryptohack - ASCII (0) | 2022.08.10 |