Wargame/webhacking.kr (old)

[Webhacking.kr] 3번 풀이

Grini 2019. 2. 28. 01:15

네모로직이다.

네모로직을 풀고, gogo 버튼을 눌렀더니, get 방식으로 어떤 값들이 전송되고 새로운 페이지로 넘어갔다.

 

새로운 페이지에는 name을 입력할 수 있는 폼이 존재한다.

get 방식으로 전송되는 값이 무엇인지 알아보기 위해 개발자도구(F12)로 이전 페이지의 소스 코드를 보았다.

 

hidden type으로 로직의 결과가 get 방식으로 전송되고 있다. (검정 : 1, 흰: 0)

 

다시 원래 페이지로 넘어가서,

name에 test를 입력해 주었더니 페이지에 아래와 같이 출력되었다.

 

일단 입력할 수 있는 것이 name 밖에 없으니 name의 값으로 SQL Injection을 시도하였다.

 

입력한 그대로 출력된다...?

name은 공격벡터가 아닌 것 같다.

소스 코드를 보자.

 

post 방식으로 answer과 name 값을 전송한다.

name은 공격벡터가 아닌 것 같아 answer으로 SQL Injection을 시도하였다.

 

단, post 방식으로 값을 넘겨주기 때문에 fiddler와 같은 프록시 툴을 이용해야 한다.

fiddler 설치 및 사용법을 모르면 아래 글을 참고하자.

 

[fiddler 설치 및 사용법] https://grini25.tistory.com/13

 

answer의 값과 id의 값이 &로 묶여 전송되는 것을 확인할 수 있다.

or을 이용하여 아래와 같이 조작한 후 값은 전송해보았다.

 

no hack이 페이지에 출력된다.

injection point는 answer이다..!

 

SQL Injection을 하기에 앞서, 삽질을 줄이기 위해 필터링된 문자열을 확인하였다.

 

' (싱글 쿼터), =, or, and, --, #

필터링되어 no hack이 출력된다.

 

", ||, like, true, false

필터링되어 있지 않고, 정상적 쿼리문으로 입력한 것이 아니라 query error! 가 출력된다.

 

+, %20

아무 값도 출력되지 않는다. (필터링된 것 같지는 않다.)

 

&&

필터링되어 있지 않다.

원래 출력되던 것이 출력되었지만, 아래와 같이 여러개가 한번에 추가되어 출력된다.

아무 값도 출력되지 않던 개수만큼 증가한다. 단순 오작동인가? 잘 모르겠다.

 

 

필터링되지 않는 값을 이용하여 SQL Injection을 수행하였다.

 

or이 필터링되어 있기 때문에 ||를 이용해 쿼리문을 으로 만들어주었다.

 

내가 전송한 값과 admin의 값이 함께 출력되었다.

admin의 answer 값을 Auth 페이지에 인증하면 문제가 풀린다.