Always-Try(정보보안 및 일상)

webhacking.kr - Challenge(old) - 7번 본문

Pen Test

webhacking.kr - Challenge(old) - 7번

Always-Try 2021. 3. 2. 18:00

#1. 7번

1-1. 문제

1-2. 풀이

view-source를 클릭해보자.

이전 문제와 같이 끝 부분을 보면 solve(7) 이라는 함수가 있고, 그 바로 전 코드를 보면 data[0] = 2 일때 문제가 해결 된다는 것을 알 수 있다.

 

그리고 아래와 같이 GET 방식으로 val 값을 받고 있는데, 별다른 val 값이 없으면 val을 1로 설정해주고 있다.

 

그리고 preg_match 함수에 의해 val 값에서 특정 문자열들은 필터링 된다.

실제로 val에 2를 넣어봤더니, 필터링 된다.

val에 2를 어떻게 넣을 수 있을까?

10진수가 아닌 값으로 넣을수도 있고, 사칙연산을 통해 넣을수도 있고, Char()함수에 할당된 문자열을 통해 넣을수도 있다. 숫자 2를 피하기 위해 아스키 값으로 2를 뜻하는 char(50)으로 진행해보자.

 

우선 기본적으로 입력된 val = 2가 정확히 어떤 쿼리문인지 알 수 없으므로, 해당 쿼리가 아닌 2를 나타내주는 새로운 쿼리는 입력해준다. (select 2)

 

하지만, 위에서 2와 공백 문자는 필터링 되었으므로 아래와 같이 입력해준다.

0)union(select(char(50))#

 

참고로, union은 앞선 쿼리 실행 후 뒤에 나오는 쿼리가 실행될 수 있도록 한다. (이전 포스팅 참고)

 

 

 

 

Comments