28. [14주차]-1 파일 업로드 공격

* 과제

1. 복습

2. 웹 쉘 문제 풀기


 

1. 복습

파일 업로드 공격은 공격자가 원하는 파일을 업로드하는 공격이다.

파일을 업로드 하는 부분에서 취약점이 발생하며, 업로드되는 파일에 대해 검증 작업을 하지 않아서 문제가 생긴다.

 

웹 쉘 공격의 순서는 다음과 같다

1. 웹 서버 측 실행 코드 파일을 업로드

 - php, jsp, asp 등 이 있다.

 

2. 업로드된 파일의 경로를 알아낸다.
 - 업로드한 파일이 출력되는 곳을 확인한다.
 - 이미지 주소를 복사해서 하는 식으로 확인
 
3. 업로드된 파일 경로를 통해 요청을 한다.(=실행을 한다.)

 

 

파일 업로드에 대해 대응방법이 있다.

 

1. MIME 타입 확인

요청의 Content-Type을 확인하는 것이다.

하지만, 쉽게 변조가 가능하다.

 

2. 실행 권한 제거

파일이 업로드되는 디렉터리는 실행권한을 제거하는 것이다.

하지만, "../file" 이런식으로 경로를 추가해서 다른 디렉터리에 파일을 업로드할 수 있다.

 

3. 확장자 제한

확장자에 대해 블랙리스트 기반의 필터링을 수행한다.

하지만, php의 경우 php3, php5, phtml 등 다른 확장자를 사용할 수 있고 이는 다른 파일들도 마찬가지이다.

따라서 이 모든 경우를 알아야 하기 때문에 관리하기 어렵다.

 

화이트리스트 기반의 필터링도 있다.

서버에서 원하는 확장자인지 확인하고 허용하는 방식인데 이것도 뭔가 우회 방식이 있을 것 같다.

 

 

2. 웹 쉘 문제 풀기

 

 

 

 

2.1 Web Shell 1

들어가면 기존에 많이 보던 페이지가 나온다.

바로 회원가입하고 로그인을 해준다.

 

게시판에서 글쓰기를 한다.

 

파일 업로드 시 abc.php라는 웹 쉘 파일을 넣는데 여기서 처음에 사용자 지정 파일로 이미지만 받을 수 있게 되어있어서 모든 파일로 변경해야 했다.

<?php
	echo system($_GET['cmd']);
?>

매우 간단한 코드이다.

 

 

파일이 성공적으로 올라갔고 링크를 복사해서 파일의 경로를 확인한다.

 

 

해당 URL을 알게 되었으니, cmd 인자를 통해 flag.txt 파일의 위치를 파악한다.

 

 

flat.txt 파일을 cat으로 확인해서 플래그를 얻을 수 있었다.

 

2.2 Web Shell 2

1번 문제와 똑같이 회원가입을 하고 로그인을 수행한다.

그 후 게시판에서 글을 작성한다.

 

php 파일을 바로 넣으면 위처럼 업로드할 수 없다고 한다.

 

버프스위트를 통해 응답을 확인해보니, 이미지 확장자만 허용을 하고 있었다.

 

그래서 먼저 png파일을 업로드하고 그 과정을 버프스위트로 보면서 중간에 요청을 변조해보기로 했다.

 

여기서 원래는 abc.png로 해서는 잘 되서 abc.php로 해보니 응답과 같은 결과가 나왔다.

여기서 파일이 업로드가 안된 줄 알았다.

 

그래서 확장자 필터링을 우회하려고 위처럼 한번 해보고 게시글에서 파일 링크를 확인해서 되는지 해보려고 했다.

 

먼저 공격은 되지 않았고 혹시나 해서 뒤쪽 경로를 지워보기로 했다.

 

그런데 웹 쉘이 올라가있는걸 확인했다.

아마 업로드 될 수 없는 파일이 탐지되었다는 메시지가 있었지만 실제로 파일이 올라갔었나 보다.

 

1번처럼 flag.txt파일을 찾았고 플래그를 얻을 수 있었다.

 

 

반응형

댓글()