파일인클루젼, 파일업로드

devguri·2022년 11월 10일
0
post-thumbnail
post-custom-banner

1. 파일 인클루젼 공격

php include() 소스코드에 삽입디는 것

  • 로컬파일인클루젼(LFI) : 이미 시스템에 존재하는 파일을 인클루드
  • 리모트파일인클루젼(RFI) : 외부에 있는 파일을 원격으로 인클루드

해커 공격을 통해 bad.php 실행됨

파일 인클루젼 공격 실습

Low 단계

bad.php 생성하기

-> bad.php에 입력한 값 나오게됨

passwd 볼 수 있도록 파일 수정하면 패스워드 관련한 것들 또한 출력됨

  • ../ 로 상위디렉토리로 이동하여 내부에 passwd 파일에 접근한다.

medium 단계

위에서 했던 공격 막기 위한 소스코드 사용함을 확인 할 수 있음

  • http:// 있으면 접근 못하도록 막는 코드
  • ../을 통해 path로 접근하지 못하도록 막는 코드

공격 방법
-> http 대신 hthttp://tp://로 입력하면 http:// 막아도 남아있기 때문에 공격 가능해짐

파일 인클루젼 공격 대응

파일이 맞는지 확인하고 아니면 에러 발생하도록 하는 소스코드로 대응

Dreamhack LFI 문제

php-1

문제정보

  • php wrapper 사용하여 찾아낸다.

php wrapper : 파일 시스템 관련 함수로 filename이 사용자의 입력이 돌 경우 php에존재하는 wrapper 이용해 개발자의 의도와 다른 행위 발생시키는 것임

-> flag 페이지에서 Permission denied가 나오고 hello.json에서는 hello가 나온다.

<pre>
<?php
    $file = $_GET['file']?$_GET['file']:'';
    if(preg_match('/flag|:/i', $file)){
        exit('Permission denied');
    }
    echo file_get_contents($file);
?>
</pre>

-> php wrapper filter를 사용하여 url 우회하여 접속했더니 Base64 코드가 출력됨

-> 결과로 출력된 값을 디코딩 해줬더니 flag 출력됨

파일 업로드 공격

파일이 업로드 되는 페이지(게시판, SNS)에 악성 파일(웹셀)을 업로드

  1. github에서 webshell.php 다운 받기
  2. gedit webshell.php으로 웹실 내용보기

  • 사용자 입력을 받기 위한 폼 표시하는 html 출력
  • cmd가 있으면 system이라는 함수로 출력한다.
  1. 폼에 내용 입력하면 cmd에 설정됨
  2. 사용자가 입력한 것을 시스템명령으로 실행함

Low 단계

  1. 웹실 파일 업로드

  1. 상위 디렉토리로 두번 이동

  1. etc/passwd 내용 출력하기

→ 이렇게 시스템 명령어 실행할 수 있는 것이 웹셀임

medium 단계

→ medium 단계에서는 업로드 실패 (JPEG, PNG 파일만 업로드 가능)

  1. 파일 업로드 했을 때 내용을 intercept 해서 가져오기

→ 업로드 한 파일이 php라서 php파일로 설정됨

  1. image/jpeg로 바꾸고 forward시키기

→ 파일 타입 조작했더니 파일 업로드 성공

💡 파일 타입만 검사해서 불충분한 대응이라는 점 파악

high 단계

  • 대응 : 클라이언트에서 자동으로 설정하는 타입을 보는 것이 아니라 파일의 실제 타입을 검사
  1. intercept로 가져오기
  2. 이름 php.jpg로 바꾸기
  3. 알애 GIF89a 추가 ( GIF이미지 파일의 표준에 정의된 값으로, 이미지 파일 인척하여 속일 수 있다.

→ 업로드 성공함

  • 문제 : php.jpg로 저장했기 때문에 서버에도 jpg파일로 저장됨

해결 방법 : 파일 인클루젼과의 조합으로 공격 가능 ( 원래 이름은 jpg이지만 저장된 파일은 웹실 코드이기 때문에 파일에 삽입됐던 코드를 인클루드 하여 실행 가능함)

  1. 파일 인클루젼으로 들어가기
  2. page이름 적을 때
  3. high 단계에서 file/를 입력해줘야 경로를 지정해줘야하는 대응방안 사용
  4. dvwa 다음이기 때문에 3번의 상위 디렉토리로 이동

→ jpg 파일이지만 파일 인크루젼 공격으로 webshell 실행

  1. 바로 입력하면 에러 발생( 폼 사용하지 않기)

파일업로드 공격 + 파일인클루젼공격 + 패스트래버설 공격 조합으로 공격한것 ( 웹사이트 해킹하는데 성공)

[PortSwigger] file upload 문제

file upload

php 웹셀 업로드하고 /home/carlos/secret 파일 내용을 출하도록 사용하기

profile
Always live diligently
post-custom-banner

0개의 댓글