File Upload 침투

황인환·2024년 7월 19일

정의

공격자가 원하는 임의의 파일업로드

발생원인

  • 파일을 업로드를 받을때 검사, 검증을 안한다.
    -> 프로필사진업로드하는곳(검증이 없다면)
    -> 사진파일 아니라도 업로드 가능 ex) php

발생위치

  • 파일업로드 할 수 있는 곳
    -> Burp로 확인 ex) 게시판, 서류제출, 프로필사진

공격시나리오

제한이 없다면

1. 서버측 실행파일

  • 서버측 실행파일을 알아야함
    -> ex) 서버측 언어가 php라면
    -> test.php 업로드 - <?php echo "good"; ?>
    -> 업로드된것을 다운해달라고 요청 - ~.com/upload/test.php
    -> .php파일이라 실행해서줌
    -> 실행하고 good만 화면에 return
서버측 언어인 경우
서버측 언어가 아닌 경우

2. HTML 파일

-> phising가능

3. Deface 공격

-> index 파일(덮어쓰기)

4. XSS 공격

-> stored xss

5. DOS

webshell

정의

서버에 원격으로 명령을 실행할 수 있도록 하는 스크립트

코드

get방식으로 데이터를 전송하면 쉘 실행
<?php system($_GET['cmd']); ?>

requests & response(pwd명령어 실행)

웹쉘 공격의 핵심

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

  • 서버에서 실행할 수 있는 코드 ex) php서버면 php 코드

2. 업로드 된 파일경로

  • 내가 업로드 파일 경로를 알아야함

  • 업로드한 파일의 경로를 알아내는 이유
    -> 요청해서 실행하기 때문에(경로확인 방법으로 URL 파악)
    -> 랜섬웨어 코드를 만들어도 실행이 안되면 의미없음
    -> 서버측 언어로 올리기 때문에 서버에서 실행하고 결과값 return

  • 경로확인 확인법
    다운로드하는 곳 링크카피
    <img src="">or <a href="">
    .com/file/upload/test.php 복사됨

링크 카피붙여넣기

- 서버공격 & 클라이언트 공격

서버를 공격서버를 이용하는 이용자 공격
XSS,CSRFSQLi, webshell(파일업로드는 둘다 가능)

파일업로드 대응

MIME

  • 인터넷 상에서 어떤파일을 보낼때 어떤형식인지 미리 알려줘 거기 해당하는 인코딩에 맞춰서 보냄
    -> content-Type을 바꿔서 전송
content-Type 변경전content-Type 변경후

실행자체가 안되게함

  • 문제점
    업로드후에 파일 서버로 파일을 요청하면 실행이 안되고 코드가 보임

  • 해결법
    저장할때 Burp에서 ..%2Ftest.php로 저장
    -> 해당페이지에서 실행이 막혀있기때문에 상위폴더에 저장
    ../ 뜻 상위폴더의미
    ../ -URL인코딩->..%2F

입력

확장자 제한

다른 확장자를 쓰게하면됨
php인 경우

  • 해결법 php,Php,PHp,PHP등 대소문자 결합
  • 해결법2 php3, phtml, inc 등 유사한 기능을 하는 다른 확장자 사용

HEX에 코드삽입

  1. 정상적인 이미지 받음 ex) apple.png(이미지 확장자)
  2. Hex.editor로 불러옴
  3. Hex값 중간이나 끝에 <?php $_GET['cmd']; ?>삽입
  4. 확장자를 png에서 php(서버측 실행파일)로 변경
  5. 파일 업로드
  • 되는이유
    file signature code때문
    Hex값으로 보면 특정확장자에 대한 file signature code가 존재
그림 예시
  • 서버측 실행확장자로 업로드하는 이유
    서버에서 실행되게 만들기위해 서버에서 실행할수있는 확장자로 업로드
    png나 jpg이면 서버가 읽지않음

Normaltic Study 6기 14주차

0개의 댓글