본문 바로가기

Study/Reverse Engineering

dreamhack : secure-mail writeup

728x90

https://dreamhack.io/wargame/challenges/92

 

Secure Mail

Description 중요한 정보가 적혀있는 보안 메일을 발견하였습니다. 보안 메일의 비밀번호는 생년월일 6자리인 것으로 파악되나, 저희는 비밀번호 정보를 가지고 있지 않습니다. 비밀번호를 알아내

dreamhack.io

 

이미지에 난독화되어있는 메일을 확인할 수 있는데

생년월일이면 브루트 포스해도 괜찮을 것 같다.

하지만 나는 자바스크립트 코드를 모르기 때문에

남의 블로그 브루트포싱하는 자바스크립트를 분석할 것이다.(자바스크립트 공부⭐)

 

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

위 코드는 웹 페이지에서 window.alert 함수가 호출될 때마다 경고 대신에 콘솔에 메시지를 출력하게 만들고 함수는 항상 true를 반환하여 호출자에게 "확인" 버튼을 눌러 다음 작업을 계속할 것인지를 묻는 대화 상자를 표시하지 않는다.

 

 

function birthday(aaa){ //`birthday`라는 이름의 함수를 정의, 이 함수는 `aaa`라는 매개변수를 하나 받음.
 	var format = /^([0-9]{2}(0[1-9]|1[0-2])(0[1-9]|[1,2][0-9]|3[0,1]))$/;
    //정규 표현식을 사용하여 `format` 변수를 선언하고 초기화. 이 정규 표현식은 `aaa`가 주어진 패턴에 맞는지 여부를 확인하는 데 사용. 이 패턴은 생년월일을 나타냄
 	if(format.test(aaa)){ //`format` 정규 표현식을 사용하여 `aaa`를 테스트하고, 이것이 패턴과 일치하는지 확인
  		_0x9a220(aaa); //만약 `aaa`가 유효한 생년월일 형식이라면, `_0x9a220` 함수를 호출하여 이 생년월일을 처리
 	}else{ 
    	//이 부분은 생년월일이 유효하지 않은 경우에 실행
 	}
}

위 코드는 생년월일을 검증하고, 유효한 경우에는 `_0x9a220` 함수를 호출하는 JavaScript 함수.
입력된 생년월일이 주어진 형식에 맞는지 확인하고, 유효한 경우에는 `_0x9a220` 함수를 호출하여 처리하는 간단한 유효성 검사를 수행. 생년월일이 유효하지 않은 경우에는 아무 작업도 수행하지 않음.

 

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

위 코드는 800,000부터 999,999까지의 숫자를 반복적으로 birthday 함수에 전달하여 생년월일을 검증하는 것을 시도하는 것으로 for 루프는 i를 800,000에서 시작하여 999,999까지 증가시키며 반복됨. 각 반복에서 birthday 함수가 i값을 인자로 받아 호출. 이렇게 되면 각 숫자에 대해 생년월일 유효성 검사가 수행한다.

 

그렇게

브라우저 개발자도구 콘솔창에서 실행

 

약 7489번째에서 플래그를 얻을 수 있었음...

다른 사람의 코드를 베껴서 너무 아쉬웠지만,, 자바스크립트도 악성코드의 위협이 있을 수 있으니 JS공부해야겠다!!

 

가능하다면 저 난독화된 메일을 풀수있도록 고민 한번 해봐야겠다

 

💡정리

생년월일(6자리) 정규식 : ([0-9]{2}(0[1-9]|1[0-2])(0[1-9]|[1,2][0-9]|3[0,1]))

'Study > Reverse Engineering' 카테고리의 다른 글

dreamhack wargame Easy Assembly  (0) 2024.07.02
dreamhack : Collect Me writeup  (1) 2024.06.03
dreamhack : rev-basic-8 write-up  (0) 2024.06.01
dreamhack : rev-basic-6 writeup  (0) 2024.05.30
dreamhack : rev-basic-4 write-up  (1) 2024.05.29