Wargame/webhacking2017. 5. 2. 14:12

webhacking.kr 페이지에서 3번 문제에 들어가면 다음과 같은 화면이 나타난다.

생김새를 보면 수도쿠와 같은 모양이다. 문제를 풀어보면 다음과 같다.

gogo 버튼을 눌르면 다음과 같이 나타난다.

name을 입력하라고 나오는데 일단 입력을 해보자.

그러면 위와 같이 나타나는데, 더 이상 진행하는 것이 없다.

그럼 3번 문제 페이지의 소스를 보도록 하자.

소스를 보면 클릭이 가능한 칸에 hidden으로 값이 0으로 설정되어 있는 것을 확인할 수 있다.

소스를 더 열어보면 다음과 같은 코드를 확인할 수 있다.

클릭 했을 때 해당 칸이 black이 아니면 black으로 바꾸고 해당 위치의 변수에 1 값을 넣는다. 그 반대의 경우 white로 바꾸고 그 값을 0으로 바꾼다.

즉, 클릭 했을 때 해당 변수의 값이 설정이 된다.

그리고 script 부분을 보면 다음과 같다.

go 라는 함수가 정의되어 있고 이 함수는 answer 변수에 각 위치의 값을 저장한다. 그리고 그 값을 kk.answer 변수에 넣고 kk를 넘겨준다.

gogo  버튼을 누르면 go() 함수를 호출하게 된다.


이제 두 번째 페이지의 소스를 보도록 하자.

소스를 보면 answer 값이 hidden으로 숨어 있고 name을 입력받는 코드이다.

answer 값이 hidden으로 숨어 있는 것을 보니 꺼림찍하다. 이 값을 변경해서 보내보도록 하자.

그러기 위해 일단 프록시를 설정해야 한다. 프록시 설정은 이전 포스팅을 참조바란다.

프록시를 살리고 name 값을 입력한 뒤 write 버튼을 누르면 다음과 같은 화면을 확인할 수 있다.

answer 값 끝에 필자는 큰따옴표( " )를 추가하여 보냈다.

그러면 문제 페이지에 다음과 같은 화면을 볼 수 있다.

query error! 라는 문자열을 출력해준다. 이를 보니 쿼리문을 이용해야 하는 것을 추측할 수 있다.

SQL Injection 문제 같은 느낌이 조금 난다.

SQL 인증 우회를 위해 값을 true로 전달해보자.

answer 부분 끝에 'or 1'을 추가하여 전달했다. 그러면 다음과 같은 화면을 볼 수 있다.

no hack 이라는 문자열을 출력해 주는데 'or' 가 필터링이 걸리는 것 같다.

'or' 의 다른 표현인 '||'를 이용해보자.

위와 같이 answer 끝에 '|| 1'을 추가해서 전달했다.

그러면 다음과 같은 화면을 확인할 수 있다.

answer의 값이 우리가 찾고자 하는 플래그 값인 것 같다.

해당 값을 복사해서 답을 넣어보면 3번 문제를 풀린다.

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

[webhacking.kr] 6번 문제  (0) 2017.05.02
[webhacking.kr] 5번 문제  (0) 2017.05.02
[webhacking.kr] 4번 문제  (0) 2017.05.02
[webhacking.kr] 1번 문제  (0) 2017.05.02
[webhacking.kr] 가입하기  (0) 2017.05.01
Posted by Imp3rio