모의해킹 스터디 복습

모의해킹 스터디 14주차(1): 파일 업로드

whydontyoushovel 2025. 1. 31. 20:29

목차

  • File Upload 공격 개요
  • 다양한 공격 시나리오
  • Web Shell
  • 파일 업로드 취약점 진단 시 주의점

 

 

 File Upload 

공격자가 원하는 임의의 파일을 서버에 업로드할 수 있는 공격

 

 

1) 발생 원인

  • 파일 업로드 시 검증을 제대로 거치지 않음
  • 예를 들어 프로필 사진을 업로드하는 곳이라면 이미지 파일만 올릴 수 있게 해야하는데 그런 과정이 없음

2) 발생 위치

  • 파일을 업로드할 수 있는 곳
  • 게시판, 프로필 사진, 서류 제출, 파일 업로드를 통한 신분증 인증 등
  • 파일을 파라미터로 보내고 있는지 버프 스위트로 확인

 

 

 

  File Upload 공격 시나리오       

서버에 파일 저장해서 할 수 있는 모든 공격

  • 서버측 실행 파일
  • Phishing
  • Deface 공격
  • Stored XSS
  • DoS 등등..

 

▷ 서버측 실행 파일 

웹쉘, 악성코드, 백도어, 악성 프로그램 등

 

1) 원리

  • 서버에서 사용 중인 스크립트(서버측 스크립트)로 악성 실행 파일을 작성하여 서버에 업로드
  • 업로드한 파일을 url로 요청하면 동적 페이지 처리를 담당하는 WAS가 해당 파일을 실행시키면서 공격자의 의도대로 공격이 진행됨

 

2) 예시

  • 아래와 같은 실행 파일을 만듦
//test.php
<?php
    echo "hello";
?>
  • 이걸 naver.com 서버에 업로드함 (네이버 서버가 php를 사용한다고 가정)
  • https://naver.com/어쩌구/uploads/test.php 요청 -> 서버는 php를 보고 WAS에 토스
  • 코드 실행한 후 서버에 전달
  • hello가 출력되는 페이지 응답받음

 

3) 영향

  • 서버에게 우리가 원하는 코드를 실행시킬 수 있음
  • 원하는 명령도 내리게 될 수 있음
  • 이 서버는 이제 내꺼임 (서버 장악까지 갈 수 있음)

 

 

▷ Phishing : HTML 파일 

1) 예시

  • login.php 파일을 네이버 서버에 업로드
  • naver.com/login.php 링크를 피해자에게 공유
  • 링크를 타고 들어간 피해자가 계정 정보를 입력하고 폼을 제출하면 그 정보가 공격자 웹 서버로 전송

2) 영향

  • 믿을만한 도메인이면 피싱인 줄도 모르고 공격당할 위험이 있음

 

 

▷ Deface 공격 

1) 원리

2) 영향

  • 화들짝 놀람
  • 보통 핵티비즘* 공격에서 일어남

*핵티비즘 공격이란?

더보기

해킹 + 액티비즘 => 해킹으로 "시민운동"할 때 그 "운동"하는 느낌

정치/사회적인 동기를 기반으로 시작되는 해킹

 

근데 Deface 공격은 저 위에 보안뉴스 링크에서 말하듯이 과시용으로 쓰이는 경우도 많은 듯.

(조선일보 전광판 중딩한테 다 털렸쥬?ㅋㅋ) 

 

 

▷ XSS 

그 중에서 Stored XSS

 

1) 원리

  • 원하는 스크립트가 포함된 파일을 기존 파일에 덮어씀

2) 예시

  • 기존 mypage.php를 악성 스크립트가 포함된 mypage.php로 덮어쓰는데 이 파일에 마이페이지의 모든 데이터를 공격자 서버로 보내는 스크립트가 포함된 경우

3) 영향

  • 자바스크립트로 할 수 있는 모든 공격 가능
  • XSS 공격을 할 수도 있지만 만약 CSRF 포인트가 발견될 경우 공격을 확장시킬 수도 있음

 

 

▷ DoS 

서비스 거부 공격

 

1) 원리

  • 파일 업로드를 통해 서버 시스템을 마비시켜 사용자가 서비스를 이용하지 못하게 함 

2) 예시

  • 겁나 큰 대용량 파일을 업로드해서 서버 메모리 꽉 차게 해서 사이트 이용을 못하게 함
  • 파일 요청 시 어떤 프로세스를 끊임없이 반복시켜 CPU 소진 등등

3) 영향

  • 공격자가 업로드한 파일을 삭제하지 않으면 전체 서비스에 문제가 지속될 수 있음
  • 이런 방법을 여러 컴퓨터에서 동시에 진행시키면 DDoS가 됨

 

이 중에서  서버측 실행 파일 에 초점 맞춰서 실습

서버측 실행 파일 중에서도 Web Shell !

 

 

 

 

   Web Shell       

  • 인터넷 상에서 OS 명령을 내릴 수 있게 하는 파일
  • 인터넷 OS 명령 인터프리터

 

목차:

1) php 웹쉘 코드 

2) 웹쉘 공격의 핵심 

3) 간단한 실습

 

 

▷ PHP 버전 Web Shell

<?php
    echo system($_GET['cmd']);
?>
  • cmd 파라미터를 GET 방식으로 받아서 system 함수에 넣어 실행
  • echo로 화면에 결과 출력
  • 리눅스라면 ls (파일 목록), id (사용자 정보) 등의 명령어를 실행하여 원하는 정보 출력 가능

 

 

▷ 웹쉘 공격의 핵심 포인트!

  • 서버측 스크립트로 무엇을 사용 중인가
  • 업로드된 파일이 서버의 어디에 저장되는가 (이게 어렵다고 함)

