728x90
이번 포스트에서는 Python Challenge의 Level 13 문제에 대해 다루겠다.
문제를 클릭하면 다음과 같은 페이지가 출력된다.
## 문제 해석 :
evil한테 전화하라고 한다. 개발자도구를 확인해보니 다음과 같은 phonebook.php라는 페이지가 존재한다. 해당 페이지를 조사해보면 될 것 같다.
## 문제 풀이 :
phonebook.php에 접속해보겠다.
XML faultCode 105가 뜬 것을 확인할 수 있다. 이는 xml-rpc 프로토콜을 통해서 호출할 수 있다.
파이썬 코드를 통해 해당 페이지를호출해보겠다.
### 공격 코드 :
import xmlrpc.client as xc
url = "http://www.pythonchallenge.com/pc/phonebook.php"
serv = xc.ServerProxy(url)
print(serv.system.listMethods()) # 서버에서 사용가능한 메서드의 종류를 리스트로 리턴
### 실행 결과 :
리스트를 확인해보니 phone이라는 메서드가 있다. 해당 메서드의 사용법을 확인해보겠다.
### 공격 코드 :
import xmlrpc.client as xc
url = "http://www.pythonchallenge.com/pc/phonebook.php"
serv = xc.ServerProxy(url)
print("Usage :", serv.system.methodHelp("phone")) # 메서드의 사용법 확인
sig = serv.system.methodSignature("phone") # 인자와 리턴값 확인
print("Input :", sig[0][0], " / Output :", sig[0][1]) # 첫 인덱스는 입력, 두 번째 인덱스는 출력
### 실행 결과 :
string 형태의 입력을 받아서 string 형태의 출력을 해주는 메서드이다. Usage를 확인해보면 사람의 번호를 반환해준다고 한다. 여기서 evil은 Level 12에 나와있던 Bert이다.
### 공격 코드 :
import xmlrpc.client as xc
url = "http://www.pythonchallenge.com/pc/phonebook.php"
serv = xc.ServerProxy(url)
print(serv.phone("Bert"))
### 실행 결과 :
"555"는 미국에서 가짜 번호를 의미하므로 정답은 italy가 되겠다.
### 최종 공격문 : http://www.pythonchallenge.com/pc/return/italy.html
### 실행 결과 :
Level 14로 넘어간 것을 확인할 수 있다.
'Wargame > Python Challenge' 카테고리의 다른 글
Python Challenge (Level 15) (0) | 2022.09.11 |
---|---|
Python Challenge (Level 14) (0) | 2022.09.10 |
Python Challenge (Level 12) (0) | 2022.09.07 |
Python Challenge (Level 11) (0) | 2022.09.06 |
Python Challenge (Level 10) (0) | 2022.08.28 |