WEB hacking/드림핵(dreamhack)

드림핵 Carve Party WriteUp

Roronoa 2023. 9. 4. 20:12
반응형

문제 설명

[그림 1] 문제 설명

호박은 10000번 클릭하면 플래그를 획득할 수 있다.

문제 파일을 다운받은 후 웹 사이트에 접속을 진행한다.

 

[그림 2] 문제 화면

이 호박을 10000번 누르면 flag를 획득할 수 있다. 호박을 눌렀을 때 코드가 어떻게 처리되는지 확인해볼 필요가 있다.

 

소스코드(Click한 경우)

$(function() {
  $('#jack-target').click(function () {
    counter += 1;
    if (counter <= 10000 && counter % 100 == 0) {
      for (var i = 0; i < pumpkin.length; i++) {
        pumpkin[i] ^= pie;
        pie = ((pie ^ 0xff) + (i * 10)) & 0xff;
      }
    }
    make();
  });
});

클릭하였을 때 counter가 1씩 증가하며 pumpkin배열의 값을 불러와 pie와 xor 처리를 한다. 그 후 10000번을 클릭하였을 때 make함수를 수행하여 canvas를 통해 flag를 그려준다.

 

python을 통해 코드를 작성하여 flag를 확인하였다.

파이썬 flag 추출 소스코드

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

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

flag = [chr(i) for i in pumpkin]
print("".join(flag))

counter % 100이 0일때마다 xor연산이 수행되므로 총 100번 수행된다. python을 통해 100 xor연산을 하였으며 연산이 끝난 pumpkin 배열은 문자열로 변경하여 화면에 그려주기 때문에 pumpkin 배열을 문자열로 형변환하면 flag값을 알 수 있다.

 

python 코드 실행 결과

[그림 3] flag 추출

python 코드를 통해 flag를 추출하였다.

 

DH{I_lik3_pumpk1n_pi3}

다른 방법

$(function() {
  $('#jack-target').click(function () {
    while(counter<10000){
		counter += 1;
		if (counter <= 10000 && counter % 100 == 0) {
		  for (var i = 0; i < pumpkin.length; i++) {
			pumpkin[i] ^= pie;
			pie = ((pie ^ 0xff) + (i * 10)) & 0xff;
		  }
		}
	}
    make();
  });
});

해당 코드 콘솔창에서 실행

 

for(i=0; i<=10000; i++){
 $('#jack-target').trigger("click")
}

해당 코드 콘솔창에서 실행

 

반응형