호그와트

시큐어mail(Dreamhack)

영웅*^%&$ 2021. 10. 16. 15:29
728x90

문제 자체에 담긴 로직 자체는 굉장히 간단했다

맨 처음에 리버싱 문제라고 해서 디버거에 담는 문제인 줄 알고

아이다ida와 디버거에 넣어보았지만 pe파일이 아니라는 답만 얻게 되었다

그런데 파일 형태를 보니 아주 간단했다 html 파일이고 자바스크립트로

되어 있다는 것을 알 수 있었다 열어보니 내용 역시 간단했다

생년월일로 되어있는 비밀번호가 형성되어있고 그걸 브루트포스를 사용해서

풀어내라는 것이 문제라는 것을 쉽게 알 수 있었다

그러나 진짜 문제가 되는 부분은 바로 이 부분부터였다

javascript를 까서 열어보니 <script type= ~~해서

뒷 부분부터 엄청나게 긴 내용의 문자열이 나왔기 때문이다

이 문자열을 이용해서 특정한 값을 찾고 그 값을 전후로 해서

브루트 포싱을 하라는 것이 문제였음을 알 수 있었다

그래서 이 문제가 왜 웹 문제가 아니라 리버싱 문제인지도 알 수 있었다

A)

window.alert = function ( text ) { console.log( 'tried to alert: ' + text ); return true; };

function birthday(aaa){

var format = /^([0-9]{2}(0[1-9]|1[0-2])(0[1-9]|[1,2][0-9]|3[0,1]))$/;

if(format.test(aaa)){

_0x9a220(aaa);

}else{

}

}

for(var i=800000; i<999999; i++) {

birthday(i);

}

B)

alert=function(){}

for (var x = 95; x <= 99; x++) {

for (var y = 1; y <= 12; y++) {

for (var z = 1; z <= 31; z++) {

document.getElementById("pass").value = String(x) + String(y).padStart(2, '0') + String(z).padStart(2, '0')

_0x9a220(pass.value);

}

}

}

C)

year = "데헷";

for(var j =1; j<13; j++){

if(j < 10){

month = "0" + String(j);

}

else {

month = String(j);

}

for(var k = 1; k < 32; k++){

if(k < 10)

day = "0" + String(k);

else

day = String(k);

birth = year + month + day

_0x9a220(birth);

}

}

상당히 달콤하게 약을 빨아 제낀 문제였다

안에 열어보면 위에도 적어놓았듯이 말도 안되는 값이 우수수 쏟아지는 문제이다 드림핵 자체에 설명으로는 꽤 그럴 듯하게 써놓긴 했지만

대단한 고수들의 롸업을 보아도 오히려 이렇게 어려운 내용에 대해서는 거의 무시하고 푼 롸업들이 대부분이었다. 이렇게 작성된 프로그램은 최상위 고수들조차 손을 못 대는 것 같다.

따라서 안에 있는 복잡한 내용을 굳이 이해하려고 하기 보다는

좀 더 실용적으로 접근하여 해당 내용이 생년월일이고 대략적인 값이 80~90년대임을 감안해서 브루트 포싱을 하는 것이 가장 효과적이었다

728x90

'호그와트' 카테고리의 다른 글

드림핵 웰컴!  (0) 2021.10.16
Simple-sqli(Dreamhack)  (0) 2021.10.16
재밌는 ssrf(Dreamhack)  (0) 2021.10.16
proxy(Dreamhack)  (0) 2021.10.13
호박부수기 (Dreamhack)  (0) 2021.10.13