도카이트

[Wargame] Suninatas 5번 Write-Up 본문

Wargame/Suninatas

[Wargame] Suninatas 5번 Write-Up

dodoh4t 2022. 5. 31. 02:23
728x90
반응형

문제 화면

[Suninatas 5번 문제 화면]

- Key Value 값을 Check 할 수 있는 입력폼이 존재한다.

- 소스코드를 확인해보도록 하자!

 

 

페이지 소스코드

// 일부 코드 생략, 핵심 부분만 작성

<script>
							eval(function(p,a,c,k,e,r){e=function(c){return c.toString(a)};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('g l=m o(\'0\',\'1\',\'2\',\'3\',\'4\',\'5\',\'6\',\'7\',\'8\',\'9\',\'a\',\'b\',\'c\',\'d\',\'e\',\'f\');p q(n){g h=\'\';g j=r;s(g i=t;i>0;){i-=4;g k=(n>>i)&u;v(!j||k!=0){j=w;h+=l[k]}}x(h==\'\'?\'0\':h)}',34,34,'||||||||||||||||var|result||start|digit|digitArray|new||Array|function|PASS|true|for|32|0xf|if|false|return'.split('|'),0,{}))		
                    </script>
                    <b>Check Key Value</b>
                </td>
            </tr>
            <tr>
                <td colspan="2" align="center"></td>
            </tr>
        </table>
    </form>
</body>
</html>
<script>
	function init(){
		document.frm.password.value = "";
		document.frm.password.focus();
	}
</script>
<!--Hint : 12342046413275659 -->

- 눈에 띄는 JavaScript 코드들이 있다…

- 진짜 온통 알 수 없이 혼잡한 코드들로 이루어져 있다..

- 이는 난독화된 JavaScript 이며, JavaScript Unpacker 도구를 이용하여 해석할 수 있다.

 

 

JavaScript Unpacking

[JavaScript Unpakcing]

- 다음 사이트를 이용하여 eval 함수로 둘러싸여있는 복잡한 JavaScript 코드를 해석하였다 !

- https://www.strictly-software.com/unpack-javascript

- 해당 코드 부분을 붙여넣기 후 Unpack 버튼을 클릭하여 Unpacking 을 진행한다!

- 드디어 이해 가능(?)한 반가운 모습의 JavaScript로 재출력되었다 !

 

 

Unpacked JavaScript

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)
}

- digitArray 를 정의하고 PASS 함수를 사용하여 result 값을 설정하는 듯 하다.

- PASS 함수 값의 인자로 Hint에 적혀있었던 값을 삽입하면 문제가 해결될 듯 싶다…?

 

 

PASS 함수를 통한 Key Value 획득

[Key Value 획득]

- PASS 함수의 인자값으로 Hint로 주어졌던 12342046413275659을 삽입하였다.

- ‘9c43c20c’ 라는 문자열을 확인할 수 있다!

- 서둘러 해당 문자열을 Key Value 입력 폼에 입력 후 Check를 시도해보자 !

 

 

Authkey 획득

[Suninatas 5번 Clear]

- 성공적으로 Authkey 값을 획득할 수 있다 !!

728x90

'Wargame > Suninatas' 카테고리의 다른 글

[Wargame] Suninatas 7번 Write-Up  (0) 2022.05.31
[Wargame] Suninatas 6번 Write-Up  (0) 2022.05.31
[Wargame] Suninatas 4번 Write-Up  (0) 2022.05.13
[Wargame] Suninatas 3번 Write-Up  (0) 2022.05.13
[Wargame] Suninatas 2번 Write-Up  (0) 2022.05.13
Comments