file upload 정리/File Upload Bypass/Null Byte Injection/File Include

황인환·2024년 7월 27일

간단요약

1. File Upload취약점

-> 공격자가 임의의 파일을 업로드 할 수 있는 공격
-> 사실상 web shell공격 == 서버측에서 실행가능한 파일을 업로드 할 수 있는 공격

2. 웹쉘

  • 정의
    -> 웹쉘이용자가 원격으로 서버를 제어 할 수 있다.
    -> 서버측 스크립트 언어(jwp,php 등)으로 작성
  • 간단 코드
    -> <?php system($_GET['cmd']); ?>

  • -> 사용자가 운영체제와 상호작용 할 수 있게하는 명령 해석기
    -> 터미널에서 명령어를 입력하여 시스템 명령을 사용하거나 프로그램 조작

3. 서버측 스크립트언어

  • 이유
    서버측 스크립트언어는 웹요청과 동시에 실행되어 출력되기 때문에
  • 필요한것
    업로드한 파일위치
    -> 파일을 요청하여 실행시키기 위해

4. 주로 발생하는 곳

예전에 썼었던 페이지나 지금 사용하지 않는기능에서 주로 발생
보통 주석처리되거나 여러경로를 통해 알게됨

File Upload Bypass

- 형태

-> 이중확장자(double extension)
ex) shell.png.php(o) / shell.php.png(x)

- 원리

개발자가 업로드할때 .뒤에 확장자만 체크하게 설정되어 있어 두번째 확장자는 체크 하지 않는 것
-> shell.png.php이름으로 업로드하면 첫번째 확장자만 체크하여 shell.png.php 로 저장되어 php실행

Null Byte Injection

- 형태

-> ex) shell.php%00.jpg

- 원리

업로드할때 원하는 확장자를 앞에적고 그뒤에 NULL값을 넣음으로써 NULL값부터 뒤는 저장되지 않게하는 방법
-> shell.php%00.jpg 업로드
-> 확장자가 jpg로 설정되어있어 업로드 필터링 통과
-> 저장될때 NULL값뒤는 사라지기 때문에 shell.php로 저장되어 실행가능

File Include

- 형태

ex)
파라미터 전달
aaa.com?lang=kor.php
코드
include <?= $_GET['lang']?>;

- 원리

webpage 파라미터의 값에 따라 다른페이지를 보여줌
ex) index페이지 불러옴
aaa.com?lang=kor.php->aaa.com?lang=index.php

- 장단점

장점단점
존재하는 모든페이지를 가져올수 있음소스코드(서버측 실행언어)는 못가져옴
서버측 언어를 실행하고 결과를 출력하기때문에 웹쉘이용가능소스코드를 못가져오는 이유는 서버측 언어를 실행하고 결과를 출력하기때문

- File Include 찾았지만 업로드 하는 곳이 없을때

  1. 웹로그 저장하는 경로를 찾음
  2. 웹주소 대신 웹쉘코드 입력 후 전송
  3. 로그경로에 웹쉘명령어를 파라미터 값으로 전달
  4. 로그에 결과값은 보이지만 웹쉘코드 자체는 보이지않음
    -> 실행하고 보여줘서

파일 다운로드 취약점

취약점 파악

다운로드 경로를 확인했을때 aaa.com/download_2/download.php?filePath=/sss/test.pHp에서 download.php와 같은 어떤파일을 전달해주는 웹요청을 발견했을때 추측가능

ex)download.php

$fileName=$_GET['fileName'];
download('/file/',$fileName);
//download는 특정결로에 있는 파일을 전달해주는 함수(실제로는 없음)
  • download.php로 보내는 파라미터 값에 ../../../../etc/password와 같은 중요한 파일 경로를 입력하면 나옴

    장점단점
    소스코드 다운가능소스코드 실행 불가능

파일다운로드 취약점을 발견했을때 가져오는 중요파일

리눅스윈도우
poc/boot.ini
etc/password/winit/win.ini

Normaltic Study 15주차

0개의 댓글