1. 문제상황

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/e7b641d6-8750-4541-8dab-d1e39f7261d8/스크린샷_2021-08-03_오후_10.46.09.png

'Upload My Memo' 에서 게시글을 올릴 수 있다.

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/65054b5b-b38a-4df3-8939-e88bfe159f01/스크린샷_2021-08-03_오후_10.46.50.png

2. 필요 역량

  1. URL Path Travel
  2. Analyzing Python code

3. write-up

우선, 웹페이지의 동작 구조에 대해 알아보기 위해 게시글을 올려보자.

테스트로 아무렇게나 적어보면, 메인페이지에 우리가 적은 게시글이 올라온다.

들어가보자.

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/6c8a61e6-c259-4c27-b38e-de96f3fd67f1/스크린샷_2021-08-03_오후_11.34.57.png

다음과 같은 URL의 구조를 가지고 있다. GET형식으로 해당 메모의 내용을 가져온다는 것으로 보인다. 그렇다면 정확하게 알기 위해 코드로 넘어가보자.

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/eece273b-73d0-431e-a0b3-7503f722bbe9/스크린샷_2021-08-03_오후_11.46.11.png

해당 루트에서 아무런 GET파라미터 검증을 하지 않고 그대로 파일을 읽고 있다.

이는 File Travel 공격을 시도해볼 수 있다는 점이다.

그렇다면 문제에서 원하는 flag.py를 읽게 할려면 flag.py에 위치한 디렉토리에 접근 후 읽게하면 문제가 풀린다는 것이다.

exploit code는 다음과 같다

../flag.py