Webhacking

[Webhacking.kr] old-10번 풀이

aeeazip 2022. 12. 21. 02:37

링크로 들어가면 10번 문제를 확인할 수 있다.

문제 사진

 

문제만 봐서는 전혀 모르겠당 ^_^ 

소스코드를 보자 !

 

 

 

 

 

소스코드


<html>
<head>
<title>Challenge 10</title>
</head>

<body>
<hr style=height:100;background:brown;>
<table border=0 width=1800 style=background:gray>
<tr><td>
<a id=hackme style="position:relative;left:0;top:0" 
onclick="this.style.left=parseInt(this.style.left,10)+1+'px';
if(this.style.left=='1600px')this.href='?go='+this.style.left" 
onmouseover=this.innerHTML='yOu' onmouseout=this.innerHTML='O'>O</a><br>
<font style="position:relative;left:1600;top:0" color=gold>|<br>|<br>|<br>|<br>Goal</font>
</td></tr>
</table>
<hr style=height:100;background:brown;>
</body>
</html>​

 

<a> 태그에 많은 정보가 담겨있다.

① 회색칸에 O라는 글씨에 마우스를 갖다대면 yOu로 변함

② 현재 글씨의 위치는 this.style.left=0

하지만 핵심은 onclick 라인부터 시작된다.

onclick="this.style.left=parseInt(this.style.left,10)+1+'px';
if(this.style.left=='1600px')
	this.href='?go='+this.style.left"

 

parseInt(this.style.left,10)
= String 타입인 this.style.left를 int형 10진수 값으로 변환하여 반환

① id=hackme인 요소를 클릭하면 this.style.left가 +1한 값을 갖게 되면서 글씨가 오른쪽으로 1px 이동

this.style.left가 1600px이 되면 this.href = ?go=1600px 이 실행

→ goal 위치로 이동

this.style.left가 1600이 되어야 하므로 한 번 클릭하여 this.style.left+1=1600으로 만들어주려면

this.style.left =1599로 지정하면 된다.

 

 

 

 

 

해결


[F12] → [Console]로 들어간다.

콘솔창에 $('a#hackme').style.left = 1599 를 입력한다.

콘솔창에 입력 후 엔터 ​
 

 

id가 hackme인 <a>를 선택하고 style.left를 1599로 만들어준 후에 해당 영역을 클릭하면 onclick이벤트로 this.style.left=1600이 되면서 문제가 풀린다 ^_^V

O가 Goal에 도착했다

 

javascript는 클라이언트 쪽에서 처리하는 언어이기 때문에 사용자가 소스 코드 확인 및 수정 가능

→ 보안에 취약한 언어

 

해당 문제는 자바스크립트의 보안 취약점을 이용한 문제이다.

얻쉬 오늘 공부 끝