본문 바로가기

해킹/Web Hacking

[11주차] 해킹 스터디 정리 - File Download 공격, LFI 취약점

[File Upload]

 

취약점 이유

> 업로드 되는 파일을 검증X

 

공격 시나리오

1. 웹 쉘 (리버스 쉘을 업로드하기 전 poc같은 느낌)

2. 도스 공격

3. 디페이스공격 index.html

4. 페이지 변조. 피싱 공격.

5. 악성코드 유포.

 

* 대응 방법!

1. 업로드 되는 파일 DB에 저장.

-> CLOB / BLOB

으로 설정하면 파일을 DB에 저장할 수 있음

(결국 웹서버가 아닌 다른 곳에 저장할 수 있게 만들면 어디든 가능)

> 이미지 파일도 바이너리 형식으로 저장시킴

 

2. NAS (Network Attatched Storage : 파일 서버)

: LAN으로 연결하는 외장 하드디스크

-> 업로드 파일이 저장되는 서버를 웹서버와 분리.

 

3. 파일 검증.

- 확장자 검증

- 파일 시그니쳐 검증

- MIME TYPE 검증

 

- DB로 저장되지 않도록 코드로 우회할 수 있을까?

> 없음.

insert

DB서버에 파일을 저장하는 SQL 구문은 존재

 

 


** 이미지 웹 쉘.

.jpg 파일을 올려서 웹서버를 장악한다!!!

 

1. .htaccess

2. LFI

> Local File Inclusion

-> Include 라는 기능

하지만 include.php의 소스코드를 얻고 싶다고 그냥 LFI 취약점을 이용하면

이미 클라이언트에 건네지기 전에 실행되기 때문에 소스코드를 탈취할 수 없다.

 

** LFI는 파일 업로드 공격의 상위공격 **

-- 파일을 업로드 하지 않고도 쉘을 딸 수 있다.

> log.

access_log : 침투에 있어 굉장히 자주 사용되는 트릭

 

<?php echo system($_GET['cmd']); ?>

 

이상한 요청을 날려도 결국 웹 서버에 access_log라는 형태로 저장되는데,

LFI 취약점을 이용해 이 log를 include하게 끌어와서 실행시키는 방법

 

GET방식에 <?php ?> 로 한줄 웹쉘을 날린 후, 이 오류 로그를 include시키면

cmd=ls 명령어가 실행된다.

 

 

RFI

만약, 원격으로 다른 페이지에서 정보를 가져오는 기능이 활성화되어 있다면

업로드할 필요도, LFI 할 필요도 없음

 


* File Download 취약점

> 공격자가 원하는 임의의 파일을 다운로드 할 수 있다.

 

해당 예시에서는 파라미터를 통해 다운로드 될 파일을 요청하고 있는데,

원하는 파일 경로를 입력해주면 해당 파일이 아닌 수많은 다른 파일을 다운로드할 수 있음.

 

특히 웹 소스 코드를 다운로드받을 수도 있음

or 소스코드 안에 포함된 DB계정 탈취

 

-- File Download

<?php

  fileDownload('./files/userName/'.$_GET['path']);

?>

 

<?php

  fileDownload('./files/userName'.$_GET['path']);

?>

일 수 있기 때문에 /를 먼저 쓸지, .. 을 먼저 쓸지

시도해보아야 함.

 

** 다운로드 취약점 찾는 팁

1. download 스크립트 있는.

download.php

down.php

 

2. 파라미터로 파일 이름을 받는가?

or 파일 경로를 받는가?

 

download.php?idx=2

 

idx=0 union select '/etc/passwd

 

** 파일 다운로드 취약점

대응방안

 

1. DB에다가 파일을 올리게 하는 것

 

down.php

 

select *~~~

 

2. 디렉토리 트레버져.

../../../