2018. 7. 20.

[DVWA] 파일 업로드 취약점 실습 / 대응방안

실습 환경 : kali + DVWA


1) LOW


웹쉘 파일 다운로드

  • https://github.com/SecuAcademy/webhacking/blob/master/webshell.php 

http://127.0.0.1/dvwa/hackable/uploads/webshell.php?cmd=ls+-al

아무런 대응 방법이 없어서 웹셀업로드 및 실행이 간단히 실행되는 것을 알 수 있다.


2) medium

버프스위트로 잡아준다음 Content type 의 값을 image/jpeg 로 바꿔서 전달하면 업로드가 된다.

3) high

파일 확장자를 jpg, jpeg, png 인지 확인하며 getimagesize 함수로 실제로 이미지 파일인지 확인하고 있다. 
(참고 : http://blog.habonyphp.com/entry/php-%EC%9D%B4%EB%AF%B8%EC%A7%80-%EC%A0%95%EB%B3%B4-%EC%B6%9C%EB%A0%A5%ED%95%98%EB%8A%94-getimagesize-%ED%95%A8%EC%88%98#.W1GhzOSQw2w)

이를 우회하기 위해 다음과 같이 수행한다.  업로드가 올라간 것을 확인하였다. 
그러나 아래와 같이 해당 파일을 실행하면 에러가 발생한다. 


이런 경우 파일 인클루드 공격을 통해 업로드된 경로를 입력하면 공격이 수행된다.
http://localhost/dvwa/vulnerabilities/fi/?page=file/../../../hackable/uploads/webshell.php.jpg&cmd=ls%20-al 와 같이 입력해야 명령이 수행된다.



즉 이 경우에는 파일업로드 + 파일 인클루션 + 패스트래버설 을 조합하여 웹 사이트 공격을 수행 한 것이다.

4) impossible 


high 와 같이 확장자를 검사했지만 아래 소스 부분에서 이미지 파일을 다시 생성하려하고 있다. 그래서 무늬만 jpg 파일의 업로드를 차단 할 수 있다.

        if( $uploaded_type == 'image/jpeg' ) {
            $img = imagecreatefromjpeg( $uploaded_tmp );
            imagejpeg( $img, $temp_file, 100); 

그 외에 다음과 같은 대응방법이 있을 수 있다.
  • 업로드되는 파일의 이름을 랜덤하게 생성하는 방법
  • 업로드 되는 서버를 웹 서버와 분리하는 것도 방법이 된다. 
  • 업로드 폴더의 실행권한을 제거

Popular Posts

Recent Posts

Blog Archive

Powered by Blogger.