1번부터 4번까지는 무난하게 풀어왔는데 5번에 '턱' 하고 막혔었다.
이유는 문제를 보면서 얘기하시죠~
바로 문제풀이 시작하겠습니다.
1. 문제
2. 문제풀이
키 값을 입력하여 올바른 키를 입력 시 문제가 해결될 것으로 보입니다.
단서가 아무것도 안보이기에
아무 입력 값(abcdefg)을 입력 후 요청 패킷을 잡아보았습니다.
password라는 파라미터에 들어가는 것을 보니 어떠한 비밀번호를 입력해야 한다는 것을 예상해봅니다.
응답 값을 확인했더니..
힌트가 나왔습니다. 힌트 이용을 위해 패스워드 파라미터에 넣어봤습니다.
하지만 응답 값 및 페이지 내 아무런 변화가 없는 걸로 보아 비밀번호가 아닌 것 같습니다...
스크립트 구문중 의심 가는 구문 분석이 필요해 보입니다.
스크립트 구문 내 코드를 보면 알아보기 힘든 구문으로 이루어져 있는 것을 볼 수 있습니다.
알아보기 힘든 구문으로 되어있는 것을 보고 난독화가 되어있을 것이라고 생각하여 난독화를 풀어보았습니다.
document.getElementsByClassName = function (a) {
var b = new Array();
var c = document.getElementsByTagName("*");
for (var i = 0; i < c.length; i++) {
if (c[i].className.indexOf(" ") >= 0) {
var d = c[i].className.split(" ");
for (var j = 0; j < d.length; j++) {
if (d[j] == a) {
b.push(c[i])
}
}
} else if (c[i].className == a) {
b.push(c[i])
}
}
return b
}
난독화를 풀어주는 사이트를 통해 풀어보았더니 코드가 이상하게 풀렸습니다;;..
응답 값 내 eval 함수 대신 document.write()함수를 이용하여 난독화를 풀어 보았습니다.
var digitArray=new Array('0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f');
function PASS(n)
{var result='';var start=true;
for(var i=32;i>0;)
{i-=4;
var digit=(n>>i)&0xf;
if(!start||digit!=0)
{start=false;result+=digitArray[digit]}
}
return(result==''?'0':result)}
나온 코드를 보니
힌트에서 나온 12342046413275659 값을 넣어주면 PASS 값을 리턴해주는 것 같다.
패스워드 값을 입력하는 곳에 PASS(힌트 값)을 넣어 리턴 값을 받아 보았다.
9c43c20c 값이 나왔으며 체크해본 결과....
키값을 받았다.
이번 건 혼자 해결해보려고 하다가 너무 오랜 시간이 걸렸다;; 모를 땐 조금씩 도움을 받긴 해야겠다
문제풀이 끝~
*제 개인적인 문제풀이 방식이었으며, 잘못된 점이 있다면 알려주시면 감사하겠습니다.
'워게임 > suninatas' 카테고리의 다른 글
suninatas/웹/7번 문제풀이 (0) | 2021.06.23 |
---|---|
suninatas/웹/6번 문제풀이 (0) | 2021.06.14 |
suninatas/웹/4번 문제풀이 (0) | 2021.05.30 |
suninatas/웹/3번 문제풀이 (0) | 2021.05.28 |
suninatas/웹/2번 문제풀이 (0) | 2021.05.19 |