Web Hacking Study/수업 정리

[10주차] File Upload 대응방안, File Download 공격개념, 대응방안

silver surfer 2022. 6. 3.

* 보안 동향 Check

Follina, MS Office에 악성코드 삽입하는 기술 : Macro 이용하지 않음

① 보안 뉴스 → 구글 검색

https://www.boannews.com/media/t_list.asp

② 보안 회사의 블로그 사이트

> SK쉴더스 EQST insight

https://www.skshieldus.com/kor/media/newsletter/insight.do

> 안랩 ASEC Blog

https://asec.ahnlab.com/ko/

 

** 파일 업로드(Web Shell)

> 원인

→ 서버 측에서 실행할 수 있는 파일이 업로드 

① 파일 경로를 알아야하고,

② 실행할 수 있어야 한다

 

> 대응방안

① DB에 파일을 올리는 것 → BLOB/CLOB (자료형 타입)

② DB에 파일 경로를 저장하는 방법 → 업로드 되는 파일 경로 숨기기!

(+) 업로드 되는 디렉토리에 실행권한 x

ex)

download.php?filePath=/~~~~~

→ download.php?fileId=1

 

fileId     fileName    filePath

  1          test.png      /upload/test.png

이럴 경우에 SQLInjection으로 경로 읽어낼 수 있다

 

③ 파일 업로드 시 화이트 리스트 기반 확장자를 뒤에 붙여준다

ex)

허용해 줄 확장자(png, jpg) → test.php.png, asdfkjaq.php.png

 

php 코드가 있는 test.png 파일은 일반적으로 실행할 수 없지만 실행될 수 있는 조건이 있다

* LFI (Local File Inclusion) 취약점

> include() 함수처럼 다른 페이지를 공유하는 곳에서 일어난다

ex)

test.php → <?php asdfasdf ?>

<?php

    include('./test.php');

    ~~

    ~~

?>

<?php

    <?php asdfasdf ?> → include() 내 php가 코드에서 실행

    ~~

    ~~

?>

 

include("/~경로" . $_GET['page'])처럼 특정 페이지를 로드하는 기능이 있을 때,

서버에 있는 어떤 파일이든 내가 원하는 파일을 경로에 입력하면 그 파일이 응답에 붙어서 오게 된다

ex) ?page=../../../../../../../../etc/passwd

 

php 코드 삽입한 jpg 파일을 업로드 하고 include()가 동작하는 곳에서 실행한다

명령어 결과 출력, parameter로 lang과 cmd를 받아서 &

 

** File Download 취약점

> (서버에 있는) 파일을 마음대로 다운로드 받을 수 있다

> 다운로드 스크립트를 사용하는 곳에서만 File Download 취약점을 사용할 수 있다

ex)

filePath 파일 경로가 나오는 부분에서 할 수 있다.

> filePath파라미터를 ../ 이용해서 변조한다. 

fileName 부분에도 ../ 가능

fileId로 나오는 부분에서는 File Download 공격을 할 수 없다

> etc/passwd 파일을 이런 식으로 찾을 수 있다

 

* POC

> /etc/passwd

> /etc/hosts

 

이 취약점을 이용해서 소스코드를 다운로드 할 수 있다

DB와 연결된 페이지의 소스코드를 보고 코드의 취약점도 볼 수 있다

 

** 공격 시나리오

> 소스코드 받고, DB 계정 정보 탈취

 

** 대응 방안

① DB에 파일 저장 CLOB/BLOB

② ../ (directory traversal) 공격을 막을 수 있는 필터링

 

 

** 과제

normaltic.com:7001

normaltic.com:8001

normaltic.com:8002

풀이하고 정리

 

가능한 한 직접 만든 게시판에서 문제 만들어보기

댓글