Web/Webhacking

Webhacking - challenge(old) 18번

dalgorithm 2021. 10. 16. 19:59
728x90

 

웹해킹 challenge(old) 18번 문제이다.

클릭해서 들어가면 SQL INJECTION 문제임을 확인 가능하다.

 

아래 view-source를 누르면 소스 코드 확인이 가능하다.

 

 

후반부에 php 코드가 있고, 해당 부분을 살펴봐야 할 것 같다.

preg_match 함수에 대해 알고 넘어가야한다.

 

preg_match는 정규식 표현을 작성하는 함수로, 매칭되는 값을 찾게 되면 그 시점에서 검색이 종료된다.

첫번째 인수를 통해 정규식 표현을 작성하고,

두 번째 인수를 토애 검색 대상 문자열을, 세 번째 인수를 통해 배열 변수를 반환하고

패턴 매치에서 매칭된 값을 배열로 저장한다.

 

1 이라는 값을 입력해보니 hi guest라고 나타난다.

no 값이 1 이면 guest 임을 알 수 있다.

 

select id from chall18 where id = 'guest' and no = $_GET[no]

select id from chall18 where id = 'guest' and no = 1 // hi guest

select id from chall18 where id ='guest' and no = 0 // 해당하는 값 없음

 

현재 원하는 값은 admin이기 때문에 0을 넣어서

해당하는 값이 없도록 만들어줘야한다.

 

0 or no=2

 

라고 입력하면 admin 값이 나올 줄 알았지만, preg_match 함수에 의해

no hack이 나타난다.

 

우회법을 찾기 위해 퍼센트 인코딩값으로 문자를 표현하면 문자인 것으로 

인식하기 때문에 아래 표를 참고하였다.

 

0%09or%09no=2

 

공백의 문제였기 때문에 이를 %09로 대신 나타내주니 

문제를 해결할 수 있었다.

 

728x90