[Wargame] 드림핵 - Carve party

Song·2024년 11월 8일

드림핵

목록 보기
6/18

문제

이번 문제는 따로 서버가 없기 때문에 문제 파일을 다운로드 받아 HTML 파일을 실행.


풀이 - 개발자 도구

웹 사이트에는 호박이 덩그러니 있고, 아래에 10000번을 더 클릭하라고 나와있다.

우회할 방법을 찾기 위해 소스코드를 확인.

소스코드 내에 스크립트가 존재한다. 이를 해석해보면, 호박(jack-target)을 클릭했을 때 counter 값을 1 증가시킨 후, 만약 counter가 10000 이하이고, 100의 배수인 경우 pie 값에 ((pie ^ 0xff) + (i * 10)) & 0xff 연산을 수행하고 있다. 즉, 단순히 코드를 변경하는 게 아니라 진짜로 10000번을 클릭해야한다.

문제 풀이를 위해 console 창에서 아래 반복문을 실행한다.

i = 0

while(i<10001){
$('jack-target').click();
i++
}

$()는 jquery에서 CSS 선택자를 이용해 특정 요소를 지정하는 구문. 이를 사용해 호박을 지정해준다. 그리고 click() 메서드로 클릭. 이를 10001번 반복한다. 왜냐하면, 10000번 클릭 후 한 번 더 클릭해야 플래그 값을 얻을 수 있기 때문.

실행하면 바로 플래그 값을 얻을 수 있다.

풀이 - Selinux

해결 방법은 여러가지가 있겠지만 여기서는 selenium을 사용한다. 우선, cmd에서 python.exe -m pip install --upgrade pip 명령어로 pip를 업그레이드한다.

그리고 pip install selenium 명령어로 selenium을 설치해준다. 설치가 완료되면 python 코드를 작성한다.

1) 모듈 import

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.by import By

chrome 웹 드라이버 지정을 위한 webdriver, service 모듈을 import. 그리고 요소 지정 및 특정 행동 실행을 위한 ActionChains와 By 모듈을 import.

2) 드라이버 및 URL 지정

크롬 드라이버는 해당 URL에서 받을 수 있다. 이를 현재 작업 중인 python 파일과 동일한 위치에 옮긴다.

#드라이버 지정
service = Service("chromedriver.exe")
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=service, options=options)

#URL 지정
url = 'file:///C:/Users/admin/Downloads/jack-o-lantern.html'

#창 크기 설정
driver.maximize_window()

#창 오픈
driver.get(url)

3) action 실행

#action 객체 생성
action = ActionChains(driver)

#요소 지정
pumkin = driver.find_element(By.ID, "jack-target")
action.move_to_element(pumkin).perform()

특정 행동 수행을 위해 action 객체를 생성하고, 요소를 지정. 호박을 클릭해야하니 호박의 ID 값을 가져와 find_element()의 인자로 입력한다. 호박의 ID 값은 개발자 도구에서 확인 가능하다.

#지정 요소 10001번 클릭
i = 0

while (i<10001):
    pumkin.click()
    i += 1

이제 반복문을 만들어 호박을 10001번 클릭한다.

4) 실행

코드를 실행하면 점점 호박에 얼굴이 생겨나고, 10001번 클릭이 완료되면 플래그 값을 얻을 수 있다.

profile
안녕하세요

0개의 댓글