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

# File Upload Vulnerability \[5]

## <mark style="color:blue;">File Upload Vulnerability</mark>

지금까지 살펴본 파일 업로드와 관련된 개요는

**(1)** 파일 업로드 취약점이 무엇인지

**(2)** 파일 업로드와 관련된 그 어떤 조치도 취하지 않은 경우

**(3)** 파일 유형을 확인해 특정 파일만 승인하는 경우(Content-Type header)

**(4)** 파일이 업로드 되는 경로의 폴더에서는 파일 실행을 허용하지 않는 경우 (path traversal)

와 같이 정리할 수 있다.



파일 업로드 공격을 막기 위해서는 파일 유형(확장자), 파일 내용, 파일 크기 등

적절한 요소를 검사하는 과정을 거쳐야 한다고 얘기한 바 있다.



이번에 살펴볼 LAB은 어떤 방법으로 파일 업로드 공격을 막고 있을 지.. 확인해보자!

***

### <mark style="color:blue;">**\[ LAB#4 ]**</mark>



<img src="https://2050385856-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FnJpS96NZbYerJIEOTo8i%2Fuploads%2F6TgyLoXWRjv8dZyXNe7m%2Fphishing%20target%20list_1.png?alt=media&#x26;token=64cc2ce1-0f8d-4f95-877f-b1d6ecdf62c6" alt="" data-size="original"><img src="https://2050385856-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FnJpS96NZbYerJIEOTo8i%2Fuploads%2F55hNaUYKp4bnYDS9wYRr%2Fphishing%20target%20list_2.png?alt=media&#x26;token=57992b1e-d507-43d9-82ad-dfacbac6d44a" alt="" data-size="original">

LAB으로 들어가 로그인을 해준 다음



<figure><img src="https://2050385856-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FnJpS96NZbYerJIEOTo8i%2Fuploads%2FF1iMzlKcu1oSp5aVzJJf%2Fphishing%20target%20list_3.png?alt=media&#x26;token=dc067de6-3053-4561-90aa-0ecec648bc56" alt=""><figcaption></figcaption></figure>

이전과 동일하게 webshell.php를 업로드 해보면&#x20;



<figure><img src="https://2050385856-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FnJpS96NZbYerJIEOTo8i%2Fuploads%2FjMTzDRvAxRe9sRvF4JxY%2Fphishing%20target%20list_4.png?alt=media&#x26;token=51bcf1da-0a90-48b7-97e9-a116d8778d3c" alt=""><figcaption></figcaption></figure>

PHP file은 업로드할 수 없다고 한다.

우리는 shell을 업로드한 다음 실행시켜야 함으로 php, asp와 같은 확장자를 사용하기는 해야 한다.



