⚙️File Upload (feat. .htaccess file)
DATE : 2024/2/20
Last updated
DATE : 2024/2/20
Last updated
이번에 살펴볼 예제는 File Upload 공격을 수행하는 과정에서 .htaccess file을 다룬다.
간단히 말해 .htaccess file은 각 directory마다 알맞은 설정을 부여할 수 있는 파일이다.
그 중에서도 File Upload 공격을 수행하는 과정에서 대표적으로 사용되는 directives가 있는데
그것이 바로, AddType이다.
예를 들어 위와 같이 .htaccess file을 작성하게 되면 .hanhxx 라는 확장자의 파일은 앞으로 php로써
처리하라는 설정이 이 파일을 업로드한 directory에 적용된다.
즉 AddType을 이용해 본인이 만들어낸 파일 확장자가 어떤 파일 유형으로 인식되도록 만들 것인지
설정할 수 있다.
그렇다면 .htaccess file을 어떻게 file upload 공격에 활용한다는 걸까?
파일을 업로드하는 포인트를 찾아 File Upload 공격을 하고자 하는데
PHP 파일을 업로드 했더니
업로드 할 수 없다는 문구가 출력 되는 상황이다..!
이와 같이 애초에 PHP 파일을 업로드할 수 없거나
PHP 파일이 업로드 되더라도 실행은 할 수 없는 경우라면 .htaccess file을 작성해볼 타이밍이다.
PHP로 처리되었으면 하는 파일 확장자를 만들어준 다음, 파일을 업로드한다.
파일을 업로드 하면 정상적으로 uploads directory에 파일이 들어간 걸 볼 수 있을 것이다.
이때 우리가 작성한 .htaccess file이 들어가는 위치가 uploads directory라는 건,
uploads directory에 존재하는 .hanhxx 확장자 파일은 PHP로 처리될 수 있다는 바를 의미한다.
따라서 PHP code가 정말로 실행되는 지 확인하기 위해 webshell.hanhxx 파일을 만들어준다.
(이름은 webshell이지만, 실제로는 마음대로 web shell을 마구마구 작성해서 올리면 안 된다..!)
파일을 선택한 후, 업로드 해주면
uploads directory에서 webshell.hanhxx 파일을 찾아볼 수 있다.
.hanhxx는 php code를 품은 파일이지만 확장자가 php가 아니기 때문에 필터링 되지 않고
성공적으로 파일을 업로드 할 수 있는 것이다!
동시에 .htaccess file에 .hanhxx 파일이 php로 처리되도록 설정을 해뒀기 때문에 우리는
webshell.hanhxx 파일을 요청함으로써
PHP code가 실행된 결과를 얻을 수 있게 된다. 👍
이렇게 PHP file을 업로드할 수 없는 상황이거나
실행 권한이 없는 directory에 업로드 되는 와중 path traversal 취약점이 존재하지 않는 상황이라면
새로운 확장자를 생성해 서버 측에서 실행 가능한 파일을 직접 만들 수 있다는 점!!
이것이 바로 .htaccess file을 활용한 File Upload 공격 되시겠다. 👏
File Upload와 관련된 POST에서 말하는 PHP는
꼭 "PHP"만 뜻하는 게 아니라 서버 측에서 실행 가능한 스크립트를 아울러 말하는 것이다.
현재 사용한 언어가 PHP라 대표적으로 언급하는 것 뿐!