WEB hacking/드림핵(dreamhack)
드림핵 Carve Party WriteUp
Roronoa
2023. 9. 4. 20:12
반응형
문제 설명
호박은 10000번 클릭하면 플래그를 획득할 수 있다.
문제 파일을 다운받은 후 웹 사이트에 접속을 진행한다.
이 호박을 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 코드 실행 결과
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")
}
해당 코드 콘솔창에서 실행
반응형