본문으로 바로가기

[Webhacking.kr]10번

category Wargame/webhacking.kr 2018. 7. 6. 12:46


Webhacking.kr 10번 문제 링크를 타고 들어가면 나오는 화면이다.


처음 봤을 때 여기저기 클릭해봤지만 어떻게 시작해야할지, 뭐가뭔지 도통 감이 잡히지 않았다.





한가지 알게된 것은 0에 마우스를 올렸을 때, y0u로 바뀌는 이벤트가 존재한다는 점 뿐이었다.


그렇다면 코드를 살펴보자





이벤트가 존재했던 '0'은 <a> 태그로 만들어진 친구였고, 여러가지 옵션이 있었다.



1. onmouseover


마우스가 올라가면 'y0u'로 바뀌도록 하는 옵션


2. onmouseout


올라가있던 마우스가 나오면 다시 '0'으로 바뀌도록 하는 옵션


3. onclick


클릭할 시에 활성화되는 이벤트이며 아래와 같은 이벤트가 존재한다.


1
2
this.style.posLeft+=1;
if(this.style.posLeft==800) this.href='?go='+this.style.posLeft
cs


this.style.posLeft


현재 태그(<a>)의 스타일 중 왼쪽 위치에 1을 더한다고 추측해볼 수 있다.


이러한 posLeft가 1씩 증가하다가 800이 되면 ?go=800인 링크가 걸리게된다.



그래서 이를 URL에 입력해서 들어가보았지만 아래와 같이 no hack이 뜨고말았다. 



url로 직접 들어가지는 못하는것 같다


그렇다면 다시 코드로 돌아가서 차근차근 이해해보자.



1
2
this.style.posLeft+=1;
if(this.style.posLeft==800) this.href='?go='+this.style.posLeft
cs


posLeft가 정확히 어떤 역할을 하는지 검색해보니 posLeft, posRight 등 pos가 붙는 성질은 Chrome에서 먹히지 않는다고 한다.


물론 IE로 갈아타는 방법도 있겠지만 Chrome으로 풀어보자


그렇다면 어떻게 해결할 수 있을까?



우선 a 태그의 id인 hackme를 통해 style.posLeft가 존재하는지 알아볼 수 있었다.


당연히 undefined가 출력되었고, posLeft를 특수한 조건이나 성질이 아닌 변수로써 사용가능할 것 같았다.


hackme.style.posLeft에 1이란 값을 넣고 다시 확인해보니 1이라는 값이 들어간 posLeft 변수가 설정이 되었다.


브라우저가 IE가 아니기 때문에 클릭시에 실제로 태그의 위치가 변경되지는 않겠지만


내부적으로 posLeft변수값이 상승하고 결국엔 링크를 타고 문제를 풀어낼 수 있을 것이다.


그러나 아직 풀리지 않은 의문이 있다


똑같은 주소로 접속했는데 왜 URL로 들어가면 no hack이 뜨고, 태크에 걸린 링크로 들어가면 클리어가 될까?


이는 서버측에서 URL로 접속한 것과, 태그 링크로 접속하는 것을 구분할 수 있다는 이야기인데..



아래는 같은 URL에 접속하는 패킷이지만 주소창에 입력하는것과 링크를 타고들어가는 패킷을 잡아본 것이다.


위의 패킷은 주소창에 치고 들어갔을 때의 모습

아래 패킷은 링크를 타고 들어갔을 때의 모습





무언가 다른점이 느껴지는가?


주소창 패킷에는 Cache-Control 데이터가 있고, 링크 패킷에는 referer 데이터가 존재한다.


Cache-Control : max-age 는 브라우저 캐시의 최대 캐싱 시간을 뜻하고

referer 는 이전 페이지 정보를 뜻한다.


이 차이점. 보통 referer을 가지고 서버측에서 판단할 수 있다고 한다.









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

[Webhacking.kr]3번  (0) 2018.07.05
[Webhacking.kr]52번  (0) 2017.08.01
[Webhacking.kr]32번  (0) 2017.08.01
[Webhacking.kr]33번  (0) 2017.08.01
[Webhacking.kr]47번  (0) 2017.07.31