기본 개념과 정의
파일 업로드 공격이란 말 그대로 파일을 업로드하여 서버를 장악하거나 파괴하는 등의 해킹 공격기법입니다. 공격자가 원하는 임의의 파일을 업로드할 수 있는 공격입니다. 큰 파일을 업로드하여 DoS 공격을 할 수도 있고 웹셸은 업로드하여 서버를 장악할 수 도 있으며, 피싱을 위한 파일이나 XSS 공격을 위한 파일을 업로드하는 등 공격 방식이 다양할 수 있습니다.
발생 원인과 위치
파일 업로드 공격이 발생하는 위치는 파일을 업로드 할 수 있는 곳입니다. 주로 게시판을 생각해볼 수 있으며, 그 외에도 프로필 사진을 업로드하거나, 서류를 제출하는 페이지, 또는 신분증을 찍어서 보내는 것도 이러한 공격의 포인트가 될 수 있습니다. 진단을 위한 모의해킹 시에 프락시 도구를 통해서 발생위치를 추정해 볼 수 있습니다. 파일을 업로드 할 시에 파일 검증이나 검사가 올바르게 진행되지 않았을 경우 파일 업로드 공격이 가능할 수 있습니다.
공격 시나리오
생각해볼생각해 볼 수 있는 시나리오는 매우 다양하지만 5가지를 생각해 볼 수 있습니다.
- 서버 측 실행파일 업로드
- html 파일 업로드를 통한 피싱
- 업로드 및 덮어쓰기로 Deface 공격
- 업로드 및 덮어쓰기로 Stored XSS 공격
- 큰 파일을 업로드하여 DoS
파일 업로드 공격으로 가장 많이 시도되는 것은 서버 측에서 실행되는 파일을 업로드하는 것입니다. 웹 서버의 WAS에서 해석하는 언어를 알고 있다면 해당 언어로 실행되는 파일을 업로드하여 웹 서버에서 실행되도록 하는 페이로드를 입력할 수 있습니다. 이런 경우 해당 서버를 공격자가 '장악했다'라고 표현할 수 있을 만큼 매우 치명적인 공격입니다. 예를 들어 php로 실행되는 서버라면 셸이 실행되는 php 파일을 업로드하고 공격자가 업로드된 파일에 접근하여 명령을 입력하면 웹 서버는 공격자의 명령을 실행할 수 있습니다.
공격 단계
웹셸의 공격 단계는 매우 간단합니다. 웹 서버 측 실행 코드(웹셸)를 업로드하고, 해당 파일의 경로를 찾아서 실행시키면 끝입니다. 경로를 확인하는 방법은 해당 업로드 된 파일이 어디에서 나타나는지 보고 링크를 확인하는 방식입니다. 이미지나 파일을 다운로드하는 등의 기능이 구현된 곳으로 접근할 수 있습니다.
//한 줄 웹셸
<?php system($_GET['cmd']);?>
XSS와의 차이점
둘 다 스크립트를 실행시킨다는 점은 같지만 실행되는 위치가 다릅니다. XSS는 사용자/클라이언트 측에서 실행되지만, 파일 업로드는 서버 측에서 실행됩니다. 사용하는 언어도 XSS는 Client Side Script를 사용하고, 파일 업로드는 Server Side Script를 사용합니다. XSS/CSRF는 클라이언트(사용자)를 대상으로 하는 공격이며, SQLi와 파일업로드는 서버를 대상으로 하는 공격입니다. 세부적으로 보면, SQLi는 DB를 실행시키는 방식이고, 파일 업로드로 서버 측 스크립트를 실행시킨다면 WAS를 실행시키는 방식입니다.
대응 방안과 우회법
- 시나리오 1 - 업로드 파일 검사하고 제한
- 요청 값에서 content-type을 검사
- 우회 : 프락시 툴로 요청 값 변조
- 시나리오 2 - 실행 금지
- 웹서버 설정시 특정 디렉터리 파일을 실행권한을 주지 않는다.
- 우회 : 파일 업로드 시 프락시 툴로 경로 수정 (../웹셸) = Path Traversal
- 시나리오 3 - 확장자 필터링
- 비주류 확장자 사용 우회 : 대소문자 포함 또는 사용 가능한 다른 확장자 사용 (phtml, php3, jspx, jsw 등)
- 이중 확장자 우회 : 파일 업로드/저장 기능의 잘못된 구현으로 앞의 확장자까지만 검사하고 뒷부분을 검사하지 않는 경우 webshell.jpg.php와 같은 식으로 업로드
- Null byte Injection 우회 : webshell.php%00.jpg와 같은 방식으로 뒷 확장자를 검사하지만 저장 시에 %00에서 뒷부분을 생략하여 php까지만 저장되게 하는 우회기법
- 추가 우회 방법
- 이미지 파일의 hex edit, 파일 시그니쳐 변경
- 웹 설정 파일 업로드 우회 기법 : php의 예로 .htaccess파일을 업로드하여 서버에서 실행할 확장자를 지정할 수 있다.
- .htaccess 내용 예시 : AddType application/x-httpd-php .panda
위와 같은 내용으로 .htaccess를 업로드하면 업로드된 디렉토리에서 .panda로 된 확장자는 php로 실행된다.
- .htaccess 내용 예시 : AddType application/x-httpd-php .panda
모의 해킹 시 주의사항
모의 해킹의 목적은 웹에 특정 취약점이 있는지 여부를 파악하고 사전에 방어하기 위함입니다. 따라서 실제 공격 업무를 수행하는 것은 올바르지 않을 수 있습니다. 더 정확히는, 해서는 안됩니다. 웹셸은 업로드하는 것은 매우 위험한 행위이기 때문에 모의해킹 업무에서 웹셸은 업로드한다면 공격자가 이걸 알아챌 경우 매우 위험할 수 있습니다. 그렇지 않더라도 웹셸이 서버상에 존재한다는 것 자체가 매우 심각한 문제입니다. 따라서 POC로만 취약점을 점검하고 웹셸은 업로드하는 것은 지양해야 합니다. 하지만 침투 테스트를 통해서 더 깊게 점검을 제공해주고 싶다면, 담당자와 협의하여 조심스럽게 업로드하고 이후 테스트가 끝난 뒤에 해당 웹셸은 완전히 제거해야 합니다.
'💻Information Security' 카테고리의 다른 글
웹 셸 업로드 공격 및 리버스셸/바인드 실습 (1) | 2024.02.12 |
---|---|
aka.ms/alca 해킹 공격 시나리오 (1) | 2024.02.11 |
Server Side Script와 Client Side Script의 차이 (0) | 2024.02.08 |
SFTP 연결 : Visual Studio Code에서 작업한 내용 웹 서버로 옮기기 (1) | 2024.02.05 |
Panda Web Application 제작 기록(DevLog) (0) | 2024.02.05 |