문제를 보면 특정 사이트에 연결된 것이 아닌 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 |