보안 공부하는 꼬깔이

Webhacking.kr 3번 문제 풀이

 

 

 

3번문제 페이지로 들어오게 되면 Puzzle 이라는 문구와 함께 실제로 퍼즐이 있다.

 

이 퍼즐을 푸는게 곧 3번 문제를 푸는걸까?.

 

우선 퍼즐을 풀어보도록 하자.

 

 

 

흰타일을 클릭하면 이런식으로 검은색 타일로 채워지게 된다.

 

그리고 검은색 타일을 막 채우고 gogo를 눌러보면 No 를 출력하는 페이지로 이동되며 잠시후 다시 퍼즐이 있는 페이지로 돌아온다.

이것은 퍼즐이 틀렸다는 것을 의미한다.

 

검은색 타일로 퍼즐의 정답을 채우고 gogo를 누르면 어떠한 결과가 주어지는 궁금해진다.

 

위쪽과 왼쪽의 숫자는 무엇을 의미하는 걸까? 고민 끝에 그 라인에 존재하는 검은색 타일의 개수를 의미하는 것이 아닐까 하고 생각하게 되었다.

 

 

 

실제로 이런식으로 검은색 타일을 놓게되면 위쪽의 조건과 왼쪽의 조건을 모두 충족하게 된다. 이상태로  gogo를 눌러보자

 

퍼즐을 성공적으로 푼거같다!!

 

이름을 입력하라는 폼이 나와서 철권같은 게임처럼 클리어하면 이름을 입력하는 그런것이 아닌가 하고 순간 생각했다.(정확히 아니였다 ㅎ)

 

 

 

폼에 내 별명을 넣어 write를 눌러보았더니 name에는 내가 입력한 값, answer 에는 의미를 모르는 숫자 , ip 에는 나의 ip 이런식으로 출력되었다.

 

 

 

sql injection 문제가 아닌가 해서 name 폼에 sql injection 페이로드를 작성하다가 name input 태그의 maxlength 값이 10으로 되어있어 10글자 이상 적지 못하게 되어있는 것을 알게 되었다. 하지만 html은 클라이언트 단에서 변조가 가능하므로 maxlenth를 100으로 변경하고 페이로드를 전달해 보았다.

 

 

SQL injection 페이로드가 name에 그대로 출력되는 것을 보아 name 폼에 입력한 값은 문자열로 처리되어 출력되므로 sql injection 공격이 힘들것 같다.

 

 

 

폼을 다시 한번 확인하니 hidden 필드로 answer 값이 전달되는 것을 확인했고 value는 무조건 1010100000011100101011111 으로 고정된다.

 

 

 _1=1&_2=0&_3=1&_4=0&_5=1&_6=0&_7=0&_8=0&_9=0&_10=0&_11=0&_12=1&_13=1&_14=1&_15=0&_16=0&_17=1&_18=0&_19=1&_20=0&_21=1&_22=1&_23=1&_24=1&_25=1&_answer=1010100000011100101011111

 

1010100000011100101011111 이 숫자가 의미하는것은 무엇일까 생각하다가 퍼즐을 풀고나서 name의 폼이 있는 페이지의 URL을 확인하게되면 GET 방식으로 넘어가는 _1 ~ _25 인자 각각의 값들을 쭉 연결한 값과 _answer 인자의 값이 같다는 것을 확인했다.

 

그래서 URL의 _answer 인자의 값을 바꿔보았더니 퍼즐이 틀렸을때와 같이 no 라는 문장과 함께 퍼즐이 있는 페이지로 돌아갔다. 이것으로 _answer의 값이

퍼즐의 정답이며 _1~_25 인자들은 퍼즐의 25칸을 의미하며, 인자들 각각의 값이 _1 부터 _25까지 순서대로 _answer의 값의 1번째 자리 부터 25번째 자리 까지를 의미한다는 것을 알 수 있었다.

 

 

퍼즐의 정답인 answer의 value 값에 sql injection 으로 항상 참이 되는 페이로드를 전달하게 되면 어떻게 되는지 확인해보자

 

no hack 이라는 구문이 나왔다. 

 

아무래도 or 연산자가 필터링 당하는것 같다. 그렇다면 or 연산자와 동일한 역할을 하는 || 를 사용해서 전달해보자

 

 

전달!

 

 

 

name에 admin이 출력되고 answer에는 퍼즐의 정답 대신 어떤값이 출력되며, ip는 localhost로 출력된다.

 

 

answer의 값을 auth에 넣어보자

 

3번 문제 clear :D

 

'Web Hacking > Web Hacking.kr' 카테고리의 다른 글

webhacking.kr 6번 문제 풀이  (0) 2017.06.29
webhacking.kr 5번 문제 풀이  (0) 2017.06.29
webhacking.kr 4번 문제 풀이  (0) 2017.06.29
webhacking.kr 1번 문제 풀이  (0) 2017.06.29
WebHacking.kr 회원가입 방법!  (0) 2017.06.10