DFIR/DFIR

[파일 업로드] 취약점 기록

dotaky99 2023. 11. 25. 23:18
반응형

getimagesize

반환값은 배열로 반환해준다. 아래 정보를 참고 바란다.

[0] => 756 // width
[1] => 676 // height
[2] => 3 // 이미지 타입 구분 번호
[3] => width="756" height="676" // style
[bits] => 8 // 비트
[mime] => image/png // 이미지 타입

 

 

만약 jpg 사진 파일만 업로드 가능하게 한다면 아래처럼 코드를 기본적으로 작성할 수 있다.

$File = getimagesize('업로드 파일');

if($File[2] == 'jpg'){
  이미지 업로드
}
else{
  에러 코드 작성
}

 

업로드할 파일은 악성 웹셸, 단순 phpinfo() 등 자유롭게 가능하다.

아무튼, 악성파일이 아래와 같이 GIF89a와 같이 사진 시그니쳐로 작성해주면, getimagesize는 사진파일로 인식하여 업로드를 성공시킨다.

GIF89a<?php
phpinfo();
?>

 

즉, 안전한 파일 업로드 소스코드를 구현하려면, 우회 가능한 오래된 함수를 사용하는 것은 옳지 않다. 따라서, PHP를 최신버전 업데이트 권고하며, 업로드되는 폴더는 실행 권한을 제거해야 한다. 또한, 업로드되는 파일 이름 난수화, 텍스트 이미지화 등 다양한 방법이 존재할 수 있다.

반응형