[webhacking.kr] old-10 Write-Up

두비니

·

2022. 9. 1. 07:45

 

 

webhacking.kr old-10

Write-Up

 

 

01. 문제분석

 

문제에 접속하면 다음과 같은 창이 나온다.

 

뭔가 해서 소스코드를 보니, 클릭할 때 마다 1px씩 움직이도록 되어있다.

 

 

조금 더 보기 좋게 소스코드를 가져오면 다음과 같다.

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

 

click시(onclick) 1px씩 오른쪽으로 움직이고, 해당 style의 left가 딱 1600px일 경우 문제가 풀린다.

 

 

02. Solution

 

본 문제의 취약점은 왼쪽의 O가 움직이는 걸 클라이언트 단에서 관리한다는 점이다. 크게 두 가지 방법을 생각했다.

먼저 this.style.left가 1600px일 경우 `this.href='?go='+this.style.left`로 옮겨간다. 그러면 애초에 `webhacking.kr/challenge/code-1/?go=1600px`로 옮긴다면?

 

 

위 사진처럼 no hack이 뜬다. style의 내부 값을 바꿔도 똑같은 걸 봐서는 추가적으로 한번 더 검사를 하는 것 같다.

하지만 어차피 증가를 시키는 함수 자체를 수정할 수 있기 때문에 상관없다. 나는 아래와 같이 HTML을 수정해주었다.

<a id="hackme" style="position:relative;left:0;top:0" 
 onclick="this.style.left=parseInt(this.style.left,10)+1599+'px';if(this.style.left=='1600px')this.href='?go='+this.style.left"
 onmouseover="this.innerHTML='yOu'" onmouseout="this.innerHTML='O'">O</a>

 

왜인지는 모르겠는데 기본적으로 1픽셀이 증가하기 때문에 1599로 수정하였다. 

그 이후 딱 한 번만 클릭해주면 문제를 풀 수 있다.  

 

'War Games > webhacking.kr' 카테고리의 다른 글

[webhacking.kr] old-12 Write-Up  (0) 2022.09.03
[webhacking.kr] old-11 Write-Up  (0) 2022.09.02
[webhacking.kr] old-9 Write-Up  (0) 2022.08.31
[webhacking.kr] old-8 Write-Up  (0) 2022.08.31
[webhacking.kr] old-7 Write-Up  (0) 2022.08.30