WarGame/Web

[webhacking.kr 14번]

선문기 2016. 1. 8. 19:29

[필히 본인이 풀어보시고 정말 안되겠다면 다음의 풀이를 확인하시길 바랍니다.]


[그림 1] 14번 문제 메인페이지


14번 문제를 들여다 보면 단순히 텍스트를 입력하는 곳과 버튼하나가 활성화 되어 있다.


[그림 2] 임의의 값 입력


임의의 값을 입력 하였더니 "Wrong"메시지창을 출력 하였다.

이 과정을 볼때 애플리케이션이 원하는 값이 존재함을 추측할 수 있다.

이제 본격적으로 그 값을 찾아보자.


<html>

<head>

<title>Challenge 14</title>

<style type="text/css">

body { background:black; color:white; font-size:10pt; }

</style>

</head>

<body>

<br><br>

<form name=pw><input type=text name=input_pwd><input type=button value="check" onclick=ck()></form>

<script>

function ck()

{

var ul=document.URL;

ul=ul.indexOf(".kr");

ul=ul*30;

if(ul==pw.input_pwd.value) { alert("Password is "+ul*pw.input_pwd.value); }

else { alert("Wrong"); }

}


</script>



</body>

</html> 


[표 1] 소스코드


버튼을 클릭시 작동하는 함수가 ck()이다.

indexOf()를 이용하여 현재 URL을 불러와 .kr의 값의 위치를 반환한다.

그 후 위치값에 30을 곱한 값을 입력하면 "Password is "+ul*pw.input_pwd.value"의 메시지창이 출력이 된다.

webhacking.kr에서 .kr의 위치는 10이다.(시작은 0부터)

10*30은 300이니 300을 입력해보았다.



[그림 3] 300 입력

그러나 300은 아니라는 결과를 볼 수 있다.

왜일까??

여기서 중요한점을 빼먹었다. 보통 웹 통신은 http프로토콜을 이용한 통신이 이루어진다.

해당 웹 브라우저에는 사용프로토콜이 표시되지 않았지만 http://까지 감안하여 위치를 파악해야 한다.

.kr의 위치는 17번째가 되는 것이다.



[그림 4] 510 입력 



[그림 5] 인증