![](https://2050385856-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FnJpS96NZbYerJIEOTo8i%2Fuploads%2FtvorqbOVRMg3riLUFuOR%2Fphishing%20target%20list_5.png?alt=media\&token=929fcb27-dd5b-4a0c-8e90-b94c32f40dc0)![](https://2050385856-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FnJpS96NZbYerJIEOTo8i%2Fuploads%2FQIZJ6thLxGIvX5fVTaJP%2Fphishing%20target%20list_6.png?alt=media\&token=4708aded-b6ae-4fa0-8d77-1551a3f3c2a0)

업로드 가능한 확장자를 찾기 위해 이것저것 넣어보았더니 phtml extension 말고는&#x20;

모두 업로드가 가능한 걸 알아낼 수 있었다.



<figure><img src="https://2050385856-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FnJpS96NZbYerJIEOTo8i%2Fuploads%2FQ319FTd8qKGLAr8nlVIK%2Fphishing%20target%20list_7.png?alt=media&#x26;token=8bd5cd4f-bc38-44dd-8529-242c7a89f7b1" alt=""><figcaption></figcaption></figure>

파일 확장자를 변경한 후 (php -> php5) packet forward!



<figure><img src="https://2050385856-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FnJpS96NZbYerJIEOTo8i%2Fuploads%2FW42Ea6mM43eyXYrxrAPo%2Fphishing%20target%20list_8.png?alt=media&#x26;token=09b2f898-9306-4068-8686-36dcae2612e4" alt=""><figcaption></figcaption></figure>

성공적으로 파일이 업로드 되었다고 하니 이제 실행시켜보자.



<figure><img src="https://2050385856-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FnJpS96NZbYerJIEOTo8i%2Fuploads%2FdiekOpok3XknStJ2v9pu%2Fphishing%20target%20list_9.png?alt=media&#x26;token=1d326713-864f-46d6-a6a2-3bb05bc998b6" alt=""><figcaption></figcaption></figure>

URL 바에 /files/avatars/webshell.php5를 입력했더니!

파일 내용이 그대로 출력 되고 있다??? :unamused:



php, phtml을 제외하고 php를 대신하는 확장자 파일은 업로드는 되지만&#x20;

서버에서 파일 내용을 실행하지는 않는 듯하다.



이전 LAB에서는 path traversal attack으로 다른 directory에 파일 업로드했지만&#x20;

이번엔 path traversal 공격이 유효하지 않은 상황이다.



이럴 땐 어떻게 해야 하는가..!!

본질적인 문제는 서버에서 <mark style="color:blue;">**php5를 실행할 파일로서 인식하지 않고 있는 것**</mark>이다.



위에 첨부한 사진에서는 안 보이지만 packet 내용을 확인할 때 response 부분을 보면&#x20;

Server header가 포함되어 있는 걸 볼 수 있다.



```
Server : Apache 2.4.41 (Ubuntu)
```

Server header는 현재 동작하고 있는 서버가 무엇인지, 버전이 어떻게 되는 지를 알려준다.



따라서 이 header로 대상 서버가 <mark style="color:blue;">**Apache server**</mark>라는 정보를 얻을 수 있다.



Apache server는 .htaccess 파일에&#x20;

어떤 파일 확장자를 어떤 유형(content-type)으로 인식하면 되는 지를 설정할 수 있는 데

```
AddType application/x-httped-php .ltt
```

이런 식으로 작성하면 이 서버로 올라가는 <mark style="color:blue;">**ltt 라는 확장자 파일은 php로 인식해!**</mark>라는 뜻이다.



이 개념을 활용해 .htaccess file을 덮어쓰도록 파일 하나를 더 업로드해줄 것이다.

<figure><img src="https://2050385856-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FnJpS96NZbYerJIEOTo8i%2Fuploads%2FIn4AusQq7LyAHlPtDqd0%2Fphishing%20target%20list_15.png?alt=media&#x26;token=9697e682-4c7f-4e2b-91e8-dd24744c5441" alt=""><figcaption></figcaption></figure>

파일 업로드 버튼을 눌렀을 때 만들어지는 packet을 위와 같이 수정해준다.

이 파일이 정상적으로 올라가면 .hh 확장자 파일은 이제부터 php로 인식될 것이다.



<figure><img src="https://2050385856-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FnJpS96NZbYerJIEOTo8i%2Fuploads%2FW7J0ja6AdKpXwkD75KOo%2Fphishing%20target%20list_11.png?alt=media&#x26;token=eb4942bf-0461-4d60-9b5e-cc57d740ce98" alt=""><figcaption></figcaption></figure>

파일이 정상적으로 업로드 되었다는 문구를 받고 나서



<figure><img src="https://2050385856-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FnJpS96NZbYerJIEOTo8i%2Fuploads%2FAp9suvI86lv028eQtZdU%2Fphishing%20target%20list_14.png?alt=media&#x26;token=c6609b3a-ef28-44e1-80de-65bed8b0bc64" alt=""><figcaption></figcaption></figure>

<mark style="color:blue;">**.hh 확장자**</mark>로 webshell을 올려준다.



업로드 후 URL에 /files/avatars/webshell.hh를 입력하면

<figure><img src="https://2050385856-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FnJpS96NZbYerJIEOTo8i%2Fuploads%2FN33UtEIg3dl0KBJhBmTI%2Fphishing%20target%20list_16.png?alt=media&#x26;token=7dd84836-9c15-49e4-a4a1-bd0c685b4850" alt=""><figcaption></figcaption></figure>

이번엔 PHP code가 실행된 결과로 flag를 얻을 수 있을 것이다. :clap::clap::clap:
