Cha4SEr Security Study

[해커팩토리 초급] - 4번 본문

Web/해커팩토리[초급]

[해커팩토리 초급] - 4번

Cha4SEr 2020. 7. 8. 15:12

해커팩토리 초급 4번 문제입니다.

 

게시판에서 파일 다운로드 취약점을 이용해 /temp/hacktory.txt 파일을 다운받는 문제입니다.

접속해봅시당

 

게시판 메인화면이 보이고

Board 탭에 들어가보면

 

글 3개가 올라와있습니다. 아무 게시글이나 들어가봅시다.

 

첨부파일이 있습니다. 일단 다운로드 받아봅시당

 

아무 내용이 없는 텍스트 파일 입니다. 

 

 

일단 페이지 구성은 이정도로 보고 이제 파일 다운로드가 어떤식으로 이루어지는지 보도록 합시다.

 

크롬 브라우저에서 F12를 누르고 왼쪽 위에있는 마우스 버튼을 클릭한 다음 왼쪽 홈페이지에 원하는 요소를 클릭하면 
해당하는 부분의 코드를 자동으로 불러올 수 있습니다. 

 

마우스 버튼 클릭한 다음 왼쪽 홈페이지의 다운로드 버튼을 클릭해봅시다.

 

다운로드 하는 부분의 코드를 찾았습니다.

 

<a> 태그로 감싸진 부분을 보면

다운로드 요청 페이지는 "HackDownAct.php"

보내는 파라미터는 FileName 인 것을 볼 수 있습니다.

그리고 FileName의 Value로 실제 파일 명이 들어가네요.

 

저렇게 되어있는 경우 URL 검색 창에서

이렇게 입력을 하게 되면 자동으로 다운로드가 됩니다.

 

FileName을 대놓고 URL에 입력해도 되는 상황이기 때문에

FileName을 우리가 원하는 파일인 /temp/hactory.txt로 설정하면 다운로드가 될 것으로 보입니다.

 

입력해봅시다.

 

FileName=/temp/hacktory.txt 로 설정 후 엔터

 

하지만 바로 다운로드 되지는 않았습니다. 

 

 

여기서 시도해 볼 수 있는 것은 파일 다운로드 취약점의 대표적인 키워드인 상위 디렉토리로 가는 "../" 
이용하는 것 입니다.

 

잠시 "../" 에 대해 설명드리자면

 

"/app/temp/dir/../" 라고 경로가 입력이 되면 dir의 상위 디렉토리인 "/app/temp/"를 지정하게 됩니다.

 

마찬가지로

"/app/temp/../dir" 이 입력 되면 /temp의 상위폴더인 /app의 하위폴더인 /dir 즉, "/app/dir"을 지정하게 됩니다.

 

예시로 서버 내부 코드가 다음과 같이 짜여져 있다고 가정해봅시다.

info', methods=['POST', 'GET'])def get_info(): result

filename = request.args.get("filename")
content = open("/app/test/dir/"+filename,"rb").read()
return content

 

만약 filename에 대한 아무런 입력 검증이 없으면 입력값으로 "../../../../../../etc/passwd"를 입력하게 되면

실제 open되는 파일은 "/app/text/dir/../../../../../etc/passwd"가 됩니다.

 

즉, 여러개의 ../ 때문에 상위 디렉토리로 계속 이동되고, 최종적으로는 /etc/passwd 파일이 open됩니다.

 

 

이제 문제로 돌아가봅시다.

 

처음에 간단하게 ../을 두개정도 넣어주었습니다.

 

하지만 파일이 존재하지 않는다고 나왔고, 

../의 개수를 여러개 해보아도 파일이 존재하지 않는다고 나왔습니다.

 

아무래도 ../에 대한 필터가 적용되어 있는 것 같습니다.

 

../을 필터링한 것에서 가장 대표적이고 취약한 필터링은 바로 "../"을 ""으로 없애버리는 것입니다.

 

만약 ../을 ""으로 바꾸게 된다면 입력값으로 "..././"을 넣어주게 되면 빨갛게 표시된 부분이 필터링으로 사라지게 되고

최종적으로는 ../이 다시 나타나게 됩니다. 

 

혹시 이번 문제에 이런 필터링이 되어있는지 확인해봅시다.

 

 

기본적으로 주어진 Text.txt 파일에서 상위 디렉토리로 가는 ../을 추가해주었습니다.

 

만약 ../이 사라지는 필터링을 하지 않았다면 파일이 존재하지 않다는 메세지가 출력되어야 할 것인데

 

다운로드가 너무나도 잘 됩니다. 이로써 ../를 사라지게 만드는 필터링이 존재한다는 것을 알게되었습니다.

 

그럼 이제 이것을 이용해서 /temp/hacktory.txt 파일을 받아봅시다.

 

바로 이렇게!

 

위에서  "..././" 했던 방법과 똑같이 만들고 두개정도 넣어 준 다음 temp/hacktory.txt 를 입력해보았습니다.

 

 

 

그랬더니 파일이 다운로드 되었습니다! 

 

4번도 성공적으로 풀었땅

'Web > 해커팩토리[초급]' 카테고리의 다른 글

[해커팩토리 초급] - 6번  (1) 2020.07.08
[해커팩토리 초급] - 5번  (1) 2020.07.08
[해커팩토리 초급] - 3번  (0) 2020.07.08
[해커팩토리 초급] - 2번  (0) 2020.07.08
[해커팩토리 초급] - 1번  (0) 2020.07.07
Comments