문제 자체에 담긴 로직 자체는 굉장히 간단했다
맨 처음에 리버싱 문제라고 해서 디버거에 담는 문제인 줄 알고
아이다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년대임을 감안해서 브루트 포싱을 하는 것이 가장 효과적이었다
'호그와트' 카테고리의 다른 글
드림핵 웰컴! (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 |