☞ 인터프리터를 알아야 실행될 코드를 짤 수 있고, 파일의 저장 경로를 알아야 url로 요청할 수 있음

☞ 이 두 정보를 찾아야 서버측 실행 파일을 업로드하여 공격할 수 있음

 

 

 

▷ 실습해보기

https://portswigger.net/web-security/file-upload/lab-file-upload-remote-code-execution-via-web-shell-upload

 

  • 이미지 업로드 기능에 취약점 있음
  • 웹쉘을 이용하여 /home/carlos/secret 파일의 내용 추출
  • 주어진 계정은 wiener / peter

ACCESS THE LAB 버튼을 눌러 문제 사이트 접속
My account 페이지로 들어감

 

My account 페이지로 접속하기 위해 주어진 계정으로 로그인 

마이페이지의 프로필 사진 업로드 기능 확인

 

업로드한 파일이 저장되는 경로를 확인하기 위해 임의의 이미지 파일 업로드

프로필 사진으로 해커처럼 생긴 무언가를 업로드함

 

  • 파일 저장 경로를 알아야 웹쉘 파일을 실행시킬 수 있음
  • 저장경로를 알아내는 방법은 출력되는 이미지 소스, 주소를 통해 알 수 있음
  • 업로드한 파일이 출력되는 곳을 찾아야 함

업로드한 파일이 출력되는 곳을 찾았다면
그 페이지의 html로도 파일 저장 경로를 알 수도 있음

 

혹은 이미지 파일에 마우스 커서를 대고 우클릭
이미지 주소를 복사함

 

복사한 주소를 새 탭의 주소창에 붙여넣고 들어감

 

내가 업로드한 그림이 출력되는 것을 확인하므로써 저장 경로를 알 수 있음
업로드할 웹쉘이 실행될 경로는 /files/avatars/webshell.php

웹쉘 파일을 올리기 위해 다시 마이페이지로 돌아감

 

  • Windows 보안 시스템에 걸리지 않는 웹쉘 파일을 만듦
<?php
    $ws = $_GET['cmd'];
    echo system($ws);
?>

만든 웹쉘 파일을 업로드함

 

이미지 출력하던 탭에서 
이미지 이름 대신 웹쉘 파일 이름을 쓰고 엔터 쳐서 웹쉘 파일 요청

 

서버는 웹쉘 코드를 실행시키려고 할 것이지만
필요로 하는 GET 파라미터가 누락되어 아무것도 출력되지 않음

 

버프 스위트로 가서 웹쉘 요청 데이터를 리피터로 전송
GET 요청 파라미터로 ls (현재 디렉토리 파일 목록 출력) 명령어를 전달함
응답에서 ls 명령어에 대한 서버의 응답을 볼 수 있음

 

cat /home/carlos/secret 명령어를 이용해 
문제에서 요구했던 파일 내용을 출력할 수도 있음
이 방법 말고 file_get_contents 함수를 이용해 파일 내용을 출력시킬 수도 있음
 >> echo file_get_contents('/home/carlos/secret'); <<

 

  • 사이트에서 요구하는 형식의 일반 파일 업로드 후 저장 경로 확인
  • 웹쉘 파일을 업로드한 후 위에서 확인한 url을 이용해 웹쉘 파일 요청
  • 응답을 보내기 위해 서버는 공격자가 원하는 동작을 하게 됨 (코드 실행)

 

* 서버측 스크립트 종류 알아내는 다양한 방법

더보기

위에선 파일 저장 경로를 알아내는 법 위주로 설명했지만 서버측 실행 코드를 짜려면 서버측에서 사용하는 스크립트의 종류 또한 알아야 함.

 

1) 페이지 확장자 확인

.php / .jsp / .asp / 혹은 .nid나 .co 같은 건 스프링 프레임워크 / ms의 IIS는 보통 asp 사용 / .do는 전자정부 프레임워크(스프링)

 

2) 서버 응답 헤더 분석

Server 헤더나 X-Powered-By 헤더, 또 쿠키의 세션 아이디를 통해서도 언어나 프레임워크를 유추할 수 있음

 

3) 소스코드에서 단서 찾기

프레임워크 이름이 언급된 코드나 특정 스크립트(나 프레임워크)만 사용하는 경로가 표시되어 있을 수 있음

 

4) 서버에서 사용 중인 기술 유추해주는 툴이나 서비스 활용

서비스 예시: Netcraft, BuiltWith

이건 잘 알아보고 사용해야할 듯함 (특히 툴)

 

 

무엇보다 경험을 쌓는 게 중요할 듯함

 

 

 

   파일 업로드 취약점 진단 시 주의점       

 

▷ 웹쉘은 올리면 안됨!!!!!!!

  • 파일 업로드 취약점 진단 목표: 업로드한 파일을 실행할 수 있는지 체크
  • POC 코드
<?php
    echo "hello";
?>
  • 위와 같은 의미없는 코드가 포함된 파일을 업로드하여 진단

 

▷ 취약점 발견되면??

  • 보안 담당자에게 웹쉘 올려서 다른 취약점 찾아도 되는지 질문하는 게 먼저임
  • 괜찮다는 대답이 돌아오면 그때 일케일케..

 

▷ 웹쉘을 사용한 뒤

  • 테스트 후 뭐시기 디렉토리에 있는 웹쉘 파일 삭제 요청
  • 다음날 웹쉘 삭제됐나 체크해보고 삭제되지 않았다면 재요청

~ 이것이 이 구역 매너 ~

 

 

+ 파일 업로드 취약점 점검 시 웹 모의해킹 테스트 범위

더보기

웹 모의해킹: 허가했다면 웹쉘 획득 후 웹 상에서만 활용

                     허가 못 받았다면 POC로 증명까지