문제를 보면 특정 사이트에 연결된 것이 아닌 html 파일 하나를 준다. 즉 이는 서버에서 뭔가를 수행하는 것이 아닌 클라이언트에서 작업을 수행하는 것을 유추할 수 있다.

클릭에 따른 counter 값 감소, 특정 값에 도달할 때 뭔가를 수행함을 생각해 볼때, 제일 먼저 생각난 것은 onclick event에 따른 counter 값 증가였다.

하지만 onclick 은 사용되지 않았으며, script 부분을 살펴본 결과 click에 call back 함수를 정의한 것을 확인할 수 있다.

함수를 보면 pumpkin 리스트에 대하여 특정 연산을 수행하고, 이를 기반으로 canvas에 그리게 된다.

상세 과정

방법 1

이를 기반으로 python 코드를 작성해 보면 다음과 같으며, counter가 100번째마다 for문을 반복하기에 총 100번 수행됨을 알 수 있기에 해당 부분을 생략하고 100번 반복하는 것으로 하였다.

pumpkin, pie = [ 124, 112, 59, 73, 167, 100, 105, 75, 59, 23, 16, 181, 165, 104, 43, 49, 118, 71, 112, 169, 43, 53 ], 1

for j in range(100):
    for i in range(len(pumpkin)):
        pumpkin[i] ^= pie
        pie = ((pie ^ 0xff) + (i * 10)) & 0xff

print(list(map(chr, pumpkin)))

방법 2

그 결과 위와 같은 복호화 결과를 확인할 수 있으며, 이를 console에서 javascript를 이용하여 10000번 클릭 시켜도 동일한 결과를 확인할 수 있다.

while (counter <= 10000) $('#jack-target').click();

'0x40 Web Hacking' 카테고리의 다른 글

Dreamhack :: devtools-sources  (0) 2022.05.17
Dreamhack :: simple_sqli  (0) 2022.05.17
Dreamhack :: session-basic  (0) 2022.05.17
Dreamhack :: simple-ssti  (0) 2022.05.17

+ Recent posts