문제
문제 사이트에 접속하게되면 입력값을 보낼수있는 로그인 페이지가 존재한다.
사이트를 분석하기전에 먼저 제공해준 문제파일을 열어 사이트 분석을 한다.
위 코드를 확인해보면 admin,select,싱글쿼터,공백(화이트스페이스)등 sql injection하는데 중요한 단어들이 많이 필터링 되는것을 볼수있었으며
사이트에서 입력값을 정할수있는 uid,upw뿐만이 아니라 level이라는 값을 하나더 받는것을 볼수있다.
여기서 핵심은 level은 문자가 아니라 숫자로 지정해줘서 싱글 쿼터를 사용할필요가 없다는 것이다.
이어서 아래를 더 분석 해보면 쿼리에 대한 값이 존재하며 uid값에 admin값을 넣어 준다면 flag가 나오는 것을 알수 있다.
따라서 level값을 통해 uid값을 조작하기 위한 노력들을 많이해 보았다.
처음에는 or uid 와 union select uid를 통해 조작해보려 해봤지만 전부 실패했고 dreamhack의 강의에서 힌트를 얻을 수 있었다.
select를 우회하는 방법으로 처음에는 char이나 인코딩을 통해 우회해보려했지만 union values 라는걸 알게 되었고 화이트 스패이스 우회를 통해 다음과 같이 flag를 얻을수 있었다.
느낀점
-sql injection을 시도할때는 mysql인지 sqlite인지를 알아야한다. mysql에서 쓰이는 문법이 sqlite에서 사용안될수있는지 이번 문제를 통해 느꼈다.
-select 우회방법 중에 union values가 있다
-문제를 분석할때 플래그가 나오는 조건을 명확하게 인지하고 문제를 풀어야한다.
'dreamhack > web' 카테고리의 다른 글
pathtraversal (0) | 2022.12.19 |
---|