본문 바로가기
Wargame/webhacking.kr

webhacking.kr 27번

by morae23 2019. 1. 29.

27번 문제를 보면 다음과 같이 no를 입력 받는 form이 존재한다제목을 보면 SQL Injection이 가능할 것으로 보인다.

 






 

form의 action이 index.php이기 때문에 index.phps를 보면 다음과 같은 코드를 볼 수 있다.

 




 


solve()가 호출되기 위해서는 $q[id]가 admin이어야한다.

따라서 쿼리문의 수행 결과가 admin이 되어야하는데 쿼리문의 조건을 보면

where id=’guest’ and no=($_GET[no])인 것을 볼 수 있다.

 

여기서 id가 admin일 때로 조건을 변경하기 위해서 or를 사용할 수 있다.

where id=’guest’ and no=0 or no=2 와 같이 작성하면 된다.

이렇게 되면 실제로는

(id=’guest’ and no=0) or no=2 가 된다.

 

이 때 주의할 것은 no=($_GET[no])에서 괄호가 있기 때문에 입력 값을 이용하여 괄호를 닫아주고 뒤에 존재하는 괄호는 주석처리를 해야 한다는 것이다.

 

또다른 주의 사항은 필터링이다. 닫는 괄호의 경우 필터링 대상이 아니지만, =은 필터링의 대상이다. 따라서 =을 대신하여 like를 이용하였다.



 

 



 

결과적으로 input 값은

0) or no like 2 --

이 된다.


0은 guest의 no를 제외한 숫자, 2는 admin의 no를 의미한다.

여기서는 1을 제출해봄으로써 guest의 no가 1임을 알 수 있고, admin은 그 다음인 2일 것이라고 추정하였다.


 

참고로 이 때 -- 뒤에 띄어쓰기를 해야만 하는데

입력 값이 들어가면

where id=’guest’ and no=(0) or no like 2 -- )

와 같이 되기 때문에 주석 문자와 주석의 대상 사이에 공백이 있어야하기 때문이다.

 

위와 같이 입력하면 clear할 수 있다.





 

 



'Wargame > webhacking.kr' 카테고리의 다른 글

webhacking.kr 58번  (0) 2019.01.29
webhacking.kr 31번  (0) 2019.01.29
webhacking.kr 25번  (0) 2019.01.29
webhacking.kr 4번  (0) 2019.01.29
webhacking.kr 54번  (0) 2019.01.29

댓글