본문 바로가기

WarGame/webhacking.kr

[webhacking.kr] Challenge 28 :: 파일 업로드 취약점 2 (.htaccess)



Summary

  • 파일 업로드 취약점에 관련된 두번째 문제입니다.
  • 첫번째 문제인 Content-Type에 대한 취약점은 Challenge 43(http://limjunyoung.tistory.com/81)을 참고하시기 바랍니다.
  • .htaccess 파일을 이용해야 합니다.
  • 실제 환경과 다르게 본 문제에서는 index.php외에 파일을 열어볼수 없게 되어 있습니다.



Challenge 28은 다음과 같습니다.



먼저 실제로 임의적인 파일인 "test.txt"라는 파일을 업로드해 봅니다. 업로드에 성공하면 다음과 같은 화면이 출력됩니다.



일단 무슨 의미인지는 이해가 가지 않지만, 업로드한 파일을 열어 보기 위해 "upload/test.txt"라는 경로로 이동을 해 보면, "404 Error" 페이지가 출력되는 것을 확인할 수 있습니다. 즉 본 문제에서는 실제로 파일을 업로드하는 것이 아니라 정답과 관련된 행위를 하면(?) 문제가 풀리도록 하드코딩을 적용해 놓은 것 같습니다.


이제 위의 hint에 나와 있듯이 ".htaccess"라는 것이 무엇인지 알아보도록 하겠습니다.



.htaccess는 하이퍼텍스트 액세스(hypertext access)의 준말로, 웹 서버 구성의 분산된 관리를 위해, 여러 웹 서버가 지원하는 디렉터리 수준의 설정 파일을 가리킨다.


참고] https://ko.wikipedia.org/wiki/.htaccess 



위와 같이 ".htaccess"는 디렉터리 단위로 웹을 설정할 수 있는 파일입니다. 그렇다면 ".htaccess"과 관련된 취약점에는 어떤것이 있을까요? hyunmini님 블로그에서 관련 내용을 참고할 수 있었습니다. (http://hyunmini.tistory.com/48)

즉 요약해 보면 다음과 같습니다.



".htaccess" 파일 안에 다음과 같은 내용을 삽입하여 취약점을 exploit 할 수 있습니다.

1) AddType application/x-httpd-php .txt .abc .xyz  //  ".txt", ".abc", ".xyz" 확장자를 가진 파일을 php파일로 실행

2) php_flag engine off  //  php 엔진을 off 시켜서 php 소스 열람



실제 모의해킹이라면 위의 1)과 같은 내용을 이용하여 WebShell파일을 업로드한 뒤 실행시키면 되겠지만, 본 문제에서는 실제 업로드가 적용되지 않으므로 보안을 우회하여 WebShell 파일을 업로드하는 것이 아니라 2)와 같이 "engine off"를 이용하여 php 소스를 열람한다면 $pw값을 볼 수 있을 것 같습니다. 


BurpSuite를 이용하여 ".htaccess"라는 파일명을 "php_flag engine off"라는 내용으로 업로드하면 문제를 해결할 수 있습니다.