---
description: 'DATE : 2023/9/16'
---

# File Upload Vulnerability \[2]

## &#x20;File Upload Vulnerability - Labs

파일 업로드 취약점은 공격자가 서버에 악의적인 파일을 올릴 수 있는 취약점으로&#x20;

서버에서 **적절한 검증 절차**를 거치지 않을 때, 더 쉽게 악용할 수 있는 취약점이다.&#x20;



파일을 업로드 할 때

**(1)** 서버에 업로드할 수 있는 확장자를 제한

**(2)** 파일 내용 확인

**(3)** 파일 크기와 실제 내용 크기 일치 여부 확인

**(4)** 파일 확장자와 파일 타입 일치 여부 확인&#x20;

등등 파일과 관련된 정보를 적절히 검사하는 과정을 거친다면&#x20;

어느 정도 파일 업로드 공격을 예방할 수 있을 것이다.



만약 파일 업로드와 관련된 그 어떤 검증 절차도 구현되지 않는 다면&#x20;

어떤 상황이 발생할 수 있는 지 간단한 Lab을 통해 알아보자!

***

### \[ ]





<figure><img src="https://2050385856-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FnJpS96NZbYerJIEOTo8i%2Fuploads%2FyaUwRzv7UwPCw3L5OHEu%2Fimage.png?alt=media&#x26;token=14a04a4c-2cef-49a7-ab33-6944a67b8b6f" alt=""><figcaption></figcaption></figure>

사용자가 업로드한 Image로 프로필 사진을 설정하는 기능이 있는 서버에



<figure><img src="https://2050385856-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FnJpS96NZbYerJIEOTo8i%2Fuploads%2FZQ2vSOYPdZArZhboC2aU%2Fimage.png?alt=media&#x26;token=4602be0e-c7a8-42bd-961f-8326cbf2ea9a" alt=""><figcaption></figcaption></figure>

wiener:peter 계정으로 로그인하면&#x20;



<figure><img src="https://2050385856-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FnJpS96NZbYerJIEOTo8i%2Fuploads%2FVX8jUlHkEwebTnfMSLPp%2Fimage.png?alt=media&#x26;token=5755062e-a836-4805-a448-4f02f4997ed8" alt=""><figcaption></figcaption></figure>

이미지 파일을 선택할 수 있는 form을 볼 수 있다.



여기서 이번 LAB의 목표인 파일을 읽는 web shell을 만들어&#x20;

```php
<?php echo file_get_contents('/home/carlos/secret'); ?>
```





<figure><img src="https://2050385856-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FnJpS96NZbYerJIEOTo8i%2Fuploads%2FuwGhzhng3kZ9F3Gehw1m%2Fimage.png?alt=media&#x26;token=d8d8cc88-7078-40c2-a8ce-df38bc229b9c" alt=""><figcaption></figcaption></figure>

Upload 버튼을 누르면 사용자가 선택한 파일이 어디로 올라 갔는지&#x20;

경로를 ("avatars/webshell.php") 알 수 있고





<figure><img src="https://2050385856-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FnJpS96NZbYerJIEOTo8i%2Fuploads%2Fo2XfiYSCythyj9Xt6sAy%2Fimage.png?alt=media&#x26;token=fda73931-cf2f-4b6a-986d-de4590a5d30a" alt=""><figcaption></figcaption></figure>





<figure><img src="https://2050385856-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FnJpS96NZbYerJIEOTo8i%2Fuploads%2FVy6MClnOZM1Nu48VApfO%2Fimage.png?alt=media&#x26;token=802b2c27-9785-4847-bd9f-63967c2fde4c" alt=""><figcaption></figcaption></figure>

LAB 페이지에 찾아낸 flag를 제출하면&#x20;





<figure><img src="https://2050385856-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FnJpS96NZbYerJIEOTo8i%2Fuploads%2Fv0osl7YYzHYBCfDmtodE%2Fimage.png?alt=media&#x26;token=99da9388-aa4c-4bb3-ad22-7440a6a65346" alt=""><figcaption></figcaption></figure>

LAB을 성공적으로 마무리할 수 있다. :clap::clap::clap:



***

위에서 본 LAB처럼 파일 업로드에 대한 그 어떤 예방 조치도&#x20;

공격자가 악의적인 파일을 실행하기 쉬워지기 때문에&#x20;

서버에서 정보를 탈취하는 등 원하는 동작을 실행시킬 수 있



따라서 image 파일만 업로드할 의도로 구성한 form에서는&#x20;

image type의 파일만 올릴 수 있도록 확장자를 확인하는 등의 검증 과정을 거치는 것이 좋다! :smile:
