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 |