본문 바로가기

카테고리 없음

webhacking.kr 18번

18번 문제는 대놓고 sql injection 문제라고 되어 있어서 바로 소스 코드를 확인했습니다.

소스 코드를 no=의 값을 get 형식으로 받는 형태이고 (,) 공백, select 등이 필터링 되어 있습니다. 그런데 주석으로 admin의 no 값은 2로 나와 있습니다. 그래서 단순히 2를 넣었지만 되지 않아서 no=2%0aor%0a2라는 필터링을 우회해서 무조건 2가 들어가는 쿼리문을 만들었습니다. 그랬더니 hi guest가 뜨는 것이었습니다. 그래서 한참 멍하니 있다 보니 애초에 쿼리문 조건이 id=guest였습니다.

 

하하... 그냥 바보였던 것 같습니다. 그래서 다시 문제를 해결할려고 항상 참이 만드는 조건문(?)들을 검색해보니 아래와 같은 조건들을 검색할 수 있었습니다.(사실 and, or 연산에 익숙하다면 직접 계산할 수 도 있었습니다.) 그 중에서 제가 사용한 조건은

 

(false and true) or true = true 를 이용했습니다. 이미 id='guest' 부분은 참이라고 볼 수 있기 때문에 no=값에 이상한 값을 넣어 false and true를 false로 만들고 그 뒤 or no=2를 통해 no=2인 참인 구문을 완성해서 문제를 해결했습니다.