Yozzang의 해킹일기 💻
article thumbnail
728x90

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


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

Level 1

## 문제 해석 : 

알아볼 수 없는 이상한 보라색 문구가 적혀 있다. 그리고 사진 속 K->M, O->Q, E->G가 적혀 있는 것을 확인할 수 있다. 해당 힌트에 대해서 생각해보면 K는 아스키 코드로 75이며 M은 77, O는 79이며 Q는 81, E는 69이며 G는 71이다. 즉 아스키 코드상 +2가 된 것을 알 수 있다.

## 문제 풀이 : 

아래와 같이 아스키 코드를 바꿔주는 파이썬 코드를 짜보았다.

### 공격 코드 : 

cipher_t = input("Input the Cipher : ")
plain_t = ""

for i in range(len(cipher_t)):
	if cipher_t[i].isalpha():
		plain_t += chr(ord(cipher_t[i]) + 2)
	else:
		plain_t += cipher_t[i]

print(f"Plain text :\n {plain_t}")

 

### 실행 결과 :

1차 시도

2**38 is much much larger라는 문구가 출력된 것을 확인할 수 있다. 여기서 잠깐 Level 0의 문제를 확인해보면 컴퓨터 위에 2^38이 적혀있는 포스트잇이 붙여져있다는 것을 확인할 수 있다.

 

먼저 파이썬을 실행하여 2의 38승의 값을 확인해보았다.

1차 시도

해독문이 조금 이상한 것을 확인할 수 있다. 생각해보니 y, z는 아스키 코드 +2하면 {, |가 된다. 즉 y랑 z까지 고려해서 코드를 재구성해야 한다.

 

간단하게 y, z일 결우 +2하고 -26으로 하겠다.

### 공격 코드 : 

cipher_t = input("Input the Cipher : ")
plain_t = ""

for i in range(len(cipher_t)):
	if cipher_t[i].isalpha():
		plaint_c = chr(ord(cipher_t[i]) + 2)
		if plaint_c.isalpha() == 0:
			plaint_c = chr(ord(plaint_c) - 26)
		plain_t += plaint_c
	else:
		plain_t += cipher_t[i]

print(f"Plain text :\n {plain_t}")

### 실행 결과 :

2차 시도

결과 값이 정상적으로 나온 것을 확인할 수 있다. 이제 URL에 적용하라고 한다.

 

URL에 적용한 결과 map -> ocr이라는 결과가 나온다.

### 최종 공격문 : http://www.pythonchallenge.com/pc/def/ocr.html

### 실행 결과 : 

공격 성공

Level 2로 넘어간 것을 확인할 수 있다.

'Wargame > Python Challenge' 카테고리의 다른 글

Python Challenge (Level 5)  (0) 2022.08.06
Python Challenge (Level 4)  (0) 2022.08.05
Python Challenge (Level 3)  (0) 2022.08.03
Python Challenge (Level 2)  (0) 2022.08.01
Python Challenge (Level 0)  (0) 2022.07.30
profile

Yozzang의 해킹일기 💻

@요짱

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