뉴비에욤

Webhacking.kr 18번 본문

Webhacking.kr

Webhacking.kr 18번

초보에욤 2015. 8. 15. 23:34

 

18번 페이지를 보면 어떤 값을 입력하고 제출하는 버튼이 있다.

우선 "index.phps" 페이지에서 소스 분석을 한ㄷ.

 

 

eregi 함수로 GET 메소드로 받은 no 파라미터 값을 필터링하여, 필터링 문자가 걸리면 "no hack"을

출력하고 종료된다.

 

필터링에 걸리지 않으면 쿼리에 no 파라미터 값이 들어가고 결과가 $q 변수에 저장된다.

$q 변수 값이 "admin" 이면 클리어 되는데, 이미 쿼리에서 "guest" 문자열이 고정되어 있다.

 

 

몇 가지 삽질(?)을 하다 보면 다음과 같은 사실을 알아 낼 수 있다.

- no 값을 '1'로 입력하면 "guest" 출력 (즉, "guest" id 컬럼의 no 컬럼 값은 '1')

- no 값을 '2'로 입력하면 아무것도 출력되지 않음

- 공백을 입력하면 필터링에 걸림

 

 

공백은 "%0a" 로 우회한다.

"guest" == "no:1" 이기 때문에 "admin'의 경우 no 값을 2로 추정한다.

 

쿼리를 위 사진과 같이 입력하면 출력 결과는 2개가 될것이다.

no=1    => guest 출력

no=2    => admin 출력

그런데 클리어는 "admin" 문자열을 요구하니깐 limit 함수를 써서 쿼리 결과 개수를 제한해야 한다.

 

만약 limit 함수가 필터링 되어 있다고 가정하면 쿼리를 다음과 같이 바꿔서 클리어 할 수도 있다.

=> no=-1%0aor%0ano=2

=> no=-1 or no=2

 

no=-1    => 출력 결과 없음

no=2      => "admin" 출력

 

 

 

 

'Webhacking.kr' 카테고리의 다른 글

Webhacking.kr 20번  (0) 2015.08.15
Webhacking.kr 19번  (0) 2015.08.15
Webhacking.kr 17번  (0) 2015.08.15
Webhacking.kr 16번  (0) 2015.08.15
Webhacking.kr 15번  (0) 2015.08.15
Comments