본문 바로가기

#WarGame/Python Challenge

Python Challenge # LV.13 (xmlrpc)

반응형

출처) http://www.pythonchallenge.com/index.php

 

The Python Challenge

What people have said about us: "These sorts of things are in my opinion the best way to learn a language.", brberg at Media Cloisters "It's the best web site of the year so far.", Andy Todd at halfcooked "Addictive way to learn the ins and outs of Python.

www.pythonchallenge.com

 

 

www.pythonchallenge.com/pc/return/disproportional.html

[그림1. LV13 문제]

 

  • 파이썬 챌린지 레벨13 문제!
  • 전화기 사진과 하단에 "phone that evil"이라고 적혀있다.
  • 사진 속 전화기에서 5번을 클릭할 수 있다.

 

[그림2. phonebook.php]

 

  • 상단에 XML이라고 적혀있고, 소스코드에 fault, error.... 가 있는 걸 봐서 에러가 났을 때 코드인것 같다.
  • 구글에 검색해 보니 실패 응답 코드 예제로 비슷하게 나와 있다.
  • 다른 힌트가 있을 수 있으니 페이지소스 코드를 확인해 보았다.

 

[그림3. page source]

 

  • 하단에 보면 "phone that <remote /> evil" 라고 적혀 있다.
  • [그림1]에서 노란 글씨로 phone that evil이라고 적혀 있었는데 페이지 소스에는 중간에 remote가 들어있다.
  • 구글에 html remote라고 검색해봐도 위와 같이 쓰는 코드는 없다.
  • python에서 remote 모듈이 있는 건가 싶어 검색해보았다.

 

[그림4. XMLRPC]

 

  • 아까 html의 remote가 원격 프로시저 호출에 대한 튜토리얼인 것 같다. 
  • xmlrpc에서 클라이언트는 원격서버에서 메서드를 호출한다고 한다.
  • 클라이언트는 html이고, 서버는 php인 것 같다.

 

[그림5. 구현]

 

  • ServerProxy 인스턴스는 원격 XML-RPC 서버와의 통신을 관리하는 객체이다.
  • ServerProxy.system.listMethods() 이 메서드는 문자열 리스트를 반환하는데, XML-RPC 서버가 지원하는 각 메서드마다 하나씩 제공된다.
  • 출력 결과 'phone'이 호출해야 하는 메서드인 것 같다.
  • 참고) docs.python.org/ko/3/library/xmlrpc.client.html

 

[그림6. 구현1]

 

  • ServerProxy.system.methodHelp(name) 이 메서드는 하나의 매개 변수를 취하는데, XML-RPC 서버에 의해 구현된 메서드의 이름이다. 해당 메서드의 사용법을 기술하는 설명서 문자열을 반환한다.
  • ServerProxy.system.methodSignature(name) 이 메서드는 하나의 매개 변수를 취하는데, XML-RPC 서버에 의해 구현된 메서드의 이름이다. 첫 번째는 메서드의 반환형이고 나머지는 매개 변수이다.
  • 'phone'메서드를 어떻게 사용하는 출력해보니 "Returns the phone of a person"이라고 나왔다.
  • 사용자의 전화를 반환해라.....? 
  • 'phone'은 특정 이름을 string으로 받아서 string으로 반환해주는 프로시저이다.
  • phone('특정이름')을 하는게 전화를 거는 방법인것 같다.
  • [그림1] 문제에서 phone that evil이라고 나와있었다. 악마에게 전화를 거는 거니까 악마를 찾으면 된다.

 

[그림7. LV12_evil4.jpg]

 

  • 바로 전에 푼 문제라 기억이 났다. 답은 LV12에 있었다.
  • LV12에서 evil4.jpg를 HxD로 열어보니 "Bert is evil!"이라고 적혀있었다.
  • 뒤에 go back만 있길래 LV12풀 때 신경을 안썼는데 이 사진이 LV13의 답인 것이다.
  • 악마는 "Bert"이다.

[그림8. 최종결과]

 

 

from xmlrpc import client

server= 'http://www.pythonchallenge.com/pc/phonebook.php'
client = client.ServerProxy(server)

print(client.system.listMethods())
print(client.system.methodHelp('phone'))
print(client.system.methodSignature('phone'))
print(client.phone('Bert'))

 

 

 

반응형