본문 바로가기

Hacking/- Wargame.kr

[Wargame.kr] 2. QR CODE PUZZLE

반응형

300점에 해당하는 Web 문제이다.

이 문제의 경우에도 1번과 마찬가지로 매우 쉬운 문제라고 볼 수 있다.


문제 링크


문제 사이트에 접속하면 아래와 같은 6X6 퍼즐을 볼 수 있다. 그리고 퍼즐의 조각을 누르게 되면, 퍼즐이 움직이는 것을 확인할 수 있다.




QR code의 경우에는 중간에 누락된 부분이 없이 정사각형으로 모든 데이터가 존재해야만 인식이 가능하다. 그렇기 때문에 이 퍼즐을 다 맞춘다고 하더라도 인식이 불가능하다는 것을 의미한다. 그렇기 때문에 퍼즐을 다 맞추고 나면, 원본 이미지를 가져오는 부분이 존재를 해야한다. 그래서 이 원본 QR code 이미지를 가져오는 부분이 있는지 확인하기 위해서 Chrome의 개발자도구에서 Network탭으로 가서 확인을 해보았다.



마지막 부분을 보면 qr.png라는 파일을 가져온다는 것을 확인할 수 있다. 이 항목이 의심스러워서 확인을 해보았다.



그림에서 확인할 수도 있듯이 원본 QR code를 가지고 있다는 것을 알아낼 수 있다. 그러므로 이 QR code를 인식한 결과를 알아내면 된다.


물론 QR code를 인식하는 방법은 스마트폰에서 NAVER 앱을 통해서 QR code 검색을 해도 가능하지만, 스마트폰이 없는 사람도 있을 수 있기 때문에 QR code 인식기 사이트에 들어가서 확인하였다.



QR code를 인식한 결과, http://wargame.kr:8080/qr_code_puzzle/Give_M3_th7_F1aG.php라는 주소를 얻을 수 있었고, 이 링크로 들어가서 우리가 원하는 Flag 값을 얻을 수 있었다.




그래서 이것을 토대로 Python을 이용해 한 번에 Flag 값을 얻는 방법을 작성해보았다.

# -*- coding: utf-8 -*-
# QR CODE PUZZLE
from urllib import request, parse
import re
def get_02_flag():
	regex = re.compile('
(.*)
') flag_regex = re.compile('Flag is : ([a-f0-9]*)') qr_url = "http://wargame.kr:8080/qr_code_puzzle/img/qr.png" decode_url = "http://zxing.org/w/decode" # qr code decoder site. res = request.urlopen(decode_url+"?"+parse.urlencode({'u':qr_url})).read().decode() flag_url = regex.findall(res)[0] res = request.urlopen(flag_url).read().decode() flag = flag_regex.findall(res)[0] print(flag) return flag

위의 소스코드에서 구현한 함수를 실행하면 인증키를 출력하고 그 값을 반환한다.


물론 위의 방법을 이용하면 금방 QR code를 얻을 수 있지만, 직접 퍼즐을 맞추어서도 QR code를 얻을 수 있다.



직접 노가다를 해본 결과 누락된 부분은 맨 오른쪽 아래 부분의 퍼즐이 누락된 것을 알아내었다. 그리고 퍼즐이 다 맞춰지니까 아래와 같은 이미지로 변화하는 것을 확인할 수 있었다.



물론 직접 퍼즐을 맞출 수도 있지만, 이 QR Code가 정말 헷갈리기 쉽게 되어 있어서 약간 어려움을 겪을 수도 있다. 여기서 한 가지 팁이 있다면, 소스코드 보기를 했을 때, 이미지에 번호가 달려 있는 것을 확인할 수 있다. 그리고 각 번호별로 순서대로 좌측 상단에서부터 우측 하단까지 번호를 매긴 것과 같다. 즉, current의 값에 1을 더한 것과 이미지의 번호가 같게 되도록 배치를 하면 된다는 것이다.

그리고 이렇게 QR code를 얻은 다음에는 아까의 방식과 같은 방식으로 진행해서 Flag를 얻을 수 있다.


반응형

'Hacking > - Wargame.kr' 카테고리의 다른 글

[Wargame.kr] 4. login filtering  (0) 2016.02.07
[Wargame.kr] 3. flee button  (0) 2016.01.13
[Wargame.kr] 1. already got  (0) 2016.01.07
[Wargame.kr] 0. 로그인 스크립트  (0) 2016.01.05
[Wargame.kr] web chatting  (0) 2015.06.07