문제 페이지에 접속해보면 아래와 같은 코드로 구성되어 있는 것을 볼 수 있었다.
우선, 이 문제는 앞선 문제들과 달리 필터링을 해주는 구문을 확인할 수 있었다.
preg_match($pattern, $subject, [, $matches]) : 문자열 안에서 특정한 정규식 패턴의 존재 여부를 찾는데 유용한 함수
- $pattern : 문자열로 검색할 패턴
- $subject : 입력 문자열
- [$matches] : 사용 시 패턴에 매치되는 내용을 배열에 담아둠
따라서 위 코드를 통해 no의 입력 값 필터링 규칙으로 prob, -, ., (, ), ', ", ` 의 값들을 필터링한다는 것을 알 수 있다.
이전 문제들과 다르게 ', "를 필터링 하고 있기 때문에 이전에 사용한 방식으로는 풀 수 없고, 하단의 조건문을 통해 id 값이 admin으로 지정되어 있음을 알 수 있다.
이 문제는 스트링 우회를 통해 풀어볼 수 있다.
우선 문제 페이지에서 초기에 설정되어 있는 guest의 no 값을 알아보기 위해 주소창에 no 값을 0부터 차례대로 넣어보았다. 처음으로 0을 넣었을 때에는 아무 것도 나오지 않았다.
다음으로 no=1을 넣어보니 아래 이미지와 같이 'Hello guest'라는 문구가 출력된 것을 통해 id가 'guest'인 값의 no은 1에 해당하므로 admin의 no 값에는 1을 포함할 수 없음을 알 수 있다.
따라서 guest의 no값인 1을 제외한 다른 숫자로 no=0으로 하고 admin의 hex 값인 0x61646d696e을 사용하여 다음과 같이 쿼리문을 작성할 수 있다.
no=0 or id=0x61646d696e
쿼리문을 주소창에 입력해주니 'Hello admin'이라는 문구와 함께 문제를 해결할 수 있었다.
'CTF' 카테고리의 다른 글
[XSS-GAME] level5(reflected xss) write-up (0) | 2023.11.04 |
---|---|
[LOS] orc write-up (0) | 2023.11.01 |
[LOS] cobolt write-up (0) | 2023.11.01 |
[LOS] gremlin write-up (1) | 2023.11.01 |
[Dreamhack] simple_sqli write-up (1) | 2023.11.01 |