제공되는 코드가 없어서 그런지 어디서부터 접근해야 할지 감이 안 잡히네요. ㅠㅠ
Flask 해당 버전 CVE도 찾아보고, HTTP 메서드 변경, contents에 들어갈 수 있는 값을 Accept 리스트에 있는 타입 중 하나로 변경, 디렉터리 트래버설 테스트, 특문 입력 시도 해 보았는데 이 가운데 맞는 접근법이 있는지요? 아니면 혹시 다른 방법으로 시작해야 할까요?
입력창에 적당한 값들을 입력하면서 이상한 점을 찾아보셨나요?
Add Post에는 <,>,'과 같은 기호들을 넣어서 추가해 보면 문자열이 이스케이프 처리 되어 화면에 출력되지만, Search에는 '을 넣으면 에러가 발생합니다.
따라서 주어진 시스템에서 SQL 삽입이 가능함을 유추할 수 있습니다.
임의 SQL 명령어 실행이 가능해 졌으므로, 적당한 쿼리를 통해(이것은 Googling을 추천합니다.) 주어진 웹앱이 어떤 RDBMS를 사용하는지 참과 거짓을 구분해 가면서 추리할 수 있습니다.(실행이 되면 참, 오류가 발생하면 거짓)
만일 RDBMS 종류 파악에 성공했다면, 모든 RDBMS가 갖는 중앙 테이블(시스템 테이블)에 접근해서 본 시스템이 어떤 테이블을 가지고 있고, 어떻게 이 테이블을 만드는지 각 테이블별 구조까지 파악할 수 있습니다.
이것을 데이터베이스 지문 채취(Fingerprinting)라 합니다.
System Table Fingerprinting 관련 Dreamhack 강의
DBMS Fingerprinting 관련 Dreamhack 강의
해당 기법과 관련한 Dreamhack 강의입니다. 참고해 보시면서 문제를 풀어보세요.
P.S. 지문 채취의 특성상 여러 번의 시행착오를 통해 정답이 나오므로, 예상되는 입력을 하나씩 넣어보세요. RDBMS마다 사용하는 시스템 테이블이나 시스템 함수 등이 조금씩 다릅니다.
P.P.S. 결과의 출력은 프론트엔트 프레임워크 또는 템플릿 엔진을 통해 이루어지므로, 해당 템플릿이 요구하는 테이블의 열의 수와 우리 쿼리가 출력한 테이블의 열의 수가 다를 경우 오류가 발생할 수 있습니다. 분석 전 프론트에서 몇 개의 열을 가진 테이블을 요구하는지 확인하는 것도 좋습니다.
Hint: SELECT 1,2,3 from table -> 이 쿼리는 총 3개의 열을 가진 테이블을 반환하며, 각 열은 1,2,3으로만 채워져 있습니다.