최대 1 분 소요


문제

image-20220112231709810



접속 정보

Home

image-20220112231952948


Upload My Memo

image-20220112225553088


test 파일 조회(다운로드)

image-20220112230204152

  • 클릭시 이런식으로 조회(다운로드)된다.
  • url을 확인해보면 GET 방식으로 name 메소드가 쓰인다.


flag.py

image-20220112230459202

  • flag.py를 다운받아야하니 flag.py를 만들어 업로드해보자

image-20220112230531242

  • 뭐 없슴..
  • 소스 코드를 좀 살펴보자



소스 코드

image-20220112225457821

  • upload_memo()
    • if - with 절에서 filename에 ‘..’이 들어가면 ‘bad characters’를 출력하고
    • 업로드 성공시 UPLOAD_DIR/{filename}의 디렉터리로 등록된다.
    • 즉, 업로드된 디렉토리가 UPLOAD_DIR이라는 곳이기 때문에 상위경로(../)를 이용해 이곳에서 flag.py를 다운로드(접속 정보 페이지에서는 조회)


접속 정보

Upload My Memo

image-20220112230724268

image-20220112231752755

  • 상대경로(../)를 이용해야 하지만 위 소스코드에서 보았듯이 Filename에 상대경로(…/)가 들어갈시 오류 메시지 출력한다.
  • 그렇다면 ‘소스코드’ 보기전 ‘접속 정보’에서 만들었던 파일로 이동하여 GET 방식의 요청을 이용해 name 매개변수에 상대경로를 이용해보자

flag.py

image-20220112231006994

image-20220112231828942

image-20220112231050270

  • GET 방식의 웹페이지에서 매개변수인 name을 이용해 상대경로를 이용하니

  • 다음과 같이 FLAG 출력

    FLAG = 'DH{uploading_webshell_in_python_program_is_my_dream}'

업데이트: