wargame/webhacking.kr

webhacking.kr 18번 풀이

LimeLee 2018. 8. 13. 14:46


webhacking.kr 18번 풀이

간단한 인증우회 문제

 



[HINT]


1. SQL Injection

2. space bypass





no를 get 파라미터로 받는다.

no는 특정 문자열이 들어가있으면 필터링하고

들어가있지 않은 경우, sql query를 요청한다. 반환값으로 admin이면 문제를 풀 수 있다.



table에 있는 값은 1이 guest, 2가 admin이다. 

where 조건문의 id가 guest로 고정되어 있으므로 no에서 sql injection을 시도하여 admin 값을 반환하게 한다.

간단하게 2 or 1=1로 시도했다. 참고로 int형의 컬럼에 조건문을 걸 때는 싱글쿼터 등의 구분자를 적지 않고 숫자만을 입력할 수 있으니

int형의 컬럼 조건문에 sql injection을 걸 때에는 싱글쿼터가 있는지를 확인하도록 한다.

이번 문제의 쿼리에는 싱글쿼터가 없으므로 싱글쿼터 없이 바로 원하는 쿼리를 삽입 할 수 있다.


하지만 %20(공백), \t(Tab,%09)을 필터링 하고 있으므로 no hack을 출력한다.

%20과 %09의 대체 문자로는 %0a가 있다. 



2%0aor%0aid='admin' 쿼리를 요청하게 되면 no hack을 출력하지 않는 것을 확인 할 수 있다.

원래라면 다음과 같이 쿼리를 요청하게 되면 id='guest' and no=2 or id ='admin'이라는 쿼리가 들어가게 되어

id = 'admin'인 값을 반환하게 되어 클리어가 되야하는 것이 맞다. 

소스코드에 없는 싱글쿼터에 \가 붙거나 replace 하여 문자를 없애는 등 추가적인 필터링이 있는지 모르겠지만, 싱글쿼터 안의 값을 인식하지 못한다.



그래서 싱글쿼터를 사용하지 않는 2%0aor%0ano=2를 통해 문제를 해결한다.



다른 방법으로 0x가 막혀있기 때문에 이진수인 0b를 이용하여 

2%0aor%0aid=0b0110000101100100011011010110100101101110 와 같은 쿼리를 요청해 문제를 클리어 할 수 있다.


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

Webhacking.kr(old) 4번  (3) 2019.11.13
webhacking.kr 42번 풀이  (1) 2018.08.13
webhacking.kr 34번 풀이  (1) 2018.08.10
webhacking.kr 8번 풀이  (0) 2018.08.08
webhacking.kr 17번 풀이  (1) 2018.08.08