jxxwxx 2022. 5. 21. 16:09

초기 화면

SQL 인젝션을 사용하는 문제인 것 같다.

먼저 코드 확인

소스 코드 해석

  • get 방식으로 no 전달
  • 정규표현식으로 공백 / & / select / from 등 문자열 필터링
  • 하단에 sql 쿼리문
  • if 조건문에서 id = admin 일때 해결 예상
  • 주석으로 admin의 no는 2라는 것을 알 수 있음

  • id = guest로 고정되어 있으므로 쿼리문 수정하기
  • "select id form chall18 where id='guest' and no= 뒤에 '-1' or no='2'로 변경

-> 앞의 and문을 거짓으로 바꾸고 뒤의 or문으로 참을 만들어주므로 식 성립

아이디 란에 '-1'or no='2' 제출

그러나 공백이 필터링 되어 no hack 표기

처음 코드에서 확인하였듯 get 방식으로 전달하므로 url에서 탭을 url encode 한 %09로 공백 대체

해결