Yozzang의 해킹일기 💻
article thumbnail
728x90

이번 포스트에서는 Python Challenge의 Level 13 문제에 대해 다루겠다.


문제를 클릭하면 다음과 같은 페이지가 출력된다.

Level 13

## 문제 해석 : 

evil한테 전화하라고 한다. 개발자도구를 확인해보니 다음과 같은 phonebook.php라는 페이지가 존재한다. 해당 페이지를 조사해보면 될 것 같다.

개발자 도구

## 문제 풀이 : 

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()) # 서버에서 사용가능한 메서드의 종류를 리스트로 리턴

### 실행 결과 :

1차 시도

리스트를 확인해보니 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])  # 첫 인덱스는 입력, 두 번째 인덱스는 출력

### 실행 결과 : 

2차 시도

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
profile

Yozzang의 해킹일기 💻

@요짱

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!