file upload

2023. 3. 8. 00:00Site/DVWA

# file upload 

파일 업로드 취약점은 파일을 업로드 하는 기능에 보안이 잘 적용되어 있지 않을때 발생하는 보안 취약점입니다. 

게시판에 글을 업로드하거나 사진 목록에 이미지 파일을 업로드하는 경우인 사례이며 공격자는 이러한 취약점을 이용하여 웹쉘이라는 악성코드를 심어 업로드하여 해당 시스템을 공격할 수 있습니다.  대략적이 공격 프로세스는 악성파일을 업로드해 공격할 사이트의 서버에 저장 -> 해당 악성파일을 다운로드 & 실행 시켜 시스템에 침투하는 방식입니다. 


# low 

이미지 파일만 업로드 가능한 것처럼 보이는데 low레벨에서는 딱히 구분을 안하는 것 같습니다. 

 

테스트를 위해 업로드 할 shell.php 생성 -> Get함수로 cmd변수의 값을 받아 시스템과 관련된 명령어를 쓸 수 있도록 php코드를 작성.

이렇게 해서 shell.php?cmd=['실행할명령어'] 형식으로 입력하여 공격명령을 실행할 수 있습니다.

 

 

 

성공적으로 ../../hackerable/uploads/ 위치에 shell.php가 업로드 되었다고 문구가 나타납니다. 

일단 알겠는데 ../../이 어디에 속하는지 아직 모르므로 해당 위치를 찾아보겠습니다. 

 

 

 

/usr/share/dvwa에 들어가서 확인해보니 hackable 디렉토리가 최상위 디렉토리인 것을 확인할 수 있습니다.

hackable부터 그대로 넣어주어 명령어를 실행하겠습니다. 

 

 

cmd 파라미터 값에 현재위치를 알 수 있는 pwd 명령을 입력하여 값이 잘 나오는지 확인하였더니 

현재 업로드된 shell.php의 위치가 잘 나오는 것을 확인 할 수 있습니다. 


# medium 

medium레벨에서 같은 방법으로 업로드 해보니 확장자가 JPEG, PNG만 허용되는 것 같습니다. 

 

 

 

해당 소스코드를 보니 uploaded_type이 jpeg, png인 타입만 받고 있습니다.

우회하는 방법은 type을 jpeg나 png로 변경해주면 될 것 같습니다. 

버프슈트를 사용하여 업로드 할때의 패킷을 잡아 변경하는 시도를 하겠습니다. 

 

 

패킷을 잡아보니 해당 업로드된 shell.php가 보이고 Content-Type이 php파일로 인식되는 타입으로 지정되어있습니다. 

해당 부분을 아까 봤던 소스코드에서 image/jpeg 나 image/png로 변경하겠습니다. 

변경하니 성공적으로 업로드가 되었습니다. 


# high 

먼저 소스코드를 확인하니 이번에는 타입이 아닌 확장자로 검열을 하는 것 같습니다.또한 getimagesize함수를 통해 실제 이미지인지 검열하는 작업도하는 것 같습니다. 일단 마찬가지로 버프슈트를 이용하여 패킷을 잡고 shell.php부분에 확장자 jpg를 추가해 보는 방식으로 시도하겠습니다. 

 

 

 

.jpg확장자를 추가했더니 공격이 안통하니 아예 shell.php를 shell.jpg로 확장자로 바꿔서 업로드해보니 역시 우회가 안됩니다. 

 

 

cf) 파일업로드공격기법시 체크할 것들

1. 헤더부분체크 2. 확장자체크 3. 컨텐츠타입 체크

 

2번은 통하지않고 3번은 medium에서 시도한 방법입니다. 1번 방법으로 헤더부분을 체크하겠습니다. 

 

 

패킷을 잡아보니 아예 확장자를 jpg로 변경하여 타입 역시 image/jpeg가 나오며 헤더 부분에 getimagesize를 우회하기 위해 GIF89a라는 이미지 확장자를 추가합니다. 

 

cf)

- GIF89a = GIF확장자의 하위 헤더정보이며  png, jpg등 모든 파일을 사진으로 인식하게 해줌

- getimagesize = 이미지의 크기나 타입에 대한 정보를 출력하는 함수로 7개의 엘리먼트를 배열로 제공함.

[0](width값) [1](Height값) [2](Image Type Flag, 타입을 정수로 반환) [3](width, Height값) [bits](비트) [channels](channels) [mime](파일 mime-type; ex) image/jpeg)

-> getimagesize 자세한 링크 https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=questzz&logNo=220247230285  

 

수정을 하여 패킷을 보내니 성공적으로 업로드가 된 것을 확인 할 수 있습니다. 

'Site > DVWA' 카테고리의 다른 글

about dir burster & nikto & dnsenum  (0) 2023.05.20
bruteforce attack  (0) 2023.05.18