Kali Linux - DVWA실습 (File Upload Attack)

Kim Dae Hyun·2021년 5월 16일
0

Security

목록 보기
4/7

File Upload Attack?

  • 파일 업로드 공격은 웹 상에서 이미지, 동영상, 음악파일 등 여러 파일을 업로드하는데 있어 발생하는 취약점을 공격한다.
  • 이번에는 웹 쉘의 기능을 하는 PHP파일을 생성하고 해당 파일을 업로드하여 웹 상에서 쉘 명령어를 실행하도록 한다.

사전준비

  • 업로드 시킬 웹 쉘 기능을 포함하는 PHP파일 작성
    • HTTP form에서 입력된 값을 GET방식으로 전달받는다.
    • isset을 통해 값이 세팅된 경우 system함수를 이용하여 쉘 명령어를 수행한다.
  • 생성한 php파일을 /root 디렉토리에 위치시킨다.

DVWA를 이용한 File Upload 공격 (Low Level Security)

  • 파일 업로드 전
  • 파일 업로드
    • 하단에 파일이 업로드 된 경로를 확인한다.
    • ../../ 두 번의 상위 디렉토리로 이동 후 hackable/uploads/에 업로드 되었다.
  • 업로드 된 파일에 접근
    • 최초 업로드 된 경로: localhost/dvwa/vulnerabilities/upload/#
    • .. 한 번 : localhost/dvwa/vulnerabilities/
    • .. 두 번 : localhost/dvwa/
    • 따라서 접근 경로는 localhost/dvwa/hackable/uploads/webshell.php가 된다.
    • 상위 디렉토리로 이동 후 저장된 경로로 접근하여 작성한 웹셀 php파일을 실행시켰다.
  • 웹 쉘에서 명령어 실행
  • 파일 업로드 시 아무런 대응책이 없기 때문에 아주 쉽게 업로드 된 파일을 실행시킬 수 있었다.

DVWA의 Medium Level Security

  • 소스코드
    • 업로드 되는 파일의 type과 size를 검사하여 업로드 되는 파일이 이미지가 맞는지 확인하고 있다.
    • 여기서 type은 HTTP Header의 Content-Type에 해당한다.
  • 업로드에 실패한 모습
  • 우회방법
    • BurpSuit를 이용하여 요청을 인터셉트하여 헤더의 Content-Type을 임의로 변경한다.
    • 업로드 요청을 인터셉트한 결과이다.
      • Content-Type이 application/x-php이다.
        때문에 업로드에 실패한 것이다. 이를 변경해보자.
    • Content-Type을 변경하였다.
      • 실제 파일은 php파일이지만 전송시 Content-Type만을 바꾸는 것이다. image/jpeg 타입으로 변경하였다.
    • 변경 후 업로드에 성공한 모습이다.
    • 업로드에 성공하였기 때문에 웹 쉘 또한 수행된다.
  • Content-Type을 검사하는 것만으로는 부족하다. 요청이 인터셉트 되어 수정이 가능한 경우 얼마든지 헤더를 조작할 수 있다.

DVWA의 High Level Security

  • 소스코드
    • 이번에는 Content-Type이 아닌 파일의 확장자를 검사한다.
    • '.'를 기준으로 파일명을 나누어 확장자명만을 추출하고, jpg, jpeg, png를 확장자로 가지는 파일만 업로드가 가능하도록 하였다.
    • 추가로, getimageisze함수를 통해 업로드된 파일이 이미지인지 한 번 더 확인한다.
  • Medium단계의 우회방법은 통하지 않는다.
    • Content-Type은 검사하지 않기 때문에 굳이 해보지 않아도 안될 것을 알 수 있다.
  • 첫 번째 우회방법
    • 요청을 인터셉트하여 임의로 확장자를 바꿔보자
    • 확장자를 .php.jpg로 변경하였고, getimagesize를 우회하기 위해 내용 앞에 'GIF89a'를 추가하였다.
    • 일단 업로드에 성공하였다.
    • 업로드에 성공하였지만..
      • 현재 업로드된 파일명은 webshell.php.jpg이다.
      • 확장자가 jpg이므로 정상적으로 웹 쉘을 실행할 수 없다.
  • 두 번째 우회 방법 (File Inclusion + File Upload)
    • 업로드된 파일을 파일 인클루전을 통해 파일의 내용을 직접 웹 페이지에 삽입하는 방식이다.
    • 현재 DVWA는 High단계로 설정되어 있기 때문에 이전 파일 인클루전의 High단계도 우회해주어야 한다. 이전 File Inclusion 포스트를 참조!
    • path traversal을 이용하여 업로드한 디렉토리로 접근하여 파일을 직접 삽입시킨다.
    • 예제에서는 폼에서 직접 submit시 오류를 발생시킨다.
      url의 Query Parameter로 쉘 명령어를 전달해보자.
      • 정상적으로 쉘 명령어가 수행되었다.
  • High단계를 우회하기 위해 File Inclusion Attack과 File Upload Attack 두 가지 방법을 혼합하였다.
  • 특정 공격 기법만을 방어한다고 해서 해당하는 공격에 대해 완벽히 대응되는 것이 아니라는 것!

DVWA의 Impossible Level Security

  • 소스코드
    • 1차적으로 업로드된 파일이 이미지인지 타입, 확장자명 등으로 확인한다.
    • 이미지 파일로 판별된다면 해당 파일의 내용으로 이미지 파일을 다시 생성(re-encoding)한다.
    • 이로써 껍데기만 이미지 파일이였던 파일은 본래 의도된 역할을 하지 못하게 된다.
  • 또 다른 대응 방법
    • 업로드 되는 파일의 파일명을 저장하는 시점에 랜덤화하여 해커가 업로드 되는 파일에 쉽게 접근하지 못하는 방법
profile
좀 더 천천히 까먹기 위해 기록합니다. 🧐

0개의 댓글